- Vereiste materialen
- GT511C3 Vingerafdruksensor (FPS) module
- GT511C3 vingerafdruksensor verbinden met Arduino
- Arduino met GT511C3
- Programmering Arduino voor GT511C3 vingerafdruksensor
- Werking van GT511C3 vingerafdruksensor met Arduino
Biometrie wordt al geruime tijd gebruikt als betrouwbaar authenticatiesysteem. Tegenwoordig bestaan er complexe biometrische systemen die een persoon kunnen identificeren aan de hand van zijn hartslag of zelfs aan zijn DNA. Andere mogelijke methoden zijn onder meer spraakherkenning, gezichtsherkenning, irisscanning en vingerafdrukscanning. Waarvan de vingerafdrukherkenning de meest gebruikte methode is, we kunnen het vinden van een eenvoudig aanwezigheidssysteem tot smartphones tot beveiligingscontroles en nog veel meer.
In deze tutorial leren we hoe we de populaire GT511C3 Finger Print Sensor (FPS) met Arduino kunnen gebruiken. Er zijn veel FPS beschikbaar en we hebben al geleerd hoe we ze kunnen gebruiken om ontwerpen te bouwen, zoals een aanwezigheidssysteem, stemmachine, beveiligingssysteem enz. Maar de GT511C3 is geavanceerder met een hoge nauwkeurigheid en snellere responstijd, dus we zullen leren hoe we hem moeten gebruiken met Arduino om er vingerafdrukken op te registreren en vervolgens de vingerafdrukken te detecteren wanneer dat nodig is. Dus laten we beginnen.
Vereiste materialen
- Arduino Nano / UNO
- GT511C3 Vingerafdruksensor
- 16x2 LCD-scherm
- Pot - 10k en 1k, 10k, 22k weerstanden
- Druk op de knop
- Verbindingsdraden
- Broodplank
GT511C3 Vingerafdruksensor (FPS) module
Voordat we in het project duiken, laten we ons weten wat de GT511C3-vingerafdruksensormodule is en hoe deze werkt. Deze sensor is heel anders dan de capacitieve en ultrasone vingerafdruksensor die veel worden gebruikt in onze smartphones. De GT511C3 is een optische vingerafdruksensor, wat betekent dat hij afhankelijk is van afbeeldingen van je vingerafdruk om het patroon te herkennen. Ja, je leest het goed, de sensor heeft eigenlijk een camera erin die foto's van je vingerafdruk maakt en deze afbeeldingen vervolgens verwerkt met behulp van de krachtige ingebouwde ARM Cortex M3 IC. De onderstaande afbeelding toont de voor- en achterkant van de sensor met pinouts.
Zoals je kunt zien heeft de sensor een camera (zwarte vlek) omgeven door blauwe leds, deze leds moeten oplichten om een duidelijk beeld van de vingerafdruk te maken. Deze afbeeldingen worden vervolgens verwerkt en omgezet in binaire waarde met behulp van de ARM-microcontroller in combinatie met EEPROM. De module heeft ook een groene kleur SMD LED om stroom aan te geven. Elke vingerafdrukafbeelding is van 202x258 pixels met een resolutie van 450dpi. De sensor kan tot 200 vingerafdrukken registreren en wijst aan elke vingerafdruksjabloon een ID-formulier 0 tot 199 toe. Vervolgens kan het tijdens detectie automatisch de gescande vingerafdruk vergelijken met alle 200 sjablonen en als er een match wordt gevonden, geeft het het ID-nummer van die specifieke vingerafdruk met behulp van de Smack Finger 3.0.Algoritme op de ARM-microcontroller. De sensor kan werken van 3,3 V tot 6 V en communiceert via seriële communicatie op 9600. De communicatiepennen (Rx en Tx) zouden slechts 3,3 V tolerant zijn, maar de datasheet zegt er niet veel over. De pin-out van een GT511C3 FPS wordt hieronder weergegeven.
Naast seriële communicatie kan de module ook rechtstreeks op de computer worden aangesloten via een USB-verbinding met behulp van de pinnen die in de vorige afbeelding zijn weergegeven. Eenmaal aangesloten op de computer kan de module worden bestuurd met behulp van de SDK_DEMO.exe-applicatie die kan worden gedownload via de link. Met deze applicatie kan de gebruiker vingerafdrukken registreren / verifiëren / verwijderen en ook vingerafdrukken herkennen. De software kan u ook helpen bij het lezen van de afbeelding die door de sensor is vastgelegd, wat het proberen waard is. Als alternatief kunt u deze software ook gebruiken, zelfs als de sensor is verbonden met Arduino, we zullen dit later in dit artikel bespreken.
Een ander interessant kenmerk van de sensor is de metalen behuizing rond het detectiegebied. Zoals ik eerder vertelde, moet de blauwe LED worden ingeschakeld om de sensor te laten werken. Maar in toepassingen waarbij de sensor actief moet wachten op een vingerafdruk, is het niet mogelijk om de LED altijd aan te laten staan, aangezien deze de sensor opwarmt en dus beschadigt. Daarom kan in die gevallen de metalen behuizing worden aangesloten op een capacitieve aanraakinvoerpen van een MCU om te detecteren of deze wordt aangeraakt. Zo ja, dan kan de LED worden ingeschakeld en kan het detectieproces worden gestart. Deze methode wordt hier niet gedemonstreerd omdat deze buiten het bestek van dit artikel valt.
Bij gebruik op 3,3V verbruikt de sensor ongeveer 130mA. Het duurt bijna 3 seconden om een vinger in te schrijven en 1 seconde om deze te identificeren. Als het aantal geregistreerde sjablonen echter kleiner is, zal de herkenningssnelheid hoog zijn. Voor meer details over de sensor kunt u dit gegevensblad van ADH-Tech raadplegen, de officiële fabrikant van de module.
GT511C3 vingerafdruksensor verbinden met Arduino
De GT511C3 FPS heeft twee voedingspinnen die kunnen worden gevoed door de + 5V-pin van Arduino en twee communicatiepinnen Rx en Tx die kunnen worden aangesloten op elke digitale pin van Arduino voor seriële communicatie. Daarnaast hebben we ook een drukknop en een LCD toegevoegd om de sensorstatus weer te geven. Het volledige schakelschema voor het koppelen van GT511C3 FPS met Arduino vindt u hieronder.
Omdat de Rx- en Tx-pinnen 3.3V tolerant zijn, hebben we een potentiële verdeler aan de Rx-zijde gebruikt om 5V naar 3.3V om te zetten. De 10k-weerstand en 22k-weerstand zetten het 5V-signaal van de Arduino Tx-pin om naar 3,3V voordat het de Rx-pin van de FPS bereikt. De sensor kan ook worden gevoed door 3.3V, maar zorg ervoor dat uw Arduino voldoende stroom kan leveren voor de sensor. We hebben het LCD-scherm in 4-bit-modus aangesloten, aangedreven door een 5V-pin van Arduino. Een drukknop is verbonden met pin D2 die, wanneer ingedrukt , het programma in de registratiemodus zet waar de gebruiker een nieuwe vinger kan registreren. Na het registreren blijft het programma in de scanmodus om te zoeken naar een vinger die de sensor aanraakt.
Arduino met GT511C3
Zoals eerder vermeld, communiceert de GT511C3 FPS via seriële communicatie, de sensor begrijpt hexadecimale code en voor elke hexadecimale code wordt een bepaalde bewerking uitgevoerd. U kunt het gegevensblad raadplegen om alle hexadecimale waarden en de bijbehorende functie te kennen als u geïnteresseerd bent. Maar gelukkig voor ons heeft bboyho al een bibliotheek gemaakt die direct met Arduino kan worden gebruikt om in te schrijven en vingerafdrukken te detecteren. De Github-bibliotheek voor GT511C3 FPS kan worden gedownload via de onderstaande link
GT511C3 Arduino-bibliotheek
De link zal een ZIP-bestand downloaden, je zou het dan aan je Arduino IDE moeten toevoegen door het commando Sketch -> Inclusief bibliotheek -> Add.ZIP Library te volgen. Nadat u de bibliotheek heeft toegevoegd, start u uw IDE opnieuw op en zou u de voorbeeldprogramma's voor GT511C3 FSP moeten kunnen vinden onder Bestand -> Voorbeeld -> Vingerafdrukscanner TTL zoals hieronder weergegeven
U zou vier voorbeeldprogramma's moeten zien, het knipperende programma zal de blauwe led op de FPS laten knipperen, het registratie- en ID-vingerprogramma kan worden gebruikt om de vingers overeenkomstig in te schrijven en te identificeren. Houd er rekening mee dat een vinger die eenmaal is geregistreerd, altijd door de module wordt onthouden, zelfs als deze is uitgeschakeld.
Het Serial Pass-through-programma kan naar de Arduino worden geüpload om de toepassing Demo_SDK.exe te gebruiken die we eerder in dit artikel hebben besproken. Om een vingerafdruksjabloon te verwijderen of om een kopie op uw computer op te slaan, kan deze SDK-applicatie worden gebruikt.
Programmering Arduino voor GT511C3 vingerafdruksensor
Ons doel is hier om een programma te schrijven dat een vinger registreert wanneer een knop wordt ingedrukt en het ID-nummer weergeeft van de vinger die al is geregistreerd. We zouden ook alle informatie op het LCD-scherm moeten kunnen weergeven om het project op zichzelf te laten staan. De volledige code om hetzelfde te doen, staat onderaan deze pagina. Hier breek ik hetzelfde op in kleine fragmenten om u te helpen het beter te begrijpen.
Zoals altijd beginnen we het programma met het opnemen van de vereiste bibliotheken, hier hebben we de FPS_GT511C3-bibliotheek nodig voor onze FPS-module, Software serieel om D4 en D5 te gebruiken voor seriële communicatie en Liquid crystal voor LCD-interfacing. Vervolgens moeten we vermelden op welke pinnen de FPS en LCD zijn aangesloten. Als je het schakelschema als zodanig had gevolgd, zijn het 4 en 5 voor FPS en D6 tot D11 voor LCD. De code voor hetzelfde wordt hieronder weergegeven
#include "FPS_GT511C3.h" // Download bibliotheek van https://github.com/sparkfun/Fingerprint_Scanner-TTL #include "SoftwareSerial.h" // Software seriële bibliotheek #include
Binnen de setup- functie geven we een inleidend bericht weer op het LCD-scherm en initialiseren we vervolgens de FPS-module. Het commando fps.SetLED (true) zal de blauwe LED op de sensor aanzetten, je kunt het uitschakelen met fps.SetLED (false) als het niet nodig is, omdat het de sensor zou opwarmen als het continu aan blijft staan. We hebben ook de pin D2 gemaakt als input pin en deze aangesloten op de interne pull-up weerstand om zo een drukknop op de pin aan te sluiten.
ongeldige setup () { Serial.begin (9600); lcd.begin (16, 2); // Initialiseer 16 * 2 LCD lcd.print ("GT511C3 FPS"); // Intro Message line 1 lcd.setCursor (0, 1); lcd.print ("met Arduino"); // Intro Message line 2 delay (2000); lcd.clear (); fps.Open (); // stuur een serieel commando om fp fps.SetLED (true) te initialiseren ; // zet LED aan zodat fps vingerafdruk pinMode (2, INPUT_PULLUP) kan zien ; // Maak verbinding met de interne pull-up-weerstand als invoerpin }
Binnen de void loop- functie moeten we controleren of de knop is ingedrukt, als we erop drukken, zullen we een nieuwe vinger registreren en zijn sjabloon opslaan met een ID-nummer door de enroll-functie te gebruiken. Zo niet, dan blijven we wachten tot er een vinger in de sensor wordt gedrukt. Als u hierop drukt, identificeren we de vingerafdruk door deze te vergelijken met alle geregistreerde vingerafdruksjablonen met behulp van de 1: N-methode. Zodra het ID-nummer is ontdekt, wordt welkom weergegeven, gevolgd door het ID-nummer. Als de vingerafdruk niet overeenkomt met een van de geregistreerde vingers, is het aantal ID's 200, in dat geval zullen we welkom onbekend weergeven.
if (digitalRead (2)) // If knop ingedrukt { Enroll (); // Registreer een vingerafdruk } // Identificeer vingerafdruktest als (fps.IsPressFinger ()) { fps.CaptureFinger (false); int id = fps.Identify1_N (); lcd.clear (); lcd.print ("Welkom:"); if (id == 200) lcd.print ("Unkown"); // Indien niet herkend lcd.print (id); vertraging (1000); }
De registratiefunctie zou drie voorbeeldinvoer moeten nemen om één vinger met succes te registreren. Eenmaal ingeschreven zal een sjabloon voor die specifieke vinger worden aangemaakt die niet zal worden verwijderd tenzij de gebruiker het via HEX-commando's dwingt. De code om een vinger te registreren, wordt hieronder weergegeven. De methode IsPressFinger wordt gebruikt om te controleren of een vinger wordt gedetecteerd, zo ja, dan wordt de afbeelding vastgelegd met CaptureFinger en ten slotte worden Enroll1, Enroll2 en Enroll3 gebruikt voor drie verschillende samples om één vinger succesvol te registreren. Het LCD-scherm geeft het ID-nummer van de vinger weer als het succesvol is geregistreerd, anders zou er een foutbericht met code worden weergegeven. Code 1 betekent dat de vingerafdruk niet duidelijk is vastgelegd en dat u het daarom opnieuw moet proberen. Code 2 is een geheugenfout-indicatie en code 3 geeft aan dat de vinger al is geregistreerd.
void Enroll () // Inschrijven functie van bibliotheek exmaple programma { int enrollid = 0; bool usedid = true; while (usedid == true) { usedid = fps.CheckEnrolled (enrollid); if (usedid == true) enrollid ++; } fps.EnrollStart (enrollid); // enroll lcd.print ("Inschrijven #"); lcd.print (enrollid); while (fps.IsPressFinger () == false) vertraging (100); bool bret = fps.CaptureFinger (true); int iret = 0; if (bret! = false) { lcd.clear (); lcd.print ("Vinger verwijderen"); fps.Enroll1 (); while (fps.IsPressFinger () == true) vertraging (100); lcd.clear (); lcd.print ("Druk nogmaals"); while (fps.IsPressFinger () == false) vertraging (100); bret = fps.CaptureFinger (true); if (bret! = false) { lcd.clear (); lcd.print ("Vinger verwijderen"); fps.Enroll2 (); while (fps.IsPressFinger () == true) vertraging (100); lcd.clear (); lcd.print ("Druk nog een keer"); while (fps.IsPressFinger () == false) vertraging (100); bret = fps.CaptureFinger (true); if (bret! = false) { lcd.clear (); lcd.print ("Vinger verwijderen"); iret = fps.Enroll3 (); if (iret == 0) { lcd.clear (); lcd.print ("Inschrijving geslaagd"); } anders { lcd.clear (); lcd.print ("Inschrijven mislukt:"); lcd.print (iret); } } else lcd.print ("Mislukt 1"); } else lcd.print ("Mislukt 2"); } else lcd.print ("Mislukt 3"); }
Werking van GT511C3 vingerafdruksensor met Arduino
Nu onze hardware en code klaar is, is het tijd om ons project te testen. Upload de code naar Arduino en zet hem aan, ik gebruik alleen de micro-usb-poort om het project van stroom te voorzien. Bij het opstarten zouden we het intro-bericht op het LCD-scherm moeten zien en dan zou het "Hi!.." moeten weergeven. Dit betekent dat FPS klaar is om naar een vinger te scannen. Als er op een geregistreerde vinger wordt gedrukt, staat er "Welkom" gevolgd door het ID-nummer van die vinger, zoals hieronder weergegeven.
Als een nieuwe vinger moet worden geregistreerd, kunnen we de drukknop gebruiken om in de registratiemodus te komen en de LCD-instructie volgen om een vinger in te schrijven. Nadat het registratieproces is voltooid, wordt op het LCD-scherm weer "Hallo!.." weergegeven om aan te geven dat het wordt gelezen om de vingers opnieuw te identificeren. De volledige werking is te vinden op de onderstaande video.
Van hieruit kun je hier nog veel interessante dingen over ontwikkelen met behulp van de Finger Print-sensormodule. Ik hoop dat je de tutorial hebt begrepen en het leuk vond om iets nuttigs te bouwen, als je vragen hebt, laat ze dan achter in het commentaargedeelte of gebruik de forums voor andere technische vragen.