Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2022:cristip:fancydoorlock [2022/05/15 20:38]
tprotopopescu [Descriere generală]
pm:prj2022:cristip:fancydoorlock [2022/06/01 21:48] (current)
tprotopopescu [Download]
Line 3: Line 3:
  
 ===== Introducere ===== ===== Introducere =====
-Acesta este un sistem de deblocare a unei incuietori pe baza unui PIN tastat pe un numpad, cu afisaj pe un LCD. Parola va putea fi introdusa si modificata ​atat din numpad, cat si din telefon, care va avea o conexiune Bluetooth cu sistemul.+Acesta este un sistem de deblocare a unei incuietori pe baza unui PIN tastat pe un keypad, cu afisaj pe un LCD. Parola va putea fi introdusa si modificata din keypad; usa se va putea deschide ​si din telefon, care va avea o conexiune Bluetooth cu sistemul.
  
 ===== Descriere generală ===== ===== Descriere generală =====
  
-Deschiderea usii se realizeaza prin introducerea parolei, urmata de caracterul "#"​. Daca parola introdusa este corecta, se va afisa pe ecranul LCD un mesaj corespunzator,​ iar LED-ul verde se va aprinde pentru 3 secunde, timpul in care incuietoarea se deblocheaza. In cazul in care parola este gresita, se va aprinde LED-ul rosu pentru 2 secunde, dupa care parola va putea fi reintrodusa.+Deschiderea usii se realizeaza prin introducerea parolei, urmata de caracterul "#"​. ​
  
-La introducerea codului "####"​, se va activa optiunea ​de resetare a parolei.+Daca parola introdusa este corecta, se va afisa pe ecranul LCD un mesaj corespunzator,​ iar incuietoarea se va deschide pentru 3 secunde. 
 +In cazul in care parola este gresita, se va afisa un mesaj corespunzator timp de 3 secunde, dupa care parola va putea fi reintrodusa.
  
-In plus, se deblocarea usii se va putea face si din telefon, ​cu ajutorul unui modul Bluetooth.+La introducerea codului "####",​ se va activa optiunea de resetare a parolei. Se va solicita vechea parola a incuietorii inainte de a putea fi setata o noua parola. 
 + 
 +In plus, deblocarea usii se va putea face si din telefon, ​prin trimiterea parolei prin aplicatie, dupa conectarea la modulul ​Bluetooth.
  
 ===Schema bloc=== ===Schema bloc===
Line 23: Line 26:
   *Keypad 4x4   *Keypad 4x4
   *Ecran LCD   *Ecran LCD
-  *Baterie ​9V +  *O baterie ​9V si doua baterii de 1,5V 
-  *Releu electric +  *Releu electric ​5V 
-  *Incuietoare +  *Incuietoare ​elextrica 12V 
-  *Modul Bluetooth +  *Modul Bluetooth ​HC-02
-  *2 LED-uri+
   *Fire   *Fire
 +  *Condensator 10uF
  
  
 ===Schema electrica=== ===Schema electrica===
 +{{:​pm:​prj2022:​cristip:​fancy_door_lock_schema_electrica.png?​600|}}
  
 +===== Software Design =====
 +===Mediu de dezvoltare===
 +Proiectul a fost programat exclusiv in ArduinoIDE.
  
 +===Biblioteci===
 +Am folosit 3 biblioteci auxiliare, pentru utilizarea LCD-ului cu modul I2C si pentru utilizarea Keypad-ului.
 +  *#include <​LiquidCrystal_I2C.h>​
 +  *#include <​Keypad.h>​
 +  *#include <​Wire.h>​
  
