Differences

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

Link to this comparison view

pm:prj2021:amocanu:door_lock_rfid_password [2021/06/02 18:40]
ana_maria.milcu
pm:prj2021:amocanu:door_lock_rfid_password [2021/06/03 01:42] (current)
ana_maria.milcu
Line 38: Line 38:
 {{ :​pm:​prj2021:​amocanu:​poza_ana.jpeg?​750|}} \\ {{ :​pm:​prj2021:​amocanu:​poza_ana.jpeg?​750|}} \\
  
-Schema electrica: \\+ \\ 
 + 
 +==Schemă electrică== 
 + 
 +{{ :​pm:​prj2021:​amocanu:​schema_anamariamilcu.jpeg?​750|}} ​\\
  
 ===== Software Design ===== ===== Software Design =====
 +
 +<note tip>
 +Mediul de dezvoltare folosit a fost [[ https://​www.arduino.cc/​en/​software|Arduino IDE ]].
 +</​note>​
 +<​note>​
 +Biblioteci folosite în implementare:​
 +  * <​Keypad.h>​ (pentru Keypad)
 +  * <​MFRC522.h>​ (pentru cititorul RFID)
 +  * <​LiquidCrystal_I2C.h>​ (pentru LCD-ul cu I2C integrat)
 +  * <​Servo.h>​ (pentru Servo)
 +
 +</​note>​
 +==Detalii de implementare:​==
 +<note tip>
 +Principalele variabile utilizate:
 +  * **lcd** - afișarea mesajelor pe LCD
 +  * **kp** - citirea input-ului care vine de la tastatură
 +  * **rfid** - citirea input-ului de la cititorul RFID
 +  * **servo** - pentru modificarea stării servo-ului
 +  * **tag_uids** - lista de UIDs ale tag-urilor înregistrate în sistem
 +  * **correct_pass** - parola corectă formată din 4 cifre care se reține în program, deci se poate modifica din software
 +  * **password** - aici se reține parola introdusă de utilizator la keypad la momentul respectiv de timp
 +  * **state** - starea în care se află programul, mai multe detalii mai jos
 +</​note>​
 +
 +==Introducerea parolei==
 +* La introducerea parolei LCD-ul afișează pe primul rând mesajul 'Enter password'​ iar pe al doilea rând va afișa caracterele tastate. Se folosește funcția **readPassword()**. În program există o variabilă numită **count** care reține indexul caracterului la care s-a ajuns cu citirea parolei, și este incrementat la fiecare caracter nou tastat la keypad. Dacă se apasă tasta '​*',​ se va șterge ultimul caracter tastat din memorie, dar și de pe LCD. Acest lucru se realizează cu ajutorul funcției **deleteLastKey()** care decrementează count-ul și șterge de pe ecran ultima tastă. Parola este gata de validare doar atunci când user-ul a tastat 4 caractere și a apăsat '#',​ care joacă rol de enter. Abia apoi se va verifica egalitatea dintre **password** și **correct_pass**. \\
 +
 +==Înregistrarea unui nou tag RFID==
 +* Dacă se scanează un tag al cărei UID nu se găsește printre **tag_uids**,​ utilizatorul este întrebat dacă dorește să înregistreze acest nou tag. Dacă apasă tasta 1 și introduce parola corectă, numărul de tag-uri disponibile va fi incrementat și noul UID se adaugă în lista **tag_uids**.\\
 +
 +==State==
 +Programul are 3 stări posibile: \\
 +1) Starea 1 este starea în care așteaptă scanarea unui tag RFID. Dacă tag-ul este unul deja înregistrat,​ trece mai departe la starea 2, dacă nu, utilizatorul va fi întrebat daca dorește să înregistreze acest tag nou(are nevoie de parolă). Pentru a alege această variantă, trebuie apăsată tasta 1, iar pentru refuz, orice altă tastă. Dacă se apasă tasta 1, programul intră în starea 3, cea în care așteaptă parola corectă pentru validarea noului tag. Dacă nu se apasă tasta 1, progamul revine în starea inițială 1, așteptând din nou un tag. \\
 +2) Starea 2 înseamnă că s-a scanat deja un tag înregistrat și acum se așteaptă introducerea parolei corecte, pentru a deschide lacătul. După introducerea parolei, fie se deschide lacătul și LED-ul verde se aprinde în cazul parolei corecte, fie LED-ul roșu se aprinde și se activează sunetul buzzer-ului în cazul parolei greșite. Ulterior se revine în starea 1, se așteaptă deci deblocarea lacătului în continuare. \\
 +3) Starea 3 este cea în care se dorește înregistrarea unui tag nou. Similar ca mai sus, se așteaptă o parolă. Dacă este corectă, tag-ul se înregistrează cu succes și utilizatorul este anunțat prin aprinderea LED-ului verde și print-un mesaj pe LCD, dacă nu, LED-ul roșu se aprinde și sunetul buzzer-ului se activează. \\
 +
 +===Alte funcții folosite===
 +* **//​searchTagUID()//​** - funcție care caută prin lista de UID permise tag-ul curent citit de la modulul RFID, returnează 1 dacă găsește o egalitate, 0 dacă nu\\
 +* **//​allowTag()//​** - funcție care anunță utilizatorul că tag-ul scanat este unul permis, activează LED-ul verde\\
 +* **//​denyTag()//​** - funcție care anunță utilizatorul că tag-ul scanat nu este unul permis, activează LED-ul roșu și buzzer-ul; întreabă utilizatorul dacă dorește înregistrarea noului tag și trece programul în state = 3 \\
 +* **//​permitAccess()//​** - funcție care rotește servo-ul cu 90 de grade(deschiderea lacătului) și activează LED-ul verde \\
 +* **//​denyAccess()//​** - funcție care anunță utilizatorul că nu a primit acces, activează LED-ul roșu și buzzer-ul \\
 +* **//​registerNewTag()//​** - funcție care anunță utilizatorul că noul tag s-a adăugat cu succes, adaugă UID-ul noului tag la lista UID-urilor permise și activează LED-ul verde \\
 +* **//​denyRegisteringNewTag()//​** - funcție care anunță utilizatorul că nu parola este eronată deci nu poate înregistra noul tag, activează LED-ul roșu și buzzer-ul \\
 +* **//​setup()//​** - inițializarea variabilelor,​ state = 1\\
 +* **//​loop()//​** - funcție care ciclează prin cele 3 stări posibile\\
 +
 +\\
  
 ===== Rezultate obținute ===== ===== Rezultate obținute =====
