Fingerprint Scanner TTL GT-511C3

Leggere le impronte digitali è possibile con il sensore Fingerprint Scanner TTL GT-511C3 distribuito dalla Sparkfun

Fingerprint Scanner TTL GT-511C3

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.

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:

schema fingerprint scanner due

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.

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/fingerprint-scanner-ttl-gt-511c3.html

35 commenti

2 ping

Vai al modulo dei commenti

    • Daniele il 22 Dicembre 2014 alle 10:53
    • Rispondi

    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!

    1. 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?

    2. 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.

      • alessandro cuomo il 21 Febbraio 2015 alle 12:22
      • Rispondi

      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

      1. 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.

  1. 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.

    1. Hi Tebogo,
      asked you to retailer? It is looking bad

    • vincenzo il 20 Ottobre 2015 alle 12:48
    • Rispondi

    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.

    1. Ciao Vincenzo,
      purtroppo io ho provato solo quello su cui ho scritto l’articolo, anzi per la precisione è quello usato da Michele.

    • cioce il 20 Gennaio 2016 alle 17:42
    • Rispondi

    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 .

    1. Ciao Angelo,
      se non mi dici che errore ti viene segnalato non posso indovinarlo 🙂

    • francesco il 17 Marzo 2016 alle 16:50
    • Rispondi

    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

    1. 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.

    • francesco il 17 Marzo 2016 alle 16:52
    • Rispondi

    salve signore,
    avevo un’altra domanda.
    si può espandere la memoria per poter salvare più di 200 impronte?
    grazie mille

    1. Ciao Fracesco,
      che io sappia no, potresti sfruttare delle EEPROM esterne o SD CARD ma devi scriverti tutto il codice per farlo.

    • Francesco il 18 Marzo 2016 alle 23:03
    • Rispondi

    Grazie mille Mauro.
    Io devo ancora comprare il sensore ma volevo essere sicuro che non aveva problemi buona affidabilità

    • Andrea il 31 Marzo 2016 alle 00:06
    • Rispondi

    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

    1. Ciao Andrea,
      io ti consiglio lo schema indicato dal produttore.

    • Mattia il 4 Aprile 2016 alle 09:44
    • Rispondi

    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.

    1. Ciao Mattia,
      lascio on-line il tuo commento in modo che altri appassionati e l’autore stesso di questo progetto possa aiutarti.

    • raffaele il 5 Luglio 2016 alle 00:42
    • Rispondi

    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 ?

    1. Ciao Raffaele,
      lascio che a risponderti sia Michele, autore di un progetto con questo componente e più esperto di me.

      • Stefano il 12 Luglio 2016 alle 15:17
      • Rispondi

      interesserebbe anche a me. Raffaele ci sei riuscito in qualche modo?

        • Michele Segoloni il 14 Giugno 2017 alle 13:04
        • Rispondi

        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.

        1. Grazie Michele !!!

    • Michele il 20 Gennaio 2017 alle 10:29
    • Rispondi

    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!

    1. 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.

    • Carmine il 7 Giugno 2017 alle 09:24
    • Rispondi

    Salve potrebbe come trovare le librerie da utilizzare con il sensore?

    1. 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

    • Eduardo il 19 Novembre 2018 alle 10:23
    • Rispondi

    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

    1. 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.

    • luigi doria il 7 Dicembre 2019 alle 06:29
    • Rispondi

    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?

    1. 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.

    • Potito il 15 Aprile 2021 alle 13:23
    • Rispondi

    Volevo acquistare un lettore impronte digitali Sono un medico

    1. 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.

  1. […] Eccoti alla seconda puntata sul lettore di impronte digitali Fingerprint Scanner TTL GT-511C3 introdotto con l’articolo del 25/8: […]

  2. […] Fingerprint Scanner TTL GT-511C3 […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.