- Materials necessaris
- Mòdul del sensor d’empremta digital GT511C3 (FPS)
- Connexió del sensor d'impressió digital GT511C3 amb Arduino
- Arduino amb GT511C3
- Programació d'Arduino per al sensor d'impressió digital GT511C3
- Funcionament del sensor d'impressió digital GT511C3 amb Arduino
La biomètrica s’ha utilitzat com a sistema d’autenticació fiable des de fa molt de temps. Avui en dia existeixen complexos sistemes biomètrics que poden identificar una persona pel ritme del batec del cor o fins i tot pel seu ADN. Altres mètodes factibles inclouen el reconeixement de veu, el reconeixement de cares, l’escaneig d’iris i l’escaneig per empremta digital. D’entre els quals el reconeixement d’empremtes digitals és el mètode més utilitzat, el podem trobar des d’un simple sistema d’assistència a telèfons intel·ligents fins a controls de seguretat i molt més.
En aquest tutorial aprendrem a utilitzar el popular sensor d'impressió digital (FPS) GT511C3 amb Arduino. Hi ha molts FPS disponibles i que ja han après com usar-los als dissenys de construcció com en el sistema d'assistència, Màquina de votació, sistema de seguretat, etc. Però el GT511C3 és més avançada amb una alta precisió i temps de resposta més ràpid, de manera que anem a aprendre com usar-lo amb Arduino per registrar-hi empremtes digitals i, a continuació, detectar les empremtes digitals sempre que sigui necessari. Comencem doncs.
Materials necessaris
- Arduino Nano / UNO
- Sensor d'impressió digital GT511C3
- Pantalla LCD de 16x2
- Pot: resistències de 10k i 1k, 10k, 22k
- Polsador
- Connexió de cables
- Taula de pa
Mòdul del sensor d’empremta digital GT511C3 (FPS)
Abans d’endinsar-vos en el projecte, feu-nos conèixer el mòdul del sensor d’empremtes digitals GT511C3 i el seu funcionament. Aquest sensor és molt diferent del sensor d'empremta digital capacitiva i ultrasònica que s'utilitza habitualment en els nostres telèfons intel·ligents. El GT511C3 és un sensor d’empremta digital òptic, és a dir, depèn de les imatges de la vostra empremta digital per reconèixer el seu patró. Sí, ho heu llegit bé, en realitat el sensor té una càmera al seu interior que fa fotos de la vostra empremta digital i després processa aquestes imatges mitjançant un potent IC ARM Cortex M3 integrat. La imatge següent mostra la cara frontal i posterior del sensor amb pinouts.

Com podeu veure, el sensor té una càmera (punt negre) envoltat de LED blaus, aquests LED s’han d’il·luminar per obtenir una imatge clara de l’empremta digital. Aquestes imatges es processen i es converteixen en valor binari mitjançant el microcontrolador ARM acoblat a EEPROM. El mòdul també té un LED SMD de color verd per indicar la potència. Cada imatge d’empremta digital és de 202x258 píxels amb una resolució de 450 dpi. El sensor pot registrar fins a 200 empremtes digitals i, per a cada plantilla d’empremta digital, assigna un formulari d’identificació del 0 al 199. Aleshores, durant la detecció, es pot comparar automàticament l’empremta digital escanejada amb les 200 plantilles i, si es troba una coincidència, proporciona el número d’identificació d’aquesta empremta digital en concret mitjançant l’ Smack Finger 3.0Algorisme del microcontrolador ARM. El sensor pot funcionar de 3,3 V a 6 V i es comunica a través de la comunicació sèrie a 9600. Es diu que els pins de comunicació (Rx i Tx) només són tolerants a 3,3 V, però el full de dades no n'especifica gaire. A continuació es mostra el pin-out d’un GT511C3 FPS.