Line 49: Line 102:
 ===== Concluzii ===== ===== Concluzii =====
  
-Deși la început am privit această materie cu foarte mult scepticism, întrucât nu am fost niciodată o fană a materiilor înclinate către partea de hardware, pot spune că proiectul acesta mi s-a părut foarte foarte interesant și sunt mândră de ce am reușit să fac. \\+Deși la început am privit această materie cu scepticism, întrucât nu am fost niciodată o fană a materiilor înclinate către partea de hardware, pot spune că proiectul acesta mi s-a părut foarte foarte interesant și sunt mândră de ce am reușit să fac, chiar am învățat foarte multe lucruri despre Arduino și cât de multe lucruri poți crea cu puțină imaginație. \\ 
 +Consider că a fost o adevărată provocare acest proiect și pe departe cea mai interesantă temă din acest semestru :D Mă bucur că am avut ocazia să facem ceva practic, deși semestrul a fost online. Cel mai mult mi-a plăcut să asamblez partea hardware, a fost ca un lego care avea șansa să se ardă în orice moment, iar printre cele mai mari provocări a fost lipirea pinilor cititorului RFID. \\ 
 +Concluzia pe care o trag este că proiectul chiar e practic și ar putea fi folosit ca încuietoare electrică dacă aș prinde servo-ul de un cârlig care ar debloca o ușă la mișcarea de 90 de grade a servo-ului.
  
  
pm/prj2021/amocanu/door_lock_rfid_password.1622648438.txt.gz · Last modified: 2021/06/02 18:40 by ana_maria.milcu
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