-===== Software Design ​=====+===Organizarea codului=== 
 + 
 +  *Definirea bibliotecilor,​ valorilor initiale pentru parola si codul de resetare, a pinilor si variabilelor auxiliare folosite. 
 +<code cpp> 
 +#include <​LiquidCrystal_I2C.h>​ 
 +#include <​Keypad.h>​ 
 +#include <​Wire.h>​ 
 +#define LENGTH 5 
 +#define LOCK 11 
 + 
 +char data[LENGTH];​ 
 +char password[LENGTH] ​"​1234";​ 
 +char resetCode[LENGTH] ​"####";​ 
 +byte k 0; 
 +byte z 1; 
 +const byte column = 4; 
 +const byte rows = 4; 
 +char confirmButton;​ 
 +int openCommand;​ 
 +char keys[rows][column]= { 
 + ​{'​1','​2','​3','​A'​},​ 
 + ​{'​4','​5','​6','​B'​},​ 
 + ​{'​7','​8','​9','​C'​},​ 
 + ​{'​*','​0','#','​D'​} 
 +}; 
 +byte rowPins[rows] = {9,​8,​7,​6};​ 
 +byte colPins[column] = {5,​4,​3,​2};​ 
 +Keypad myKeypad=Keypad(makeKeymap(keys),​ rowPins, colPins, rows, column); 
 +LiquidCrystal_I2C lcd(0x27, 16, 2); 
 +</​code>​ 
 + 
 +  *Functia setup pentru pornirea LCD-ului si a serialei care va comunica cu modulul Bluetooth. 
 +<code cpp> 
 +void setup() {  
 +  pinMode(LOCK,​ OUTPUT); 
 +  digitalWrite(LOCK,​ LOW); 
 +   
 +  lcd.init();​ 
 +  lcd.backlight();​ 
 +  Serial.begin(9600);​ 
 +
 +</​code>​ 
 + 
 +  *Functia loop, care contine cazurile principale ale programului. Mai intai, determina daca parola va fi introdusa de la tastatura sau prin modulul Bluetooth. In functie de aceasta decizie, va efectua citirea parolei introduse prin modul corespunzator. In cazul in care parola introdusa este codul de resetare, se solicita introducerea parolei vechi, iar apoi setarea parolei noi. In cazul in care se introduce o parola corecta, incuietoarea se deschide. 
 +<code cpp> 
 +void loop() { 
 +  lcd.setCursor(0,​0);​ 
 +  lcd.print("​Enter pass:"​);​ 
 + 
 +  int t = 1; 
 +  // Se verifica daca se transmite ceva pe seriala 
 +  if (Serial.available() > 0) { 
 +    t = 0; 
 +  } 
 + 
 +  // Se citeste parola introdusa de la tastatura, sau pe seriala 
 +  while(k < 4) { 
 +    if (!t) { 
 +      data[k] = Serial.read();​ 
 +    } else { 
 +      data[k] = myKeypad.waitForKey();​ 
 +    } 
 +    if(data[k]) { 
 +      lcd.setCursor(k,​1);​ 
 +      lcd.print(data[k]);​ 
 +      delay(500);​ 
 +      k++; 
 +    } 
 +  } 
 +   
 +  z = 1; 
 +  while(z) { 
 +    // Se asteapta tasta '#'​ pentru confirmarea parolei 
 +    if (t) { 
 +      confirmButton = myKeypad.waitForKey();​ 
 +    } else { 
 +      confirmButton = Serial.read();​ 
 +    } 
 +    if(confirmButton == '#'​) { 
 +      z = 0; 
 +      // Daca parola este corecta 
 +      if(strncmp(data,​ password, 4) == 0) {  
 +        lcd.clear();​ 
 +        lcd.setCursor(0,​0);​ 
 +        lcd.print("​Correct pass"​);​ 
 +        digitalWrite(LOCK,​ HIGH); 
 +        delay(3000);​ 
 +        digitalWrite(LOCK,​ LOW); 
 + 
 +      // Daca s-a introdus codul de resetare 
 +      } else if(strncmp(data,​ resetCode, 4) == 0){ 
 +        clearData();​ 
 +        lcd.clear();​ 
 +        lcd.setCursor(0,​ 0); 
 +        lcd.print("​Enter old pass:"​);​ 
 +        while (k < 4) { 
 +          data[k] = myKeypad.waitForKey();​ 
 +          if(data[k]) { 
 +            lcd.setCursor(k,​1);​ 
 +            lcd.print(data[k]);​ 
 +            delay(500);​ 
 +            k++; 
 +          } 
 +        } 
 + 
 +        // Daca parola veche introdusa este corecta 
 +        if (strncmp(data,​ password, 4) == 0) { 
 +          clearPassword();​ 
 +          lcd.clear();​ 
 +          lcd.setCursor(0,​ 0); 
 +          lcd.print("​Enter new pass:"​);​ 
 +          while(k < 4) { 
 +            password[k] = myKeypad.waitForKey();​ 
 +            if(password[k]) { 
 +              lcd.setCursor(k,​1);​ 
 +              lcd.print(password[k]);​ 
 +              delay(500);​ 
 +              k++; 
 +            } 
 +          }   
 + 
 +        // Daca parola veche introdusa este gresita 
 +        } else { 
 +          lcd.clear();​ 
 +          lcd.setCursor(0,​ 0); 
 +          lcd.print("​Wrong old pass:"​);​ 
 +          delay(1000);​ 
 +        } 
 + 
 +      // Daca parola initiala introdusa este gresita 
 +      } else {  
 +        lcd.clear();​ 
 +        lcd.setCursor(0,​0);​ 
 +        lcd.print("​Incorrect pass"​);​ 
 +        delay(3000);​ 
 +      } 
 + 
 +    // Daca se introduce din greseala alta tasta in afara de #   
 +    } else { 
 +      lcd.clear();​ 
 +      lcd.print("​Press #"); 
 +      delay(1000);​ 
 +    } 
 +    clearData();​ 
 +  }  
 +   
 +  lcd.clear();​ 
 +
 +</​code>​
  
 +  * Functii auxiliare, clearData (elibereaza vectorul in care se salveaza parola introdusa) si clearPassword (elibereaza vectorul in care este salvata parola sistemului, pentru a permite resetarea acesteia).
 +<code cpp>
 +void clearData() {
 +  while (k != 0) {
 +    data[k] = 0;
 +    k = k - 1;
 +  }
 +  return;
 +}
  
-<note tip> +void clearPassword() { 
-Descrierea codului aplicaţiei ​(firmware): +  ​while (k != 0{ 
-  ​* mediu de dezvoltare ​(if any) (e.g. AVR Studio, CodeVisionAVR+    ​password[k] = 0; 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) +    k = k 1; 
-  ​* algoritmi şi structuri pe care plănuiţi să le implementaţi +  ​} 
-  ​* (etapa 3) surse şi funcţii implementate +  ​return; 
-</note>+ 
 +</code>
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +In urma proiectului, am obtinut o macheta cu tastatura si afisajul LCD, cu o mica usa ce se va putea deschide la deblocarea incuietorii,​ care functioneaza conform ciclului descris mai sus
-Care au fost rezultatele obţinute în urma realizării ​proiectului ​vostru. +
-</​note>​+
  
 ===== Concluzii ===== ===== Concluzii =====
 +A fost un proiect interesant, aplicat, in care am simtit ca am pus la folosinta conceptele si tehnicile dobandite in cadrul laboratoarelor,​ dar am avut parte si de experiente noi, utilizand anumite module unice.
  
 ===== Download ===== ===== Download =====
  
-<note warning> 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). 
  
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:​** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. +{{:pm:prj2022:cristip:332CB_Protopopescu_Theodor_Fancy_Door_Lock.zip|}}
-</​note>​+
  
-===== Jurnal ===== 
  
-<note tip> 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. 
-</​note>​ 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +  - https://​www.arduino.cc/​reference/​en/​libraries/​keypad/​ 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**+  https://www.arduino.cc/​reference/​en/​libraries/​liquidcrystal-i2c/​ 
-</note>+  - https://​howtomechatronics.com/​tutorials/​arduino/​arduino-and-hc-05-bluetooth-module-tutorial/
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
pm/prj2022/cristip/fancydoorlock.1652636318.txt.gz · Last modified: 2022/05/15 20:38 by tprotopopescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0