- Componente necesare
- Descrierea proiectului:
- Modul FingerPrint:
- Funcționarea sistemului de prezență pe bază de amprentă digitală
- Diagrama circuitului și descrierea pentru proiectul sistemului de asistență la amprentă digitală
- Explicatie cod:
Sistemele de prezență sunt sisteme utilizate în mod obișnuit pentru a marca prezența în birouri și școli. De la marcarea manuală a prezenței în registrele de prezență la utilizarea aplicațiilor de înaltă tehnologie și a sistemelor biometrice, aceste sisteme s-au îmbunătățit semnificativ. În proiectele noastre anterioare, am acoperit câteva alte proiecte de sistem electronic de prezență folosind microcontroler RFID și AVR, 8051 și raspberry Pi. În acest proiect, am folosit modulul de amprentă și Arduino pentru a prelua și păstra datele și înregistrările privind prezența. Prin utilizarea senzorului de amprentă, sistemul va deveni mai sigur pentru utilizatori. Următoarele secțiuni explică detaliile tehnice ale realizării unui sistem de prezență biometric bazat pe amprente digitale folosind Arduino.
Componente necesare
- Arduino -1
- Modul de amprentă digitală -1
- Buton de apăsare - 4
- LED-uri -1
- Rezistor 1K -2
- 2.2K rezistor -1
- Putere
- Conectarea firelor
- Cutie
- Buzzer -1
- 16x2 LCD -1
- Pâine -1
- Modulul RTC -1
Descrierea proiectului:
În acest circuit al sistemului de prezență a amprentelor digitale, am folosit modulul senzor de amprentă digitalăsă autentifice o persoană sau un angajat adevărat luând degetul în sistem. Aici folosim 4 butoane pentru a ne înregistra, Șterge, Sus / Jos. Tasta ENROLL și DEL are funcții triple. Tasta ENROLL este utilizată pentru înscrierea unei persoane noi în sistem. Deci, atunci când utilizatorul dorește să înregistreze un deget nou, atunci el / ea trebuie să apese tasta ENROLL, apoi LCD-ul cere ID-ul, unde utilizatorul dorește să stocheze imaginea de amprentă. Acum, dacă în acest moment utilizatorul nu dorește să continue mai departe, el / ea poate apăsa din nou tasta ENROLL pentru a reveni. De data aceasta tasta ENROLL se comportă ca tasta Back, adică tasta ENROLL are atât funcția de înscriere, cât și funcția Back. În plus, cheia de înscriere este utilizată și pentru descărcarea datelor de prezență pe monitorul serial. În mod similar, tasta DEL / OK are, de asemenea, aceeași funcție dublă ca atunci când utilizatorul înregistrează un deget nou,atunci el / ea trebuie să selecteze ID-ul degetului utilizând alte două taste și anume SUS și JOS. Acum utilizatorul trebuie să apese tasta DEL / OK (de această dată această tastă se comportă ca OK) pentru a continua cu ID-ul selectat. Și tasta Del este utilizată pentru resetarea sau ștergerea datelor din EEPROM din Arduino.
Modul FingerPrint:
Modulul senzorului de amprentă captează imaginea de amprentă și apoi o convertește în șablonul echivalent și le salvează în memoria sa conform ID-ului selectat de Arduino. Tot procesul este comandat de Arduino, cum ar fi luarea unei imagini a amprentei digitale, transformarea ei în șabloane și stocarea ca ID etc. Puteți verifica câteva proiecte folosind modulul de amprentă digitală:
Sistem de securitate bazat pe amprentă digitală
Aparat de vot biometric bazat pe amprentă digitală
Aici am adăugat un LED galben care indică faptul că modulul de amprentă este gata să facă o imagine a degetului. Un buzzer este, de asemenea, utilizat pentru diverse indicații. Arduino este componenta principală a acestui sistem, este responsabil pentru controlul întregului sistem.
Funcționarea sistemului de prezență pe bază de amprentă digitală
Funcționarea acestui proiect de sistem de prezență a amprentelor digitaleeste destul de simplu. În primul rând, utilizatorul trebuie să înregistreze amprentele utilizatorului cu ajutorul butoanelor. Pentru a face acest lucru, utilizatorul trebuie să apese tasta ENROLL și apoi LCD-ul solicită introducerea ID-ului pentru amprenta pentru al salva în memorie după numele ID-ului. Deci, acum utilizatorul trebuie să introducă ID-ul folosind tastele SUS / JOS. După selectarea ID-ului, utilizatorul trebuie să apese tasta OK (tasta DEL). Acum, LCD-ul vă va cere să plasați degetul peste modulul de amprentă. Acum utilizatorul trebuie să plaseze degetul peste modulul de amprentă și apoi modulul preia imaginea degetului. Acum, ecranul LCD va spune să scoateți degetul din modulul de amprentă și să cereți din nou să plasați degetul din nou. Acum utilizatorul trebuie să pună degetul din nou și modulul preia o imagine și o convertește în șabloane și o stochează prin ID-ul selectat în memoria modulului de amprentă digitală.Acum utilizatorul va fi înregistrat și el / ea poate alimenta prezența punând degetul peste modulul de amprentă digitală. Prin aceeași metodă, toți utilizatorii vor fi înregistrați în sistem.
Acum, dacă utilizatorul dorește să elimine sau să șteargă oricare dintre ID-urile sau amprentele stocate, atunci trebuie să apese tasta DEL. Odată apăsată tasta de ștergere, LCD-ul vă va cere să selectați ID-ul care trebuie șters. Acum utilizatorul trebuie să selecteze ID și să apese tasta OK (aceeași tastă DEL). Acum, LCD-ul vă va informa că amprenta a fost ștearsă cu succes.
Cum funcționează prezența în acest proiect al sistemului de asistență la amprentă digitală:
Ori de câte ori utilizatorul plasează degetul peste modulul de amprentă, modulul de amprentă captează imaginea degetelor și caută dacă există vreun ID asociat cu această amprentă în sistem. Dacă este detectat ID-ul amprentei, LCD va afișa prezența înregistrată și, în același timp, buzzerul va emite o singură dată și LED-ul se va stinge până când sistemul este gata să accepte din nou intrarea.
Împreună cu modulul de amprentă am folosit și un modul RTC pentru ora și data. Ora și data rulează continuu în sistem. Așadar, Arduino ia ora și data ori de câte ori un utilizator adevărat plasează degetul peste amprentă și le salvează în EEPROM în spațiul de memorie alocat.
Aici am creat 5 spații de utilizator în acest sistem timp de 30 de zile. Apăsând butonul RESET din Arduino și apoi imediat cheia de înregistrare va fi responsabil pentru descărcarea datelor de prezență pe monitorul serial din memoria Arduino EEPROM.
Gestionarea memoriei:
Avem 1023 octeți de memorie în Arduino UNO din care avem 1018 octeți pentru stocarea datelor și am luat 5 date de prezență a utilizatorilor timp de 30 de zile. Și fiecare participare va înregistra ora și data, astfel încât acestea să devină date de 7 octeți.
Deci, memoria totală necesară este
5 * 30 * 7 = 1050, deci aici avem nevoie de 32 de octeți
Dar dacă vom folosi 4 utilizatori, atunci ne vom cere
4 * 30 * 7 = 840
Aici am făcut această demonstrație a proiectului luând 5 utilizatori de memorie. Prin aceasta, nu vom putea stoca 32 de octeți sau 5 înregistrări de prezență ale celui de-al cincilea utilizator.
Puteți încerca acest lucru cu 4 utilizatori schimbând câteva linii în cod. Am făcut comentariile din cod unde sunt necesare modificările.
Diagrama circuitului și descrierea pentru proiectul sistemului de asistență la amprentă digitală
Circuitul acestui proiect bazat pe amprente digitale, așa cum se arată în diagrama de mai sus, este destul de simplu. Are Arduino pentru controlul întregului proces al proiectului, buton pentru înregistrare, ștergere, selectarea ID-urilor și pentru participare, un buzzer pentru avertizare, LED-uri pentru indicare și LCD pentru instruirea utilizatorului și afișarea mesajelor rezultate.
Așa cum se arată în schema circuitului, un buton este conectat direct la pinul A0 (ENROLL), A1 (DEL), A2 (UP), A3 (DOWN) al Arduino în raport cu solul și LED-ul galben este conectat la pinul digital D7 de Arduino cu privire la sol printr-un rezistor de 1k. Rx și Tx ale modulului de amprentă digitală conectate direct la pinul Serial D2 și D3 (Software Serial) al Arduino. Alimentarea cu 5V este utilizată pentru alimentarea modulului de amprentă digitală preluat de pe placa Arduino. Un buzzer este, de asemenea, conectat la pinul A5. Un ecran LCD de 16x2 este configurat în modul 4 biți, iar RS, EN, D4, D5, D6 și D7 sunt conectate direct la pinul digital D13, D12, D11, D10, D9 și D8 al Arduino.
Explicatie cod:
Codul de sistem de prezență de amprente pentru Arduino este dată în secțiunile ulterioare. Deși codul este explicat bine cu comentarii, discutăm aici câteva părți importante ale codului. Am folosit biblioteca de amprente pentru interfațarea modulului de amprentă digitală cu placa Arduino.
În primul rând, includem fișierul antet și definim pinul de intrare și de ieșire și definim macro-ul și variabilele declarate. După aceasta, în funcția de configurare, oferim direcția pinului definit și inițiază modulul LCD și amprenta digitală
După aceasta, trebuie să scriem cod pentru descărcarea datelor de prezență.
setare nulă () {întârziere (1000); lcd.inceput (16,2); Serial.begin (9600); pinMode (inscriere, INPUT_PULLUP); pinMode (sus, INPUT_PULLUP); pinMode (jos, INPUT_PULLUP); pinMode (del, INPUT_PULLUP); pinMode (potrivire, INPUT_PULLUP); pinMode (buzzer, OUTPUT); pinMode (indFinger, OUTPUT); digitalWrite (buzzer, LOW); if (digitalRead (enroll) == 0) {digitalWrite (buzzer, HIGH); întârziere (500); digitalWrite (buzzer, LOW); lcd.clear (); lcd.print („Vă rugăm să așteptați”); lcd.setCursor (0,1); lcd.print ("Date Downloding");
După aceasta, trebuie să scriem cod pentru ștergerea datelor de prezență din EEPROM.
if (digitalRead (del) == 0) {lcd.clear (); lcd.print („Vă rugăm să așteptați”); lcd.setCursor (0,1); lcd.print („Resetare…..”); pentru (int i = 1000; i <1005; i ++) EEPROM.write (i, 0); pentru (int i = 0; i <841; i ++) EEPROM.write (i, 0xff); lcd.clear (); lcd.print ("Resetare sistem"); întârziere (1000); }
După aceasta, lansăm modulul de amprentă digitală, afișând mesajul de bun venit pe ecranul LCD și modulul RTC inițiat
După aceasta, în funcție de buclă, am citit ora RTC și l-am afișat pe LCD
bucla void () {acum = rtc.now (); lcd.setCursor (0,0); lcd.print ("Timp->"); lcd.print (now.hour (), DEC); lcd.print (':'); lcd.print (now.minute (), DEC); lcd.print (':'); lcd.print (now.second (), DEC); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Data->"); lcd.print (now.day (), DEC); lcd.print ('/'); lcd.print (now.month (), DEC); lcd.print ('/'); lcd.print (now.year (), DEC);
După aceasta, așteptați ca amprenta să ia intrare și să compare ID-ul imaginii capturate cu ID-urile stocate. Dacă apare amatch, continuați cu pasul următor. Și verificând și cheile de înregistrare
int result = getFingerprintIDez (); if (rezultat> 0) {digitalWrite (indFinger, LOW); digitalWrite (buzzer, HIGH); întârziere (100); digitalWrite (buzzer, LOW); lcd.clear (); lcd.print ("ID:"); lcd.print (rezultat); lcd.setCursor (0,1); lcd.print („Vă rugăm să așteptați….”); întârziere (1000); participare (rezultat); lcd.clear (); lcd.print („Prezență”); lcd.setCursor (0,1); lcd.print („Înregistrat”); întârziere (1000); digitalWrite (indFinger, HIGH); întoarcere; }
Având în vedere nule checkKeys () funcție este utilizată pentru verificarea înroleze sau DEL este apăsată tasta sau nu și ce să facă dacă este apăsat. Dacă se apasă tasta ENROLL, se apelează funcția Enroll () și se apasă tasta DEL, apoi se apelează funcția Delete () .
funcția void delet () este utilizată pentru introducerea ID-ului care trebuie șters și apelarea funcției uint8_t deleteFingerprint (uint8_t id) care va șterge degetul din înregistrări.
Funcția dată este folosită pentru a lua imagini cu amprentă și a le converti în șablon și pentru a salva, de asemenea, prin ID-ul selectat în memoria modulului de amprentă.
uint8_t getFingerprintEnroll () {int p = -1; lcd.clear (); lcd.print ("ID-ul degetului:"); lcd.print (id); lcd.setCursor (0,1); lcd.print („Plasați degetul”); întârziere (2000); while (p! = FINGERPRINT_OK) {p = finger.getImage ();…………………
Funcția dată este utilizată pentru stocarea timpului și datei de prezență în slotul alocat EEPROM
prezență nulă (int id) {int utilizator = 0, eepLoc = 0; if (id == 1) {eepLoc = 0; utilizator = utilizator1 ++; } else if (id == 2) {eepLoc = 210; utilizator = utilizator2 ++; } else if (id == 3)………….
Funcția dată este folosită pentru preluarea datelor din EEPROM și trimiterea către monitorul serial
descărcare nulă (int eepIndex) {if (EEPROM.read (eepIndex)! = 0xff) {Serial.print ("T->"); if (EEPROM.read (eepIndex) <10) Serial.print ('0'); Serial.print (EEPROM.read (eepIndex ++)); Serial.print (':'); if (EEPROM.read (eepIndex) <10) Serial.print ('0'); Serial.print (EEPROM.read (eepIndex ++));………….