A part de la comunicació en sèrie, el mòdul també es pot connectar directament a l'ordinador mitjançant una connexió USB mitjançant els pins que es mostren a la imatge anterior. Un cop connectat a l'ordinador, es pot controlar el mòdul mitjançant l'aplicació SDK_DEMO.exe que es pot descarregar des de l'enllaç. Aquesta aplicació permet a l'usuari registrar / verificar / eliminar les empremtes digitals i també reconèixer les empremtes digitals. El programari també us pot ajudar a llegir la imatge captada pel sensor, que val la pena provar-ho. Alternativament, també podeu utilitzar aquest programari encara que el sensor estigui connectat amb Arduino, en parlarem més endavant en aquest article.
Una altra característica interessant del sensor és la carcassa metàl·lica al voltant de la regió de detecció. Com he dit anteriorment, s’ha d’encendre el LED blau perquè el sensor funcioni. Però en les aplicacions en què el sensor ha d’esperar activament a una empremta digital, no és possible mantenir el LED sempre encès, ja que escalfarà el sensor i, per tant, el danyarà. Per tant, en aquests casos, la carcassa metàl·lica es pot connectar a un pin d'entrada tàctil capacitiva d'una MCU per detectar si s'està tocant. Si és així, es pot encendre el LED i es pot iniciar el procés de detecció. Aquest mètode no es demostra aquí, ja que està fora de l’abast d’aquest article.
Quan funciona a 3,3 V, el sensor consumeix uns 130 mA. Es requereixen gairebé 3 segons per inscriure un dit i 1 segon per identificar-lo. Tanmateix, si el nombre de plantilles inscrites és menor, la velocitat de reconeixement serà elevada. Per obtenir més informació sobre el sensor, podeu consultar aquest full de dades d’ADH-Tech, que és el fabricant oficial del mòdul.
Connexió del sensor d'impressió digital GT511C3 amb Arduino
El GT511C3 FPS té dos pins d’alimentació que poden alimentar-se amb + 5V pin d’Arduino i dos pins de comunicació Rx i Tx que es poden connectar a qualsevol pin digital d’Arduino per a la comunicació en sèrie. A més, també hem afegit un polsador i un LCD per mostrar l'estat del sensor. El diagrama complet del circuit per a la interfície del GT511C3 FPS amb Arduino es pot trobar a continuació.

Com que els pins Rx i Tx són tolerants a 3,3V, hem utilitzat un divisor de potencial al costat Rx per convertir 5V a 3,3V. La resistència de 10 k i la resistència de 22 k converteixen el senyal de 5 V del pin Arduino Tx a 3,3 V abans que arribi al pin Rx del FPS. El sensor també es pot alimentar amb 3,3 V, però assegureu-vos que el vostre Arduino pugui obtenir prou corrent per al sensor. Hem connectat la pantalla LCD en mode de 4 bits alimentat per pin d'Arduino de 5V. Es connecta un polsador al pin D2 que, quan es prem , posarà el programa en mode de registre, on l'usuari podrà registrar un nou dit. Després d'inscriure's, el programa continuarà en mode d'escaneig per buscar qualsevol dit que toqui el sensor.

Arduino amb GT511C3
Com es va esmentar anteriorment, el GT511C3 FPS es comunica a través de la comunicació en sèrie, el sensor entén el codi hexadecimal i es realitza una operació particular per a cada codi hexadecimal. Si us interessa, podeu consultar el full de dades per conèixer tots els valors hexadecimals i la seva funció corresponent. Però, per sort, bboyho ja ha creat una biblioteca que es pot utilitzar directament amb Arduino per registrar-se i detectar empremtes digitals. La biblioteca Github per a GT511C3 FPS es pot descarregar des de l’enllaç següent
Biblioteca Arduino GT511C3
L'enllaç descarregarà un fitxer ZIP, llavors hauríeu d' afegir-lo al vostre IDE Arduino seguint l'ordre Sketch -> Inclou biblioteca -> Afegeix biblioteca.ZIP. Un cop hàgiu afegit la biblioteca, reinicieu el vostre IDE i hauríeu de poder trobar els programes d'exemple per a GT511C3 FSP a Fitxer -> Exemple -> Fingerprint Scanner TTL, tal com es mostra a continuació

