- Необходими материали
- Модул GT511C3 Сензор за пръстови отпечатъци (FPS)
- Свързване на сензор за пръстов отпечатък GT511C3 с Arduino
- Arduino с GT511C3
- Програмиране на Arduino за сензор за пръстов отпечатък GT511C3
- Работа на сензор за пръстови отпечатъци GT511C3 с Arduino
Biometrics се използва като надеждна система за удостоверяване от дълго време. Днес съществуват сложни биометрични системи, които могат да идентифицират човек по ритъма на сърдечния ритъм или дори по неговата ДНК. Други възможни методи включват разпознаване на глас, разпознаване на лица, сканиране на ириса и сканиране на отпечатъци. От които разпознаването на пръстови отпечатъци е най-широко използваният метод, можем да го намерим от проста система за посещаемост през смартфони до проверки за сигурност и много други.
В този урок ще научим как да използваме популярния сензор за пръстов отпечатък (FPS) GT511C3 с Arduino. Налични са много FPS и вече сме се научили как да ги използваме за изграждане на проекти като Attendance system, Voting Machine, система за сигурност и т.н. Но GT511C3 е по-усъвършенстван с висока точност и по-бързо време за реакция, така че ще научим как да го използваме с Arduino, за да регистрирате пръстови отпечатъци върху него и след това да откривате пръстовите отпечатъци, когато е необходимо. Така че нека да започнем.
Необходими материали
- Arduino Nano / UNO
- GT511C3 Сензор за пръстов отпечатък
- 16x2 LCD екран
- Пот - 10k и 1k, 10k, 22k резистори
- Натисни бутона
- Свързване на проводници
- Дъска за хляб
Модул GT511C3 Сензор за пръстови отпечатъци (FPS)
Преди да се потопите в проекта, нека да разберем за модула на сензора за пръстови отпечатъци GT511C3 и как работи. Този сензор е много различен от капацитивния и ултразвуков сензор за пръстови отпечатъци, които често се използват в нашите смартфони. В GT511C3 е оптичен сензор за пръстови отпечатъци, което означава, че разчита на снимки на вашия пръстов отпечатък да признае своята модел. Да, добре сте прочели, сензорът всъщност има камера вътре, която прави снимки на пръстовия ви отпечатък и след това обработва тези изображения с помощта на мощна вградена ARM Cortex M3 IC. Изображението по-долу показва предната и задната страна на сензора с изводи.
Както можете да видите, сензорът има камера (черно петно), заобиколена от сини светодиоди, тези светодиоди трябва да светят, за да направят ясно изображение на пръстовия отпечатък. След това тези изображения се обработват и преобразуват в двоична стойност с помощта на ARM микроконтролера, свързан с EEPROM. Модулът разполага и със зелен SMD светодиод за индикация на мощността. Всяко изображение с пръстов отпечатък е с размери 202x258 пиксела с разделителна способност 450 dpi. В сензора може да се запишат до запълването на 200 пръстови отпечатъци и за всеки пръстов отпечатък шаблон го задава форма ID 0-199. След това по време на откриване той може автоматично да сравнява сканирания пръстов отпечатък с всичките 200 шаблона и ако бъде намерено съвпадение, той дава идентификационния номер на този конкретен пръстов отпечатък с помощта на Smack Finger 3.0Алгоритъм на ARM микроконтролера. Сензорът може да работи от 3.3V до 6V и комуникира чрез серийна комуникация при 9600. За комуникационните щифтове (Rx и Tx) се казва, че са толерантни само 3.3V, но в таблицата с данни не е посочено много за това. Извеждането на GT511C3 FPS е показано по-долу.
Освен серийна комуникация, модулът може да бъде свързан директно и с компютър чрез USB връзка, използвайки щифтовете, показани на предишното изображение. Веднъж свързан към компютър, модулът може да се управлява с помощта на приложението SDK_DEMO.exe, което може да бъде изтеглено от връзката. Това приложение позволява на потребителя да регистрира / проверява / изтрива пръстови отпечатъци и също така да разпознава пръстови отпечатъци. Софтуерът може също да ви помогне да прочетете изображението, заснето от сензора, което си струва да опитате. Като алтернатива можете също да използвате този Софтуер, дори ако сензорът е свързан с Arduino, ще обсъдим това по-късно в тази статия.
Друга интересна характеристика на сензора е металната обвивка около чувствителната област. Както казах по-рано, трябва да се включи синият светодиод, за да работи сензорът. Но в приложения, при които сензорът трябва активно да изчака пръстов отпечатък, не е възможно да държите светодиода включен винаги, тъй като той ще нагрее сензора и по този начин ще го повреди. Следователно в тези случаи металната обвивка може да бъде свързана към капацитивен входящ щифт за докосване на MCU, за да открие дали се докосва. Ако отговорът е да, светодиодът може да се включи и да се стартира процесът на откриване. Този метод не е демонстриран тук, тъй като е извън обхвата на тази статия.
Когато работи при 3.3V, сензорът консумира около 130mA. Необходими са близо 3 секунди за записване на пръст и 1 секунда за идентифицирането му. Ако обаче броят на записаните шаблони е по-малък, скоростта на разпознаване ще бъде висока. За повече подробности относно сензора можете да се обърнете към този лист с данни от ADH-Tech, който е официален производител на модула.
Свързване на сензор за пръстов отпечатък GT511C3 с Arduino
GT511C3 FPS има два захранващи щифта, които могат да се захранват от + 5V щифт на Arduino и два комуникационни щифта Rx и Tx, които могат да бъдат свързани към всеки цифров щифт на Arduino за серийна комуникация. Освен това сме добавили и бутон и LCD за показване на състоянието на сензора. Пълната схема на схемата за свързване на GT511C3 FPS с Arduino може да бъде намерена по-долу.
Тъй като щифтовете Rx и Tx са толерантни към 3.3V, ние използвахме потенциален разделител от страната на Rx, за да преобразуваме 5V в 3.3V. 10k резисторът и 22k резистор преобразуват 5V сигнала от пина на Arduino Tx в 3.3V, преди да достигне Rx щифта на FPS. Сензорът може да се захранва и от 3.3V, но се уверете, че вашият Arduino може да подава достатъчно ток за сензора. Свързахме LCD в 4-битов режим, захранван от 5V щифт на Arduino. Към пин D2 е свързан бутон, който при натискане ще постави програмата в режим на записване, където потребителят може да регистрира нов пръст. След записване програмата ще остане в режим на сканиране, за да сканира за пръсти, докосващи сензора.
Arduino с GT511C3
Както бе споменато по-рано, GT511C3 FPS комуникира чрез серийна комуникация, сензорът разбира шестнадесетичен код и за всеки шестнадесетичен код се извършва определена операция. Можете да проверите листа с данни, за да знаете всички шестнадесетични стойности и съответната му функция, ако се интересувате. Но за щастие за нас bboyho вече създаде библиотека, която може да се използва директно с Arduino за записване и откриване на отпечатъци от пръсти. Библиотеката Github за GT511C3 FPS може да бъде изтеглена от връзката по-долу
GT511C3 Arduino библиотека
Връзката ще изтегли ZIP файл, след което ще трябва да го добавите към вашия ID на Arduino, като следвате командата Sketch -> Include Library -> Add.ZIP Library. След като добавите библиотеката, рестартирайте вашата IDE и ще можете да намерите примерните програми за GT511C3 FSP под Файл -> Пример -> Скенер за пръстови отпечатъци TTL, както е показано по-долу
Трябва да видите четири примерни програми, програмата за мигане ще премигва със синия светодиод на FPS, програмата за записване и идентификация на пръсти може да се използва за записване и идентифициране на пръстите по съответния начин. Имайте предвид, че веднъж регистриран пръст винаги ще бъде запомнен от модула, дори ако е изключен.
Програмата Serial Pass-through може да бъде качена в Arduino, за да използва приложението Demo_SDK.exe , което обсъдихме по-рано в тази статия. За да изтриете всеки шаблон за пръстови отпечатъци или да запазите копие на вашия компютър, може да се използва това SDK приложение.
Програмиране на Arduino за сензор за пръстов отпечатък GT511C3
Нашата цел тук е да напишем програма, която ще регистрира пръст при натискане на бутон и ще покаже идентификационния номер на пръста, който вече е записан. Също така трябва да можем да показваме цялата информация на LCD дисплея, за да може проектът да бъде самостоятелен. В пълния код, за да направи същото се даде в долната част на тази страница. Тук разбивам същото на малки фрагменти, за да ви помогна да разберете по-добре.
Както винаги започваме програмата, като включваме необходимите библиотеки, тук ще ни е необходима библиотеката FPS_GT511C3 за нашия FPS модул, сериен софтуер за използване на D4 и D5 за последователна комуникация и течен кристал за LCD взаимодействие. След това трябва да споменем към кои изводи е свързан FPS и LCD. Ако бяхте следвали схемата като такава, тя е 4 и 5 за FPS и D6 до D11 за LCD. Кодът за същото е показан по-долу
#include "FPS_GT511C3.h" // Вземете библиотека от https://github.com/sparkfun/Fingerprint_Scanner-TTL #include "SoftwareSerial.h" // Софтуерна серийна библиотека #include
Вътре във функцията за настройка показваме уводно съобщение на LCD и след това инициализираме FPS модула. Командата fps.SetLED (true) ще включи синия светодиод на сензора, можете да го изключите чрез fps.SetLED (false), когато не е необходима, тъй като би загряла сензора, ако го оставите непрекъснато включен. Също така направихме щифта D2 като входен щифт и го свързахме с вътрешен издърпващ резистор, за да свържем бутон към щифта.
void setup () { Serial.begin (9600); lcd.begin (16, 2); // Инициализиране на 16 * 2 LCD lcd.print ("GT511C3 FPS"); // Входен ред за съобщение 1 lcd.setCursor (0, 1); lcd.print ("с Arduino"); // Забавяне на встъпителния ред 2 (2000); lcd.clear (); fps.Open (); // изпращане на серийна команда за инициализиране на fp fps.SetLED (вярно); // включване на LED, така че кадрите в секунда да виждат pinMode на пръстовия отпечатък (2, INPUT_PULLUP); // Свързване към вътрешен издърпващ резистор като входен щифт }
Във функцията void loop трябва да проверим дали бутонът е натиснат, ако бъде натиснат, ще запишем нов пръст и ще запазим неговия шаблон с идентификационен номер, като използваме функцията за записване. Ако не, ще продължим да чакаме да се натисне пръст в сензора. Ако бъде натиснат, ще идентифицираме пръстовия отпечатък, като го сравним с всички записани шаблони за пръстови отпечатъци, използвайки метода 1: N. След като идентификационният номер бъде открит, ще покажем добре дошли, последвани от идентификационния номер. Ако отпечатъкът на пръста не съвпада с нито един от записаните пръсти, броят на идентификаторите ще бъде 200, в този случай ще покажем неизвестен добре дошъл.
if (digitalRead (2)) // Ако бутонът е натиснат { Enroll (); // Записване на пръстов отпечатък } // Идентифициране на тест за пръстови отпечатъци ако (fps.IsPressFinger ()) { fps.CaptureFinger (false); int id = fps.Identify1_N (); lcd.clear (); lcd.print ("Добре дошли:"); if (id == 200) lcd.print ("Unkown"); // Ако не е разпознат lcd.print (id); забавяне (1000); }
Функцията за записване ще трябва да вземе три примерни входа, за да запише успешно един пръст. След като бъде регистриран, ще бъде създаден шаблон за този конкретен пръст, който няма да бъде изтрит, освен ако потребителят го е принудил чрез HEX команди. Кодът за записване на пръст е показан по-долу. Методът IsPressFinger се използва за проверка дали е открит пръст, ако да, изображението се заснема с помощта на CaptureFinger и след това Enroll1, Enroll2 и Enroll3 се използва за три различни проби за успешно записване на един пръст. Дисплеят показва идентификационния номер на пръста, ако е записан успешно, иначе ще покаже съобщение за грешка с код. Код 1 означава, че отпечатъкът на пръста не е бил заснет ясно и следователно трябва да опитате отново. Код 2 е индикация за повреда на паметта, а код 3 означава, че пръстът вече е регистриран.
void Enroll () // Функция за записване от примерната програма на библиотеката { int enrollid = 0; bool usedid = вярно; while (usedid == true) { usedid = fps.CheckEnroll (enrollid); if (usedid == true) enrollid ++; } fps.EnrollStart (enrollid); // записване lcd.print ("Enroll #"); lcd.print (enrollid); докато (fps.IsPressFinger () == false) забавяне (100); bool bret = fps.CaptureFinger (вярно); int iret = 0; if (bret! = false) { lcd.clear (); lcd.print ("Премахване на пръста"); fps.Enroll1 (); докато (fps.IsPressFinger () == true) забавяне (100); lcd.clear (); lcd.print ("Натиснете отново"); докато (fps.IsPressFinger () == false) забавяне (100); bret = fps.CaptureFinger (вярно); if (bret! = false) { lcd.clear (); lcd.print ("Премахване на пръста"); fps.Enroll2 (); докато (fps.IsPressFinger () == true) забавяне (100); lcd.clear (); lcd.print ("Натиснете още веднъж"); докато (fps.IsPressFinger () == false) забавяне (100); bret = fps.CaptureFinger (вярно); if (bret! = false) { lcd.clear (); lcd.print ("Премахване на пръста"); iret = fps.Enroll3 (); if (iret == 0) { lcd.clear (); lcd.print ("Записване на успех"); } else { lcd.clear (); lcd.print ("Неуспешно записване:"); lcd.print (iret); } } else lcd.print ("Неуспешно 1"); } else lcd.print ("Неуспешно 2"); } else lcd.print ("Неуспешно 3"); }
Работа на сензор за пръстови отпечатъци GT511C3 с Arduino
Сега, когато нашият хардуер и код са готови, е време да тестваме нашия проект. Качете кода на Arduino и го включете, аз просто използвам micro-usb порта за захранване на проекта. При зареждане трябва да видим въвеждащото съобщение на LCD дисплея и след това да се покаже „Здравей!..“. Това означава, че FPS е готов да сканира за пръст, ако се натисне някой регистриран пръст, ще се изписва „Добре дошли“, последван от идентификационния номер на този пръст, както е показано по-долу.
Ако трябва да се регистрира нов пръст, тогава можем да използваме бутона, за да влезем в режим на записване и да следваме инструкциите на LCD, за да регистрираме пръст. След като процесът на записване завърши, LCD дисплеят ще покаже отново „Здравей!“, За да покаже, че е прочетен, за да идентифицира отново пръстите. В пълна обработка може да се намери в клипа връзка по-долу.
Оттук можете да развиете много интересни неща отгоре, като използвате сензорния модул Finger Print. Надявам се, че сте разбрали урока и сте се радвали да създадете нещо полезно, ако имате някакви въпроси, оставете ги в раздела за коментари или използвайте форумите за други технически въпроси.