- Materiale necesare
- Modulul senzor de amprentă digitală (FPS) GT511C3
- Conectarea senzorului de amprentă GT511C3 cu Arduino
- Arduino cu GT511C3
- Programare Arduino pentru senzor de amprentă digitală GT511C3
- Funcționarea senzorului de amprentă digitală GT511C3 cu Arduino
Biometria a fost folosită ca sistem de autentificare de încredere de mult timp. Astăzi există sisteme biometrice complexe care pot identifica o persoană după ritmul bătăilor inimii sau chiar după ADN-ul său. Alte metode fezabile includ recunoașterea vocii, recunoașterea feței, scanarea Iris și scanarea amprentei digitale. Dintre care recunoașterea amprentelor digitale este cea mai utilizată metodă, o putem găsi de la un sistem simplu de prezență la telefoane inteligente, până la verificări de securitate și multe altele.
În acest tutorial vom învăța cum să folosim popularul senzor de amprentă digitală GT511C3 (FPS) cu Arduino. Există multe FPS disponibile și am învățat deja cum să le folosească pentru a construi modele, cum ar fi sistemul de prezență, vot mașină, sistem de securitate, etc. Dar GT511C3 este mai avansat, cu mare precizie și un timp de răspuns mai rapid, astfel încât vom învăța cum să - l folosească cu Arduino pentru a înregistra amprente pe el și apoi pentru a detecta amprentele ori de câte ori este necesar. Deci sa începem.
Materiale necesare
- Arduino Nano / UNO
- Senzor de amprentă digitală GT511C3
- Ecran LCD 16x2
- Pot - rezistențe 10k și 1k, 10k, 22k
- Apasa butonul
- Conectarea firelor
- Placă de pâine
Modulul senzor de amprentă digitală (FPS) GT511C3
Înainte de a ne arunca cu capul în proiect, permiteți-ne să înțelegem despre modulul senzorului de amprentă GT511C3 și cum funcționează. Acest senzor este foarte diferit de senzorul de amprentă capacitivă și ultrasonic care sunt frecvent utilizați în telefoanele noastre inteligente. GT511C3 este un senzor optic de amprente, ceea ce înseamnă că se bazează pe imagini de amprenta pentru a recunoaște modelul său. Da, ați citit bine, senzorul are de fapt o cameră înăuntru care face fotografii cu amprenta dvs. și apoi procesează aceste imagini folosind un puternic IC ARM Cortex M3 încorporat. Imaginea de mai jos prezintă partea din față și din spate a senzorului cu pinouts.
După cum puteți vedea, senzorul are o cameră (punct negru) înconjurat de LED-uri albastre, aceste LED-uri trebuie aprinse pentru a face o imagine clară a amprentei. Aceste imagini sunt apoi procesate și convertite în valoare binară utilizând microcontrolerul ARM cuplat cu EEPROM. Modulul are, de asemenea, un LED SMD de culoare verde pentru a indica puterea. Fiecare imagine de amprentă are 202x258 pixeli cu o rezoluție de 450 dpi. Senzorul poate înscrie pana la 200 de amprente și pentru fiecare deget de imprimare șablon atribuie un formular ID 0-199. Apoi, în timpul detectării, poate compara automat amprenta digitală scanată cu toate cele 200 de șabloane și, dacă se găsește o potrivire, dă numărul de identificare al acelei amprente digitale folosind Smack Finger 3.0Algoritm pe microcontrolerul ARM. Senzorul poate funcționa de la 3,3 V la 6 V și comunică prin comunicare serială la 9600. Pinii de comunicație (Rx și Tx) se spune că sunt doar 3,3 V toleranți, totuși foaia tehnică nu specifică prea multe despre aceasta. Pin-out-ul unui GT511C3 FPS este prezentat mai jos.
În afară de comunicarea în serie, modulul poate fi, de asemenea, interfațat direct la computer prin conexiune USB utilizând pinii arătați în imaginea anterioară. Odată conectat la computer, modulul poate fi controlat folosind aplicația SDK_DEMO.exe care poate fi descărcată de pe link. Această aplicație permite utilizatorului să înregistreze / verifice / șterge amprentele digitale și, de asemenea, să recunoască amprentele digitale. Software-ul vă poate ajuta, de asemenea, să citiți imaginea capturată de senzor, care merită să încercați. Alternativ, puteți utiliza acest software chiar dacă senzorul este conectat la Arduino, vom discuta despre acest lucru mai târziu în acest articol.
O altă caracteristică interesantă a senzorului este carcasa metalică din jurul regiunii de detectare. După cum am spus mai devreme, LED-ul albastru trebuie aprins pentru ca senzorul să funcționeze. Dar în aplicațiile în care senzorul ar trebui să aștepte activ o amprentă digitală, nu este posibil să mențineți LED-ul aprins întotdeauna, deoarece acesta va încălzi senzorul și îl va deteriora. Prin urmare, în aceste cazuri, carcasa metalică poate fi conectată la un pin capacitiv de intrare tactil al unui MCU pentru a detecta dacă este atins. Dacă da, LED-ul poate fi aprins și procesul de detectare poate fi pornit. Această metodă nu este demonstrată aici, deoarece se află în afara scopului acestui articol.
Când funcționează la 3,3V, senzorul consumă aproximativ 130mA. Este nevoie de aproape 3 secunde pentru a înregistra un deget și 1 secundă pentru a-l identifica. Cu toate acestea, dacă numărul de șabloane înscrise este mai mic, viteza de recunoaștere va fi mare. Pentru mai multe detalii despre senzor, puteți consulta această fișă tehnică de la ADH-Tech, care este producătorul oficial al modulului.
Conectarea senzorului de amprentă GT511C3 cu Arduino
GT511C3 FPS are doi pini de alimentare care pot fi alimentați cu + 5V pin Arduino și doi pini de comunicație Rx și Tx care pot fi conectați la orice pin digital al Arduino pentru comunicații seriale. În plus, am adăugat și un buton și un LCD pentru a afișa starea senzorului. Schema completă a circuitului pentru interfața GT511C3 FPS cu Arduino poate fi găsită mai jos.
Deoarece pinii Rx și Tx sunt toleranți la 3,3V, am folosit un divizor de potențial pe partea Rx pentru a converti 5V la 3,3V. Rezistorul de 10k și rezistorul de 22k convertește semnalul de 5V de la pinul Arduino Tx la 3,3V înainte de a ajunge la pinul Rx al FPS. Senzorul poate fi alimentat și de 3,3 V, dar asigurați-vă că Arduino poate furniza suficient curent pentru senzor. Am conectat LCD-ul în modul 4 biți alimentat de pinul 5V al Arduino. Un buton este conectat la pinul D2 care, atunci când este apăsat, va pune programul în modul de înregistrare, unde utilizatorul poate înregistra degetul nou. După înscriere, programul va rămâne în modul de scanare pentru a căuta orice deget care atinge senzorul.
Arduino cu GT511C3
După cum sa menționat mai devreme, GT511C3 FPS comunică prin comunicații seriale, senzorul înțelege codul hex și pentru fiecare cod hex este efectuată o anumită operație. Puteți verifica foaia de date pentru a cunoaște toate valorile hex și funcția corespunzătoare, dacă sunteți interesat. Dar, norocos pentru noi, bboyho a creat deja o bibliotecă care poate fi utilizată direct cu Arduino pentru a înregistra și a detecta amprentele digitale. Biblioteca Github pentru GT511C3 FPS poate fi descărcată de pe linkul de mai jos
Biblioteca Arduino GT511C3
Link-ul va descărca un fișier ZIP, apoi va trebui să- l adăugați la ID-ul dvs. Arduino urmând comanda Sketch -> Include Library -> Add.ZIP Library. După ce ați adăugat biblioteca, reporniți IDE-ul și ar trebui să puteți găsi programele de exemplu pentru GT511C3 FSP în Fișier -> Exemplu -> Fingerprint Scanner TTL așa cum se arată mai jos
Ar trebui să vedeți patru exemple de programe, programul de clipire va clipi ledul albastru de pe FPS, programul de înscriere și deget ID poate fi folosit pentru a înscrie și identifica degetele în consecință. Rețineți că un deget odată înscris va fi întotdeauna amintit de modul, chiar dacă este oprit.
Programul Serial Pass-through poate fi încărcat pe Arduino pentru a utiliza aplicația Demo_SDK.exe despre care am discutat mai devreme în acest articol. Pentru a șterge orice șablon de amprentă digitală sau pentru a salva o copie pe computer, această aplicație SDK poate fi utilizată.
Programare Arduino pentru senzor de amprentă digitală GT511C3
Scopul nostru aici este să scriem un program care va înregistra un deget atunci când este apăsat un buton și afișează numărul de identificare al degetului care este deja înscris. De asemenea, ar trebui să putem afișa toate informațiile pe ecranul LCD pentru a permite proiectului să fie unul autonom. Codul complet pentru a face același lucru este da în partea de jos a acestei pagini. Aici îl împărțesc în fragmente mici pentru a vă ajuta să înțelegeți mai bine.
Ca întotdeauna, începem programul prin includerea bibliotecilor necesare, aici vom avea nevoie de biblioteca FPS_GT511C3 pentru modulul nostru FPS, software serial pentru a utiliza D4 și D5 în comunicații seriale și cristal lichid pentru interfața LCD. Apoi, trebuie să menționăm la ce pini este conectat FPS și LCD. Dacă ați urmat schema circuitului ca atare, atunci este 4 și 5 pentru FPS și D6 până la D11 pentru LCD. Codul pentru același lucru este prezentat mai jos
#include "FPS_GT511C3.h" // Obțineți biblioteca de la https://github.com/sparkfun/Fingerprint_Scanner-TTL #includeți "SoftwareSerial.h" // Biblioteca serială a software-ului #include
În funcția de configurare , afișăm un mesaj introductiv pe ecranul LCD și apoi inițializăm modulul FPS. Comanda fps.SetLED (adevărat) va aprinde LED-ul albastru al senzorului, îl puteți opri cu fps.SetLED (fals) când nu este necesar, deoarece ar încălzi senzorul dacă este lăsat aprins continuu. De asemenea, am făcut pinul D2 ca pin de intrare și l-am conectat la rezistorul de tragere intern, astfel încât să conectăm un buton la pin.
void setup () { Serial.begin (9600); lcd.inceput (16, 2); // Inițializați 16 * 2 LCD lprint.print („GT511C3 FPS”); // Intro Mesaj linia 1 lcd.setCursor (0, 1); lcd.print („cu Arduino”); // Intro mesaj linie 2 întârziere (2000); lcd.clear (); fps.Open (); // trimite comanda serială pentru a inițializa fp fps.SetLED (adevărat); // porniți LED-ul pentru ca fps să poată vedea amprenta pinMode (2, INPUT_PULLUP); // Conectați-vă la rezistența de tragere internă ca pin de intrare }
În interiorul funcției de buclă nulă trebuie să verificăm dacă butonul este apăsat, dacă este apăsat, vom înregistra un nou deget și vom salva șablonul acestuia cu un număr de identificare folosind funcția de înregistrare. Dacă nu, vom continua să așteptăm să fie apăsat un deget în senzor. Dacă este apăsat, vom identifica amprenta comparând-o cu toate șabloanele de amprente înregistrate folosind metoda 1: N. Odată ce numărul de identificare este descoperit, vom afișa bun venit urmat de numărul de identificare. Dacă amprenta nu s-a potrivit cu niciunul dintre degetele înregistrate, numărul de identificare va fi 200, în acest caz vom afișa necunoscut de bun venit.
if (digitalRead (2)) // Dacă butonul a fost apăsat pe { Enroll (); // Înscrieți o amprentă digitală } // Identificați testul amprentei digitale dacă (fps.IsPressFinger ()) { fps.CaptureFinger (fals); int id = fps.Identify1_N (); lcd.clear (); lcd.print ("Bun venit:"); if (id == 200) lcd.print ("necunoscut"); // Dacă nu este recunoscut lcd.print (id); întârziere (1000); }
Funcția de înregistrare ar trebui să ia trei eșantioane de intrări pentru a înregistra cu succes un deget. Odată înscris, va fi creat un șablon pentru acel deget, care nu va fi șters, cu excepția cazului în care utilizatorul l-a forțat prin comenzi HEX. Codul pentru înregistrarea unui deget este prezentat mai jos. Metoda IsPressFinger este utilizată pentru a verifica dacă este detectat un deget, dacă da, atunci imaginea este capturată folosind CaptureFinger și apoi în cele din urmă Enroll1, Enroll2 și Enroll3 sunt utilizate pentru trei eșantioane diferite pentru a înregistra cu succes un deget. LCD-ul afișează numărul de identificare al degetului dacă este înscris cu succes, altfel ar afișa un mesaj de eșec cu cod. Codul 1 înseamnă că amprenta nu a fost capturată în mod clar și, prin urmare, trebuie să încercați din nou. Codul 2 este o indicație de defecțiune a memoriei, iar codul 3 indică faptul că degetul a fost deja înscris.
void Enroll () // Funcția Enroll din programul de bibliotecă exmaple { int enrollid = 0; bool usedid = adevărat; while (usedid == true) { usedid = fps.CheckEnrolled (enrollid); if (usedid == true) enrollid ++; } fps.EnrollStart (enrollid); // inscrie lcd.print ("Înscriere #"); lcd.print (enrollid); while (fps.IsPressFinger () == false) întârziere (100); bool bret = fps.CaptureFinger (adevărat); int iret = 0; if (bret! = false) { lcd.clear (); lcd.print („Eliminați degetul”); fps.Enroll1 (); while (fps.IsPressFinger () == true) întârziere (100); lcd.clear (); lcd.print („Apăsați din nou”); while (fps.IsPressFinger () == false) întârziere (100); bret = fps.CaptureFinger (adevărat); if (bret! = false) { lcd.clear (); lcd.print („Eliminați degetul”); fps.Enroll2 (); while (fps.IsPressFinger () == true) întârziere (100); lcd.clear (); lcd.print („Apăsați încă o dată”); while (fps.IsPressFinger () == false) întârziere (100); bret = fps.CaptureFinger (adevărat); if (bret! = false) { lcd.clear (); lcd.print („Eliminați degetul”); iret = fps.Enroll3 (); if (iret == 0) { lcd.clear (); lcd.print („Înregistrarea succesului”); } else { lcd.clear (); lcd.print ("Înscriere eșuată:"); lcd.print (iret); } } else lcd.print („Nu a reușit 1”); } else lcd.print ("Eșuat 2"); } else lcd.print ("Eșuat 3"); }
Funcționarea senzorului de amprentă digitală GT511C3 cu Arduino
Acum, când hardware-ul și codul nostru sunt gata, este timpul să ne testăm proiectul. Încărcați codul pe Arduino și porniți-l, folosesc doar portul micro-USB pentru a alimenta proiectul. La pornire, ar trebui să vedem mesajul introductiv pe ecranul LCD și apoi să afișeze „Bună!..”. Aceasta înseamnă că FPS este gata să scaneze după deget, dacă este apăsat vreun deget înscris, ar spune „Bun venit” urmat de numărul de identificare al degetului, așa cum se arată mai jos.
Dacă trebuie înregistrat un deget nou, putem folosi butonul pentru a intra în modul de înregistrare și urmăm instrucțiunile LCD pentru a înregistra un deget. După finalizarea procesului de înscriere, ecranul LCD va afișa din nou „Bună!..” pentru a indica faptul că este citit pentru a identifica din nou degetele. Lucrarea completă poate fi găsită la videoclipul legat mai jos.
De aici puteți dezvolta multe lucruri interesante folosind modulul senzor Finger Print. Sper că ați înțeles tutorialul și v-a plăcut să creați ceva util, dacă aveți întrebări, lăsați-le în secțiunea de comentarii sau folosiți forumurile pentru alte întrebări tehnice.