Hauríeu de veure quatre programes d’exemple, el programa de parpelleig parpellejarà el led blau de l’FPS, el programa de registre i identificació de dits es pot utilitzar per registrar i identificar els dits en conseqüència. Tingueu en compte que un dit un cop inscrit sempre serà recordat pel mòdul encara que estigui apagat.
El programa Serial Pass-through es pot carregar a Arduino per utilitzar l' aplicació Demo_SDK.exe que hem comentat anteriorment en aquest article. Per esborrar qualsevol plantilla d’empremta digital o desar una còpia a l’ordinador es pot utilitzar aquesta aplicació SDK.
Programació d'Arduino per al sensor d'impressió digital GT511C3
El nostre objectiu aquí és escriure un programa que registrarà un dit quan es prem un botó i mostrar el número d'identificació del dit que ja està inscrit. També hauríem de poder mostrar tota la informació a la pantalla LCD per permetre que el projecte sigui autònom. El codi complet per fer el mateix es dóna a la part inferior d'aquesta pàgina. Aquí estic dividint el mateix en petits fragments per ajudar-vos a entendre millor.
Com sempre, comencem el programa incloent les biblioteques necessàries, aquí necessitarem la biblioteca FPS_GT511C3 per al nostre mòdul FPS, el programari en sèrie per utilitzar D4 i D5 en la comunicació en sèrie i el cristall líquid per a la interfície LCD. A continuació, hem d'esmentar a quins pins està connectat el FPS i el LCD. Si hagueu seguit el diagrama del circuit com a tal, és de 4 i 5 per a FPS i de D6 a D11 per a LCD. A continuació es mostra el codi del mateix
#include "FPS_GT511C3.h" // Obtén la biblioteca de https://github.com/sparkfun/Fingerprint_Scanner-TTL #include "SoftwareSerial.h" // Biblioteca en sèrie del programari #include
Dins de la funció de configuració , mostrem un missatge introductori a la pantalla LCD i inicialitzem el mòdul FPS. L’ordre fps.SetLED (true) encendrà el LED blau del sensor, el podeu apagar per fps.SetLED (false) quan no sigui necessari, ja que escalfaria el sensor si es deixés encès contínuament. També hem fet el pin D2 com a pin d’entrada i l’hem connectat a una resistència de tracció interna per connectar un polsador al pin.
configuració nul·la () { Serial.begin (9600); lcd.begin (16, 2); // Inicialitzar 16 * 2 LCD lprint.print ("GT511C3 FPS"); // Línia inicial del missatge 1 lcd.setCursor (0, 1); lcd.print ("amb Arduino"); // Retard de la línia 2 del missatge d'introducció (2000); lcd.clear (); fps.Open (); // enviar ordres en sèrie per inicialitzar fp fps.SetLED (true); // enceneu el LED perquè els fps puguin veure l'empremta digital pinMode (2, INPUT_PULLUP); // Connecteu-vos a la resistència interna de pujada com a pin d'entrada }
Dins de la funció de bucle buit hem de comprovar si es prem el botó; si es prem, registrarem un dit nou i guardarem la plantilla amb un número d’ID mitjançant la funció de registre. Si no, seguirem esperant que es prem un dit al sensor. Si es prem, identificarem l’empremta digital comparant-la amb totes les plantilles d’empremtes digitals registrades mitjançant el mètode 1: N. Un cop descobert el número d'identificació, mostrarem la benvinguda seguida del número d'identificació. Si l'empremta digital no coincideix amb cap dels dits inscrits, el recompte d'identificació serà de 200, en aquest cas mostrarem la desconeguda de benvinguda.
if (digitalRead (2)) // Si es prem el botó { Enroll (); // Inscriviu una empremta digital } // Identifiqueu la prova d’empremta digital si (fps.IsPressFinger ()) { fps.CaptureFinger (false); int id = fps.Identify1_N (); lcd.clear (); lcd.print ("Benvingut:"); if (id == 200) lcd.print ("Desconegut"); // Si no es reconeix lcd.print (id); retard (1000); }
La funció de registre hauria de prendre tres entrades de mostra per registrar un dit amb èxit. Un cop registrat, es crearà una plantilla per a aquest dit concret que no s'esborrarà tret que l'usuari l'obligui mitjançant comandaments HEX. A continuació es mostra el codi per inscriure un dit. El mètode IsPressFinger s’utilitza per comprovar si es detecta un dit, si és així, la imatge es captura mitjançant CaptureFinger i, finalment, Enroll1, Enroll2 i Enroll3 s'utilitzen per a tres mostres diferents per registrar amb èxit un dit. La pantalla LCD mostra el número d'identificació del dit si s'ha inscrit correctament; en cas contrari, es mostrarà un missatge d'error amb el codi. El codi 1 significa que l’empremta digital no s’ha capturat amb claredat i, per tant, heu de tornar-ho a provar. El codi 2 és una indicació d’error de memòria i el codi 3 indica que el dit ja està inscrit.
void Enroll () // Funció d'inscripció des del programa de biblioteca exmaple { int enrollid = 0; bool usedid = cert; while (usedid == true) { usedid = fps.CheckEnrolled (enrollid); if (usedid == true) enrollid ++; } fps.EnrollStart (enrollid); // inscriure lcd.print ("Inscripció #"); lcd.print (enrollid); while (fps.IsPressFinger () == false) endarreriment (100); bool bret = fps.CaptureFinger (true); int iret = 0; if (bret! = false) { lcd.clear (); lcd.print ("Elimina el dit"); fps.Enroll1 (); while (fps.IsPressFinger () == true) demora (100); lcd.clear (); lcd.print ("Torneu a prémer"); while (fps.IsPressFinger () == false) endarreriment (100); bret = fps.CaptureFinger (true); if (bret! = false) { lcd.clear (); lcd.print ("Elimina el dit"); fps.Enroll2 (); while (fps.IsPressFinger () == true) demora (100); lcd.clear (); lcd.print ("Premeu una altra vegada"); while (fps.IsPressFinger () == false) endarreriment (100); bret = fps.CaptureFinger (true); if (bret! = false) { lcd.clear (); lcd.print ("Elimina el dit"); iret = fps.Enroll3 (); if (iret == 0) { lcd.clear (); lcd.print ("Èxit de registre"); } else { lcd.clear (); lcd.print ("Ha fallat la inscripció:"); lcd.print (iret); } } else lcd.print ("Error 1"); } else lcd.print ("Error 2"); } else lcd.print ("Error 3"); }
Funcionament del sensor d'impressió digital GT511C3 amb Arduino
Ara que el maquinari i el codi estan a punt, és hora de provar el nostre projecte. Pengeu el codi a Arduino i engegueu-lo, només estic fent servir el port micro-usb per alimentar el projecte. En arrencar, hauríem de veure el missatge d'introducció a la pantalla LCD i després hauria de mostrar "Hola!..". Això vol dir que FPS està a punt per escanejar el dit, si es prem qualsevol dit inscrit, diria "Benvingut" seguit del número d'identificació d'aquest dit, tal com es mostra a continuació.

Si s’ha de registrar un dit nou, podem utilitzar el botó polsador per entrar al mode d’inscripció i seguir les instruccions LCD per registrar un dit. Un cop finalitzat el procés d'inscripció, la pantalla LCD tornarà a mostrar "Hola!.." per indicar que es llegeix per tornar a identificar els dits. El treball complet es pot trobar al vídeo enllaçat a continuació.

A partir d’aquí podeu desenvolupar moltes coses interessants a sobre mitjançant el mòdul del sensor d’impressió digital. Espero que hàgiu entès el tutorial i us hagi agradat construir alguna cosa útil, si teniu alguna pregunta, deixeu-los a la secció de comentaris o utilitzeu els fòrums per a altres qüestions tècniques.
