Leggere le impronte digitali è possibile con il sensore Fingerprint Scanner TTL GT-511C3 distribuito dalla Sparkfun
Il sensore permette di leggere e memorizzare fino a 200 impronte digitali e permette il riconoscimento ed il confronto fra un’impronta letta e quelle memorizzate nel suo database il tutto grazie ad una memoria interna e ad un processore che processa i dati in arrivo dal sensore. Arduino (o altri device collegati) non deve preoccuparsi di fare altro che di inviare (tramite comunicazione UART) i comandi al sensore ed attendere le risposte.
Il protocollo di comunicazione è spiegato esaurientemente nella pagina di sparkfun ma per poter aggirare l’ostacolo di sviluppare l’interfaccia di comunicazione, puoi scaricare una libreria già pronta all’uso.
Per le istruzioni su come aggiungere una libreria custom devi fare riferimento alla documentazione ufficiale Arduino.
Important!
ATTENZIONE: nel caso tu voglia acquistare il sensore, sappi che molto spesso il cavo di collegamento non è incluso. Per questa ragione verifica e, se non è incluso, ordinalo insieme al sensore. Lo dico per esperienza diretta perché io non sono riuscito a trovarlo a Milano quindi potrebbe essere poi difficoltoso reperirlo e potrebbe richiedere un secondo ordine. Il cavo è questo:
Collegamento del Fingerprint Scanner TTL GT-511C3
Iniziamo a vedere come deve essere effettuato il collegamento elettrico ai pin Arduino.
Dal sensore escono 4 cavi. Due di questi devi collegarli a GND e all’alimentazione (io l’ho collegato al 5V ma le specifiche del sensore dicono che l’alimentazione può essere compresa fra 3.3 e 6V quindi dovrebbe essere possibile usare anche l’alimentazione 3.3V della scheda o il Vin se Arduino è alimentato con 6V o meno) mentre gli altri 2 devi collegarli a 2 pin digitali liberi di Arduino secondo il seguente schema:
Una volta capito come collegare il sensore ad Arduino capiamo la logica con cui lavora.
Come funziona il sensore fingerprint scanner
Il sensore ha 200 slot utilizzabili, ognuno, per memorizzare un’impronta digitale.
Per farlo devi completare una procedura di enrollment che consiste:
- nel far leggere al sensore 3 volte l’impronta dello stesso dito;
- fargli creare quello che viene definito template dell’impronta;
- memorizzare il template in uno dei suddetti slot per futuri confronti.
Attenzione: ogni slot può contenere un’unica impronta e non ci possono essere 2 slot con la stessa impronta, il sensore restituisce errore in questo caso.
Una volta memorizzate una o più impronte, puoi tentare un riconoscimento utilizzando l’apposito comando del Fingerprint Scanner TTL GT-511C3.
Lo Sketch di enrollment
Vediamo come funziona l’enrollment con uno sketch di esempio scritto utilizzando la libreria di cui sopra:
#include "FPS_GT511C3.h" #include "SoftwareSerial.h" // usata dalla FPS_GT511C3.h FPS_GT511C3 fps(12, 13); void setup() { Serial.begin(9600); delay(100); fps.Open(); fps.SetLED(true); } void Enroll(int enrollid) { int risultato; fps.EnrollStart(enrollid); Serial.print("Premi il dito #"); Serial.print(enrollid); Serial.println(" sul sensore"); while(fps.IsPressFinger() == false) delay(100); fps.CaptureFinger(true); Serial.println("Togli il dito"); fps.Enroll1(); while(fps.IsPressFinger() == true) delay(100); Serial.println("Premi nuovamente lo stesso dito"); while(fps.IsPressFinger() == false) delay(100); fps.CaptureFinger(true); Serial.println("Rimuovi il dito"); fps.Enroll2(); while(fps.IsPressFinger() == true) delay(100); Serial.println("Premi lo stesso dito per l'ultima volta"); while(fps.IsPressFinger() == false) delay(100); fps.CaptureFinger(true); Serial.println("Remove finger"); risultato = fps.Enroll3(); if (risultato== 0) { Serial.println("Enrolling OK"); } else { Serial.print("Enroll fallito con codice d'errore:"); Serial.println(risultato); } } void loop() { for (int i=0;i<200;i++) { Enroll(i); delay(2000); } fps.SetLED(false); }
Analizziamo lo sketch nelle parti essenziali:
Riga 4: creazione dell’oggetto (C++) sensore. Si utilizza la funzione di libreria custom per creare l’oggetto sensore passandogli come parametri i pin digitali rx e tx (nell’ordine) a cui è collegato il sensore. Nel mio caso pin 12 e 13.
Riga 10: inizializza il sensore fingerprint scanner ttl gt-511C3.
Riga 11: accende la luce del sensore, necessaria per poter leggere le impronte.
Riga 19: funzione di libreria che fa partire la procedura di enrollment sullo slot passato come parametro.
Riga 23: controlla se sul sensore è poggiato un dito tramite la funzione di libreria isPressFinger che restituisce false se non c’è un dito true se il dito è presente. Questa riga attende finché il dito non viene posto sul sensore.
Riga 24: accertato che il dito è sul sensore la funzione CaptureFinger legge l’impronta e la valorizza nella RAM del sensore. Il parametro utilizzato può valere true si vuole una qualità maggiore (cattura più lenta) o false se si vuole una qualità minore (cattura più veloce). In rete si suggerisce di usare true per l’enrollment e false per il riconoscimento ma la differenza temporale è così bassa che io utilizzo sempre true.
Riga 26: primo step di enrollment sullo slot identificato dal parametro della funzione EnrollStart (riga20).
Riga 27: controlla che il dito sia stato rimosso altrimenti aspetta finché non viene rimosso.
Riga 30: Procede alla seconda cattura.
Riga 32: procede al secondo step dell’enrollment.
Riga 36: terza cattura.
Riga 38: Terzo e ultimo step dell’enrollment. Se il valore restituito è 0 il processo è andato a buon fine altrimenti si è verificato un errore.
Righe 50-58: Loop. Cerca di valorizzare un’impronta su ogni slot disponibile. Ovviamente si può interrompere la procedura quando si vuole staccando il cavo USB
Questo sketch è molto semplificato, utilizza solo alcuni dei comandi disponibili e non fa praticamente alcun controllo degli errori.
Per esempio non gestisce l’errore impronta duplicata quando si cerca di inserire la stessa impronta in 2 slot diversi.
Nell’articolo relativo al progetto completo vedrai come introdurre una complessità maggiore.
Riassumendo per memorizzare una nuova impronta
- devi scegliere uno slot libero
- far partire una procedura di enrollment ( specificando l’id dello slot utilizzando la funzione EnrollStart )
- devi poi catturare la prima impronta del dito con la funzione CaptureFinger
- avviare il primo step di enrollment con la funzione Enroll1
- catturare una seconda immagine
- far partire il secondo step con Enroll2
- catturare una terza immagine
- far partire il terzo ed ultimo step con la funzione Enroll3.
Di seguito una breve panoramica delle funzioni di libreria utilizzabili con Arduino.
Ci sono altri comandi (acquisizione dell’immagine letta dal sensore, trasmissione del tempalte per uso locale, ecc.) che non hanno senso di essere su Arduino.
Ti rimando quindi alla documentazione ufficiale della Sparkfun sul sensore Fingerprint Scanner TTL GT-511C3 se sei interessato.
Nel prossimo articolo vedremo come effettuare un riconoscimento una volta memorizzate alcune impronte.
void Open (): inizializza il lettore
bool SetLED(bool on): accende o spegne la luce del lettore a seconda del valore passato: true accende, false spegne. Ritorna true se l’operazione ha avuto successo, false altrimenti.
int GetEnrollCount(): restituisce il numero di dita registrate.
bool CheckEnrolled(int id): restituisce true se lo slot id (da 0 a 199) è occupato altrimenti false.
int EnrollStart(int id): inizia il processo di cattura dell’impronta per lo slot id (da 0 a 199). Restituisce: 0 se OK, 1se database full, 2 se posizione non valida, 3 se slot id già occupato
int Enroll1(): prima scansione per il dito identificato dall’enrollstart precedente. Restituisce: 0 se OK, 1 o 2 se errore, 3 se impronta già presente
int Enroll2(): seconda scansione per il dito identificato dall’enrollstart precedente. Restituisce: 0 se OK, 1 o 2 se errore, 3 se impronta già presente
int Enroll3(): terza scansione per il dito identificato dall’enrollstart precedente con merge e salvataggio del template. Restituisce: 0 su OK, 1 o 2 se errore, 3 se impronta già presente
bool IsPressFinger(): controlla se un dito sta premendo sul sensore. Restituisce true se trova il dito, false altrimenti.
bool DeleteID(int id): cancella il template nella posizione id (e la libera). Restituisce false in caso di errore.
bool DeleteAll(): cancella tutti gli slot. Restituisce false se il DB è vuoto.
bool CaptureFinger (bool high_quality): cattura l’impronta del dito sul sensore e la memorizza nella memoria del sensore stesso. Andrà poi confrontata con il DB per individuare l’id. Restituisce true se la cattura ha successo, false se il sensore è vuoto.
int Verify1_1(int id): verifica se l’impronta catturata con la funzione CaptureFinger corrisponde all’impronta memorizzata nello slot identificato da id (da 0 a 199). Ritorna: 0 se corrispondono, 1 se la posizione non è valida (id < 0 o id > 199), 2 se l’id non in uso (vuoto), 3 se l’impronta non corrisponde a quella nello slot id
int Identify1_N (): restituisce l’id dello slot contenente l’impronta che corrisponde al dito catturata dalla funzione CaptureFinger. Se non la trova restituisce 200.
35 commenti
2 ping
Vai al modulo dei commenti
Ciao! ho comprato questo sensore e l’ho provato con il software scaricabile dal sito sparkfun. Le funzioni come enroll, get/set database funzionano, ma appena faccio get image il sensore spegne la luce dopo qualche secondo ed il software va in timeout. Ciò potrebbe essere dovuto al fatto che invece di utilizzare un ftdi breackout utilizzo un arduino con un ponte tra il reset e la massa (utilizzando in questo modo solo il chip per la comunicazione seriale)? Grazie mille per l’aiuto!
Autore
Ciao Daniele,
purtroppo non ho mai provato la funzione get image da parte del sensore.
Certo il cavo FTDI dedicato se è stato testato dal produttore è indicato come soluzione migliore, tuttavia arduino in tale modalità non dovrebbe differire in modo significativo.
Un dubbio: perché usi un ponte tra reset-gnd e non un condensatore come descritto in molti tutorial?
Ciao Daniele,
posso chiederti lo schema con cui hai collegato il lettore alla scheda Arduino specificando tutti i PIN? Mi mandi anche lo sketch che hai usato per l’enrollment?
Come vedi il mio collegamento è piuttosto semplice: pin 12 e 13 per la comunicazione e 5V e GND per l’alimentazione. Mi sembra strano che qualcosa funzioni e qualcosa no.
Il tutto, ovviamente, se il get image a cui ti riferisci non è la funzione di libreria GetImage della libreria. Questa funzione, infatti, non ha senso con Arduino perché restituisce un pacchetto di 52116 byte ingestibile con Arduino.
Fammi sapere.
Ciao Mauro , sono nuovo, innanzitutto complimenti per la tua preparazione nel campo di elettronica, volevo chiederti ..
ho acquistato 4 fingerprint da aliexpress, il modello è FPM10A , ho scaricato la libreria Adafruit_Fingerprint,
ho collegato il modulo come da tutorial ma non da segni di funzionamento , solo un lampeggio quando collego l’alimentazione +5volt di arduino, mi sapresti aiutare ??? Ti ringrazio anticipatamente
Autore
Ciao Alessandro,
il modello del fingerprint trattato in questo articolo mi sembra differente dal tuo, probabilmente dovrai trovare la libreria adatta al tuo modello.
Io ti consiglio di chiedere al fornitore del prodotto la documentazione ed uno sketch di esempio da usare come fa Adafruit altrimenti devi scriverti tutto da solo.
Hi
I hope it’s not too late to ask a question, i dd the setup of the FPS to the board as you did in your diagram, now the problem is when i connect the usb the scanner kind of blink the blue light and stops, nothing happens after works.
I tried uploading a blinking code i got from a somewhere but the scanner does not blink, can you please assist me on this matter.
Autore
Hi Tebogo,
asked you to retailer? It is looking bad
Ciao ottima guida voglio sapere se c’è qualche differenza tra questo sensore Fingerprint Scanner – 5V TTL (GT-511C1R) https://www.sparkfun.com/products/13007 e quello usato da te, costa di meno e in piu nello stesso sito puoi trovare il cavo.Vorrei sapare se posso utilizzare lo stesso sketch e ha le stesse funzioni.Grazie in anticipo.
Autore
Ciao Vincenzo,
purtroppo io ho provato solo quello su cui ho scritto l’articolo, anzi per la precisione è quello usato da Michele.
Ciao Mauro , stavo pensando di progettare l’avviamento di un motorino attraverso questo sensore biometrico ma prima di acquistare lo stesso ho scaricato la libreria e l’ho caricata su Arduino . Fin qui tutto bene il problema sorge quando ho provato ad avviare un esempio contenuto nella cartella scaricata , infatti il programma mi segna un errore dovuto al fatto che non riconosce la libreria stessa.
Come posso risolvere ?
Grazie per la risposta e complimenti per la preparazione in questo campo .
Autore
Ciao Angelo,
se non mi dici che errore ti viene segnalato non posso indovinarlo 🙂
1)salve volevo sapere l’affidabilità del sensore?
cioè la rivelazione del sensore funziona o per esempio se mi lavo le mani e poi faccio una misurazione va o fa i capricci?
2)oltre alle librerie usate da te ce ne sono altre?
spero in una risposta, grazie mille
Autore
Ciao Francesco,
non mi sono mai imbattuto in malfunzionamenti con le mani pulite, dovresti provare se si verificano anomalie con il detergente che usi tu.
Le librerie che ho provato sono quelle indicate dalla casa produttrice, di solito le più adatte, ma sei libero di scriverti le tue librerie partendo dalle specifiche del sensore.
salve signore,
avevo un’altra domanda.
si può espandere la memoria per poter salvare più di 200 impronte?
grazie mille
Autore
Ciao Fracesco,
che io sappia no, potresti sfruttare delle EEPROM esterne o SD CARD ma devi scriverti tutto il codice per farlo.
Grazie mille Mauro.
Io devo ancora comprare il sensore ma volevo essere sicuro che non aveva problemi buona affidabilità
Ciao mauro complimenti intanto.Voglio sapere ma posso collegare il sensore direttamente ai 5v perchè nello script viene messa una resistenza che abbassa il voltaggio a 3.3v per non friggere il sensore.Fammi sapere quando puoi grazie
Autore
Ciao Andrea,
io ti consiglio lo schema indicato dal produttore.
Ciao Mauro, qualche tempo fa ho acquistato il Fingerprint Scanner – 5V TTL (GT-511C1R), e seguendo la tua guida l’ho fatto funzionare.
Adesso ho dei problemi nel farlo funzionare, non riesco più ad inizializzarlo con il comando fps.Open (); (nel void setup).
Il led verde di accensione è ON ed anche la luce blu funziona (ho provato mettento soltanto fps.SetLED(true);).
Saresti qual’è il problema? Grazie in anticipo.
Autore
Ciao Mattia,
lascio on-line il tuo commento in modo che altri appassionati e l’autore stesso di questo progetto possa aiutarti.
ciao mauro volevo chiederti in merito al progetto Fingerprint Scanner TTL GT-511C3- /arduino
si possono mettere piu dispositivi per aumentare il limite delle 200 ?
Autore
Ciao Raffaele,
lascio che a risponderti sia Michele, autore di un progetto con questo componente e più esperto di me.
interesserebbe anche a me. Raffaele ci sei riuscito in qualche modo?
Ciao Raffaele e Stefano. Le impronte vengono salvate internamente al sensore quindi ogni sensore ha un limite intrinseco di 200 impronte. Ovviamente collegandone 2 puoi aumentare il limite a 400 ma 200 saranno in uno dei 2 e altre 200 nell’altro.
Inoltre le librerie consumano molta memoria quindi un arduino UNO non è indicato nel caso in cui si vogliano gestire più lettori.
Autore
Grazie Michele !!!
ciao mauro volevo chiederti che anch’io sto facendo un progetto per l’esame di maturità con arduino e ho acquistato su ebay il dispositivo ovvero questo [[ link rimosso in automatico ]] mi sono interessato dopo acquistato come farlo funzionare forse questo è stato il mio errore visto che studio elettronica quindi il mio livello di programmazione non è alto ma abbastanza conosciuto giusto per piccoli programmi per arduino per programmare i nostri progetti volevo sapere se bisogna scaricare una libreria oppure escono gia comprese quindi basta solo un programma?
Grazie mille in anticipo!
Autore
Ciao Michele,
prima di acquistare materiale su siti, sopratutto se non ufficiali, io preferisco informarmi bene sul componente ed in ogni caso acquistare solo da siti che rilasciano documentazione ed esempi.
Purtroppo senza un esempio o una libreria non saprei aiutarti.
Inoltre il link è stato rimosso in automatico, come hai letto nelle semplici regole, pubblicate in fondo a tutti gli articoli, non è possibile inserirli.
Salve potrebbe come trovare le librerie da utilizzare con il sensore?
Autore
Ciao Carmine,
non sono certo di aver compreso cosa intendi ma mi sembra che nelle frase “puoi scaricare una libreria già pronta all’uso” c’è il link che cerchi
Ciao Mauro,
volevo chiederti se è possibile salvare su un supporto esterno le impronte di riferimento in modo da aumentare il limite di 200 riconoscimenti.
Grazie dell’attenzione
Eduardo
Autore
Ciao Eduardo,
non sei il primo che mi chiede una cosa simile, penso che la soluzione sia da ricercare nella libreria di gestione delle impronte, potresti riscrivere il metodo di memorizzazione in modo che risieda su una SD o altra memoria di massa.
Ciao,
complimenti per il lavoro svolto.
Ho una domanda. Il fingerprint utilizzato trx e rx a 3.3 volt, mentre arduino trx e rx a 5 volt. Perchè non hai usato nel progetto un variatore di livello?
Autore
Ciao Luigi,
hai ragione sarebbe stato opportuno utilizzarlo, ti consiglio di farlo.
Spesso per non complicare troppo gli schemi evito di inserire componenti che distraggono chi legge, in ogni caso per test di breve durata, come spesso faccio per le demo, è possibile omettere i traslatori di livello ( level shifter ) poi nei progetti finali è bene averli inseriti per non danneggiare i componenti.
Volevo acquistare un lettore impronte digitali Sono un medico
Autore
Ciao Polito,
i lettori che tratto sono ad uso hobbystico e sperimentale, ti consiglierei di rivolgerti ad un rivenditore di articoli adatti al tuo scopo.
[…] Eccoti alla seconda puntata sul lettore di impronte digitali Fingerprint Scanner TTL GT-511C3 introdotto con l’articolo del 25/8: […]
[…] Fingerprint Scanner TTL GT-511C3 […]