В этом уроке мы узнаем о взаимодействии модуля датчика отпечатков пальцев GT511C3 с платой Arduino. В настоящее время на рынке доступно множество датчиков отпечатков пальцев, и мы использовали оптические датчики отпечатков пальцев R305/R307 в некоторых более ранних проектах, таких как система учета рабочего времени и биометрическая система безопасности. Но GT511C3 — это более продвинутый датчик отпечатков пальцев с высокой точностью и более быстрым временем отклика. Вместо оптического метода он использует метод обработки изображения камеры для обнаружения отпечатков пальцев.
В этой статье мы рассмотрим детали и характеристики датчика отпечатков пальцев GT511C3. Мы также узнаем, как использовать официальный SDK этого датчика отпечатков пальцев для регистрации, тестирования и удаления отпечатков пальцев. Помимо этого, мы подключим датчик отпечатков пальцев GT511C3 к Arduino с помощью библиотеки, а затем изучим метод регистрации и тестирования отпечатков пальцев.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Сканер отпечатков пальцев GT511C3.
- ЖК дисплей 16x2 (купить на AliExpress).
- Резисторы 1 кОм и 2 кОм.
- Кнопка (купить на AliExpress).
- Потенциометр 10 кОм (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Модуль датчика отпечатков пальцев GT511C3
Модуль датчика отпечатков пальцев GT511C3 сильно отличается от модулей емкостного и ультразвукового датчика отпечатков пальцев. Модуль GT511C3 использует оптический датчик для сканирования отпечатков пальцев. Это означает, что он полагается на изображения отпечатков пальцев пользователя для распознавания своего рисунка. Внутри модуля есть камера, которая делает снимки вашего отпечатка пальца. Эти отпечатки пальцев обрабатываются мощным встроенным микроконтроллером HOLTEK ARM Cortex M3. Этот модуль сканера может сохранять до 200 сканирований отпечатков пальцев и присваивает каждому отпечатку пальца идентификатор от 0 до 199.
Этот оптический сенсорный модуль разработан для легкой интеграции в приложения с последовательным интерфейсом UART. Он имеет два провода для TX и RX и два провода для питания. Датчик может работать от 3,3 В до 6 В, но коммуникационные контакты (Rx и Tx) допускают напряжение 3,3 В.
Модуль GT511C3 также может быть напрямую подключен к компьютеру через USB-соединение. При использовании USB-соединения этот модуль может управляться с помощью приложения SDK_DEMO.exe . Это приложение позволяет регистрировать/проверять/удалять отпечатки пальцев.
Особенности и характеристики модуля GT511C3
- Рабочее напряжение: от 3,3 В до 6 В постоянного тока.
- Рабочий ток: < 130 мА.
- Рабочая температура: ~20°C ~ +60°C.
- Процессор: Ядро ARM Cortex M3 (Holtek HT32F2755).
- Максимальное количество отпечатков пальцев: 200.
- Датчик: Оптический датчик.
- Последовательная связь: UART (по умолчанию: 9600 бод) и USB v1.1.
- Коэффициент ложного принятия (FAR): < 0,001%.
- Коэффициент ложного отклонения (FRR): < 0,01%.
- Время регистрации < 3 сек. (3 отпечатка пальца).
- Время идентификации: <1,0 секунды (200 отпечатков пальцев).
Распиновка модуля GT511C3
Модуль датчика отпечатков пальцев GT511C3 имеет 4 контакта.
Красный провод - это VCC, черный - это GND. Аналогично, зеленый - это Rx, а белый - это Tx.
Демонстрационное ПО GT511C3 SDK
Для использования демонстрационного ПО (программного обеспечения) сначала подключите сканер отпечатков пальцев к модулю USB-to-TTL. Ниже приведено подключение UART с модулем USB-to-TTL FTDI и сканером отпечатков пальцев GT511C3.
Подключите красный провод к VCC, черный к GND, зеленый к Tx и белый к Rx.
Для базовой работы с программным обеспечением загрузите демонстрационный комплект разработки программного обеспечения (SDK) здесь.
Чтобы использовать демо-версию SDK на компьютере:
- Загрузите SDK_DEMO.exe
- Разархивируйте папку.
- Перейдите в каталог, в который он был распакован.
- Откройте исполняемый файл SDK_DEMO.exe .
- Выберите COM-порт, указанный FTDI в раскрывающемся меню «Номер последовательного порта».
- В раскрывающемся меню «Скорость передачи данных» выберите значение 9600.
- Нажмите кнопку «Открыть» .
После открытия демо-SDK он будет выглядеть следующим образом:
После подключения отобразится версия прошивки и серийный номер устройства. И есть много опций, таких как «Зарегистрировать», «Проверить», «Идентифицировать», «Получить изображение», «Удалить», «Получить базу данных» и т. д. Вы можете попробовать все опции одну за другой. Самая важная опция — удаление отпечатка пальца, что можно сделать, просто нажав на опцию «Удалить все».
Взаимодействие модуля датчика отпечатков пальцев GT511C3 с Arduino
Схема подключения датчика отпечатков пальцев GT511C3 к плате Arduino приведена на следующем рисунке.
Мы использовали резисторы 2K и 1K для сети делителя напряжения, поскольку контакты UART датчика допускают напряжение 3,3 В. Подключите зеленый провод (Rx) к контакту Arduino D5, а белый провод (Tx) — к контакту Arduino D4.
Библиотека GT511C3 Arduino
Переходя к программной части, мы можем использовать библиотеку GT511C3 Arduino Library, написанную Sparkfun. Этот репозиторий содержит пример кода Arduino для работы с GT511C3.
Этот код был протестирован и с другими типами датчиков отпечатков пальцев. Вы можете скачать эту библиотеку и добавить ее в Arduino IDE.
Код регистрации отпечатков пальцев
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
#include "FPS_GT511C3.h" #include "SoftwareSerial.h" FPS_GT511C3 fps(4, 5); // digital pin 5(arduino Tx, fps Rx) // digital pin 4(arduino Rx, fps Tx) void setup() { Serial.begin(9600); //default baud rate delay(100); fps.Open(); fps.SetLED(true); Enroll(); } void Enroll() { int enrollid = 0; // find open enroll id bool okid = true; while (okid == true) { okid = fps.CheckEnrolled(enrollid); if (okid==true) enrollid++; } fps.EnrollStart(enrollid); // enroll Serial.print("Press finger to Enroll #"); Serial.println(enrollid); while(fps.IsPressFinger() == false) delay(100); bool bret = fps.CaptureFinger(true); int iret = 0; if (bret != false) { Serial.println("Remove finger"); fps.Enroll1(); while(fps.IsPressFinger() == true) delay(100); Serial.println("Press same finger again"); while(fps.IsPressFinger() == false) delay(100); bret = fps.CaptureFinger(true); if (bret != false) { Serial.println("Remove finger"); fps.Enroll2(); while(fps.IsPressFinger() == true) delay(100); Serial.println("Press same finger yet again"); while(fps.IsPressFinger() == false) delay(100); bret = fps.CaptureFinger(true); if (bret != false) { Serial.println("Remove finger"); iret = fps.Enroll3(); if (iret == 0) { Serial.println("Enrolling Successfull"); } else { Serial.print("Enrolling Failed with error code:"); Serial.println(iret); } } else Serial.println("Failed to capture third finger"); } else Serial.println("Failed to capture second finger"); } else Serial.println("Failed to capture first finger"); } void loop() { delay(100); } |
Вы можете загрузить код и протестировать его. После загрузки кодов откройте Serial Monitor (окно монитора последовательной связи), и вам будет предложено приложить палец для регистрации.
Код считывания отпечатков пальцев
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include "FPS_GT511C3.h" #include "SoftwareSerial.h" FPS_GT511C3 fps(4, 5); // digital pin 5(arduino Tx, fps Rx) // digital pin 4(arduino Rx, fps Tx) void setup() { Serial.begin(9600); //default baud rate delay(100); fps.Open(); fps.SetLED(true); } void loop() { // Identify fingerprint test if (fps.IsPressFinger()) { fps.CaptureFinger(false); int id = fps.Identify1_N(); if (id <200) { Serial.print("Verified ID:"); Serial.println(id); } else { Serial.println("Finger not found"); } } else { Serial.println("Please press finger"); } delay(100); } |
Вы можете снова загрузить код и проверить его. После загрузки кода откройте Serial Monitor (окно монитора последовательной связи), и вам будет предложено приложить палец. Вы можете приложить зарегистрированный палец, и отпечаток пальца будет считан модулем.
Портативный сканер отпечатков пальцев с Arduino и ЖК-дисплеем
Давайте добавим ЖК-дисплей, чтобы увидеть, как мы можем наблюдать данные последовательного монитора на ЖК-дисплее. Это схема для сопряжения датчика отпечатков пальцев GT511C3 и ЖК-дисплея с платой Arduino.
Мы использовали кнопку, подключенную к цифровому выводу 2 Arduino. При нажатии на нее датчик переходит в режим регистрации. Подключен ЖК-дисплей размером 16×2 символа, который запрограммирован на отображение всего происходящего при взаимодействии с датчиком отпечатков пальцев.
Для сборки можно использовать макетную плату. В противном случае можно использовать специальную печатную плату для этого проекта.
Исходный код программы
В части кодирования мы объединили код регистрации отпечатков пальцев и код проверки. Мы также добавили библиотеку для работы с ЖК дисплеем и изменили код в соответствии с этим.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
#include <LiquidCrystal.h> const int rs = 12, en = 11, d4 = 10, d5 = 9, d6 = 8, d7 = 7; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); #include "FPS_GT511C3.h" #include "SoftwareSerial.h" FPS_GT511C3 fps(4, 5); // digital pin 5(arduino Tx, fps Rx) void setup() { Serial.begin(9600); //default baud rate lcd.begin(16, 2); delay(100); fps.Open(); fps.SetLED(true); pinMode(2, INPUT_PULLUP); //Connect to internal pull up resistor as input pin lcd.setCursor(4, 0); lcd.print("GT511C3"); lcd.setCursor(3, 1); lcd.print("FPS Sensor"); delay(2500); } void loop() { read_fps(); if (digitalRead(2) == 0) //If button pressed { Enroll(); //Enroll a fingerprint } delay(100); } void Enroll() { int enrollid = 0; // find open enroll id bool okid = true; while (okid == true) { okid = fps.CheckEnrolled(enrollid); if (okid == true) enrollid++; } fps.EnrollStart(enrollid); // enroll Serial.print("Press finger to Enroll #"); Serial.println(enrollid); lcd.setCursor(0, 0); lcd.print("Put Finger to"); lcd.setCursor(0, 1); lcd.print("Enroll: #"); lcd.print(enrollid); while (fps.IsPressFinger() == false) delay(100); bool bret = fps.CaptureFinger(true); int iret = 0; if (bret != false) { Serial.println("Remove finger"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Remove finger"); fps.Enroll1(); while (fps.IsPressFinger() == true) delay(100); Serial.println("Press same finger again"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Put same finger"); lcd.setCursor(0, 1); lcd.print("again"); while (fps.IsPressFinger() == false) delay(100); bret = fps.CaptureFinger(true); if (bret != false) { Serial.println("Remove finger"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Remove finger"); fps.Enroll2(); while (fps.IsPressFinger() == true) delay(100); Serial.println("Press same finger yet again"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Put same finger"); lcd.setCursor(0, 1); lcd.print("yet again"); while (fps.IsPressFinger() == false) delay(100); bret = fps.CaptureFinger(true); if (bret != false) { Serial.println("Remove finger"); iret = fps.Enroll3(); if (iret == 0) { Serial.println("Enrolling Successfull"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Enrolling"); lcd.setCursor(0, 1); lcd.print("Successfull"); } else { Serial.print("Enrolling Failed with error code:"); Serial.println(iret); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Enrolling Failed"); lcd.setCursor(0, 1); lcd.print(iret); } } else Serial.println("Failed to capture third finger"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Failed Capturing"); lcd.setCursor(0, 1); lcd.print("third finger"); } else Serial.println("Failed to capture second finger"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Failed Capturing"); lcd.setCursor(0, 1); lcd.print("second finger"); } else Serial.println("Failed to capture first finger"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Failed Capturing"); lcd.setCursor(0, 1); lcd.print("first finger"); } void read_fps() { // Identify fingerprint test if (fps.IsPressFinger()) { fps.CaptureFinger(false); int id = fps.Identify1_N(); if (id < 200) { Serial.print("Verified ID:"); Serial.println(id); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Verified ID:"); lcd.setCursor(0, 1); lcd.print(id); } else { Serial.println("Finger not found"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Finger Not Found"); } } else { Serial.println("Please press finger"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Please Put "); lcd.setCursor(0, 1); lcd.print("Finger"); } delay(100); } |
Выберите плату Arduino Nano и порт COM и загрузите код. После завершения загрузки на ЖК-дисплее отобразится сообщение о необходимости приложить палец, а также загорится синий светодиод на модуле Fingerprint.
Тестирование портативного сканера отпечатков пальцев
Для регистрации пальца нажмите кнопку. Затем просканируйте палец 3 раза. Отпечаток пальца будет зарегистрирован.
Для проверки отпечатков пальцев приложите тот же палец к модулю отпечатков пальцев.
Итак, вот как можно зарегистрировать и считать данные отпечатков пальцев.