Mecanism de verificare a parolelor
Autor
Introducere
In momentul in care utilizatorul va introduce un sir de caractere folosind un keypad, se va verifica daca textul introdus corespunde cu parola memorata de catre seif. In caz afirmativ, LED-ul verde al seifului se va aprinde, va fi afisat un mesaj corespunzator pe ecranul LCD, buzzer-ul va genera o melodie si se va putea deschide usita seifului actionand manerul acesteia. In caz contrar se va aprinde LED-ul rosu al seifului, va fi afisat un mesaj de eroare pe ecranul LCD, buzzer-ul va genera un ton simplist de eroare si incuietoarea seifului va ramane inchisa.
Descriere generală
Schema bloc
Proiectul este format din doua parti conectate:
Arduino Uno la care vom conecta breadboard-ul pe care vom atasa LED-urile (rosu si verde), buzzer-ul, LCD-ul, keypad-ul si modulul RTC.
Incuietoarea alimentata de modulul releu impreuna cu cele 4 baterii de 3.7V Li-Ion in suportul corespunzator.
Arduino:
Nucleu al seifului.
Componenta ce mediaza fluxul de date dintre Keypad, modul RTC, LCD 16×2, solenoid.
Are rolul de a compara parola primita prin intermediul Keypad-ului (de la utilizator) si parola generata pe baza datelor emise de modului RTC.
Actioneaza LED-urile si buzzer-ul in functie de corectitudinea sirului de caractere primit de la utilizator.
Keypad:
Modul RTC DS3231:
Modul LCD 16×2 I2C:
Solenoid:
Incuietoarea seifului.
Aceasta se deschide in momentul in care este introdusa parola corecta si se inchide in momentul in care este apasata tasta 'C' a keypad-ului.
Daca parola introdusa de utilizator este gresita, aceasta nu este actionata in niciun fel.
Releu:
Baterii:
LED-uri:
Buzzer:
Hardware Design
Lista de piese
Nume | Numar piese |
Arduino Uno R3 | 1 |
Keypad | 1 |
Modul RTC | 1 |
Buzzer | 1 |
Breadbord | 1 |
Ecran LCD | 1 |
Solenoid | 1 |
Modul Releu | 1 |
Suport 4 baterii | 1 |
Baterie 3.7V Li-Ion | 4 |
LED | 2 |
Rezistor | 2 |
Fire tata-tata | |
Fire mama-tata | |
Fire mama-mama | |
Schema electrica
Conectarea Keypad-ului
Conectarea Keypad-ului a presupus conectarea celor 8 pini ai Keypad-ului la pinii de la 2 la 9 de pe Arduino. Cei 8 pini ai Keypad-ului provin de la faptul ca fiind o matrice tastatura, aceasta are 4 linii si 4 coloane, fiecare linie avand conectate 4 diode si fiecare coloana avand conectate 4 butoane.
Conectarea LCD 16x2 I2C
Acest tip simplist de LCD, destul de micut, se conecteaza la Arduino folosind interfata seriala I2C. Mai exact, acesta vine cu 4 pini: VCC, GND, SDA si SCL. Toti cei 4 pini vor fi conectati la pinii corespunzatori de pe Arduino. LCD-ul a venit si cu modului I2C inclus, astfel ca nu a fost nevoie de a face legaturile dintre pinii de pe LCD manual.
Inainte de a incepe programul, utilizatorul LCD-ului este nevoit sa afle adresa LCD-ului pentru a se putea comunica cu acesta. Dupa ce am aflat adresa acestuia, o vom seta folosind functia “LiquidCrystal_I2C lcd(address, 16, 2)”.
Conectarea LED-urilor & Buzzer
Pentru conectarea LED-urilor s-au folosit 2 rezistente de PULLUP si pinii 11 si 12 de pe Arduino.
Pentru conectarea buzzer-ului a fost folosit pinul 10.
Conectarea modulului RTC DS3231
Pentru conectarea modului RTC, modelul DS3231, am avut in primul rand nevoie de o baterie CR2032. Acesta va comunica cu Arduino prin interfata seriala I2C si asemenator cu modulul LCD, a fost nevoie de conectarea celor 4 pini de care dispune (VCC, GND, SDA si SCL) la pinii corespunzatori de pe Arduino.
Pentru a asigura conexiunea cu acesta, am folosit biblioteca “RTClib.h” impreuna cu apelul functiei “now()” ce returneaza o variabila de tipul “DateTime” de unde putem extrage ora, minutul, numarul de secunde, data curenta.
Conectarea modulului releu
Releul este prevazut cu doua tipuri de pini:
Pini de joasa tensiune
Pini de inalta tensiune
NC: normally closed pin
COM: common pin
NO: normally open pin
Pentru conectarea releului la Arduino va trebui sa se realizeze conectarea pinilor de tensiune joasa (VCC, GND si IN) la pinii corespunzatori de pe Arduino. Pin-ul IN va fi conectat la pinul analogic A3 care va fi de OUTPUT.
Pinii de tensiune inalta vor fi conectati astfel:
Pin-ul COMM va fi conectat la borna pozitiva a solenoidului folosindu-se un fir intermediar tata-tata.
Pin-ul NO va fi conectat la borna pozitiva a celor 4 baterii de 3.7V Li-Ion.
Pin-ul NC va ramane neconectat deoarece dorim doar deschiderea solenoidului in mod normal, acest pin fiind de inchidere.
Conectarea incuietorii (solenoid)
Pentru actionarea solenoidului am folosit un releu care alimentat de cele 4 baterii va genera un camp electromagnetic care va deschide/inchide incuietoarea. Cele doua borne ale solenoidului sunt conectate astfel:
Rezultatul initial
Rezultatul initial este format doar din conectarea tuturor componentelor si functionarea corecta a programului incarcat pe Arduino, dar fara niciun fel de package.
Software Design
Implementare
Biblioteci folosite
Keypad.h: Folosita pentru conectarea Keypad-ului
Wire.h: Folosita pentru a se putea comunica prin interfata seriala I2C cu anumite componente
-
RTClib.h: Folosita pentru a se putea realiza comunicarea cu modulul RTC DS3231.
Program
Ideea implementarii programului este urmatoarea:
Functia “setup()”:
Se realizeaza initializarea modulului RTC folosind functia “RTC_module_handler()” care va verifica daca exista conectat acest modul si il va initializa cu un anumit format de data (la alegerea fiecarui utilizator).
Se va seta frecventa interfetei “Serial” de pe Arduino folosita pentru afisarea parolei dinamice a seifului.
Se vor seta pinii corespunzatori LED-urilor, buzzer-ului si solenoidului de tip pini de OUTPUT.
Se va extrage momentul actual al zilei folosindu-se modulul RTC si se va obtine o parola folosindu-se o functie de hash aplicata asupra momentului din zi curent, lucru realizat cu ajutorul functiei “set_password(moment, pass_code)”.
Functia “loop()”:
Vor fi afisate pe ecranul LCD regulile seifului in legatura cu lungimea parolei si tasta care trebuie apasata pentru a se efectua verificarea parolei (tasta'D') prin intermediul functiei “lcd_setup()”.
Se va face verificarea parolei propriu-zis:
In final, se verifica daca parola introdusa este corecta prin verificarea variabilei de tip boolean:
Functii aditionale:
Rezultate Obţinute
Design-ul exterior
Rezultatul final
Functionare
Concluzii
Proiectul este realizat in intregime si funcional.
Initial s-a dorit a fi un mecanism simplit de verificare a parolelor, dar ulterior au fost adaugate solenoidul, releul si cele 4 baterii 3.7V Li-Ion.
A fost foarte interesant tot procesul de realizare a sa (din punct de vedere hardware, conectarea componentelor si research-ul facut despre toate acestea), chiar daca in final de la prea multe teste aplicatie asupra sa am reusit aproape sa stric cablul de alimentare dintre Arduino si laptop (inca este functional, dar cu greu).
Procesul de confectionare al cutiei a fost costisitor din punct de vedere al timpului insa cred ca a meritat.
Download
Sursele pot fi gasite aici.
Jurnal
23/04: alegere tema proiect.
25/04: creare pagina Wiki, descriere, diagrama bloc, lista componente hardware (sumar).
02/05: achizitionarea primelor componente (ecran LCD, Keypad, modul RTC, fire, baterie pentru modulul RTC).
08/05: inceperea lucrului la proiect
12/05: achizitionarea solenoidului, releului, suportului pentru cele 4 baterii impreuna cu acestea.
14/05: adaugarea noilor componente la proiectul initial.
26/05: realizarea cutiei in care vor fi incorporate toate componentele proiectului.
22/05: revizuirea codului, filmarea videoclipului demo.
23/05: realizarea paginii de wiki finale pentru proiect.
Bibliografie/Resurse