Руководство по модулю датчика отпечатков пальцев с Arduino (FPM10A)
Эта статья представляет собой вводное руководство по использованию модуля датчика отпечатков пальцев с Arduino. Мы покажем вам, как зарегистрировать новый ID отпечатка пальца и как найти совпадение отпечатка.
Смотрите видео-демонстрацию
Знакомство с модулем датчика отпечатков пальцев
Модули датчиков отпечатков пальцев, подобные тому, что показан на следующем рисунке, сделали распознавание отпечатков пальцев более доступным и простым для добавления в ваши проекты. Это означает, что сбор, регистрация, сравнение и поиск отпечатков пальцев выполняются очень просто.
Эти модули поставляются с FLASH-памятью для хранения отпечатков пальцев и работают с любым микроконтроллером или системой с TTL serial. Эти модули можно добавить в системы безопасности, дверные замки, системы учёта рабочего времени и многое другое.
Цены на этот датчик сильно варьируются от $10 до $50. Мы рекомендуем посмотреть модуль датчика отпечатков пальцев на Maker Advisor, где сравниваются цены в разных магазинах. Модули датчиков отпечатков пальцев, представленные на Maker Advisor, должны быть совместимы с этим руководством.
Характеристики
Вот характеристики модуля датчика отпечатков пальцев, который мы используем (вам следует проверить даташит вашего датчика или характеристики, предоставленные вашим поставщиком — они не должны сильно отличаться от этих):
Напряжение питания: DC 3.6–6.0 В
Потребляемый ток: <120 мА
Цвет подсветки: зелёный
Интерфейс: UART
Скорость передачи данных: 9600
Уровень безопасности: пять (от низкого к высокому: 1, 2, 3, 4, 5)
Коэффициент ложного допуска (FAR): <0.001% (уровень безопасности 3)
Коэффициент ложного отказа (FRR): <1.0% (уровень безопасности 3)
Возможность хранения 127 различных отпечатков пальцев
Распиновка датчика
Датчик имеет шесть выводов, которые обозначены на рисунке ниже.
Модуль датчика отпечатков пальцев, используемый в этом проекте, поставлялся с очень тонкими проводами, поэтому потребовалось припаять провода, удобные для макетной платы. Мы рекомендуем использовать разные цвета в соответствии с функцией вывода. В нашем случае:
DNC — белые провода
VCC — красный провод
TX — синий провод
RX — зелёный провод
GND — чёрный провод
В следующей таблице показано, как подключить датчик к Arduino.
Датчик отпечатков пальцев |
Arduino |
|---|---|
VCC |
5V (также работает с 3.3V) |
TX |
RX (цифровой пин 2, software serial) |
RX |
TX (цифровой пин 3, software serial) |
GND |
GND |
Установка библиотеки Adafruit Fingerprint Sensor
Самый простой способ управления модулем датчика отпечатков пальцев с помощью Arduino — использование библиотеки Adafruit для этого датчика. Следуйте приведённым ниже инструкциям для установки библиотеки:
Нажмите здесь, чтобы скачать библиотеку Adafruit Fingerprint Sensor. В папке Downloads у вас должен появиться .zip-файл
Распакуйте .zip-файл, и вы получите папку Adafruit-Fingerprint-Sensor-Library-master
Переименуйте папку из Adafruit-Fingerprint-Sensor-Library-master в Adafruit_Fingerprint_Sensor_Library
Переместите папку в папку библиотек вашей Arduino IDE
Наконец, перезапустите Arduino IDE
Регистрация нового отпечатка пальца
Подключив модуль датчика отпечатков пальцев к Arduino, выполните следующие шаги для регистрации нового отпечатка. Убедитесь, что вы предварительно установили библиотеку Adafruit Fingerprint Sensor.
1. В Arduino IDE перейдите в File > Examples > Adafruit Fingerprint Sensor Library > Enroll.
2. Загрузите код и откройте монитор порта на скорости 9600 бод.
3. Вам нужно ввести ID для отпечатка пальца. Так как это ваш первый отпечаток, введите 1 в верхнем левом углу, а затем нажмите кнопку Send.
4. Приложите палец к сканеру и следуйте инструкциям в мониторе порта.
Вам будет предложено приложить один и тот же палец к сканеру дважды. Если вы получите сообщение «Prints matched!», как показано ниже, ваш отпечаток пальца был успешно сохранён. Если нет, повторите процесс, пока не добьётесь успеха.
Сохраните столько отпечатков пальцев, сколько хотите, используя этот метод.
Поиск совпадения
Теперь у вас должно быть несколько отпечатков пальцев, сохранённых под разными ID. Чтобы найти совпадение с помощью датчика отпечатков пальцев, следуйте приведённым ниже инструкциям.
1. В Arduino IDE перейдите в File > Examples > Adafruit Fingerprint Sensor Library > Fingerprint и загрузите код на плату Arduino.
2. Откройте монитор порта на скорости 9600 бод. Вы должны увидеть следующее сообщение:
3. Приложите палец, который нужно идентифицировать, к сканеру.
4. В мониторе порта вы увидите ID, соответствующий отпечатку пальца. Также отображается уверенность (confidence) — чем выше уверенность, тем более похож отпечаток на сохранённый.
Пример проекта — отображение совпадения отпечатка на OLED-дисплее
В этом примере проекта мы зарегистрируем два отпечатка пальцев от двух разных людей. Затем мы отобразим приветственное сообщение в соответствии с найденным совпадением на OLED-дисплее.
Чтобы узнать больше об OLED-дисплее, прочитайте: Руководство по OLED-дисплею с Arduino
Необходимые компоненты
Для этого примера вам понадобятся следующие компоненты:
Arduino UNO — прочитайте Лучшие стартовые наборы Arduino
Вы можете использовать ссылки выше или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Схема подключения
Вот схема подключения, которую вы должны использовать для сборки цепи этого проекта.
Установка библиотек для OLED-дисплея 0.96 дюйма
Для управления OLED-дисплеем вам нужны библиотеки adafruit_SSD1306.h и adafruit_GFX.h. Следуйте приведённым ниже инструкциям для установки этих библиотек.
Откройте Arduino IDE и перейдите в Sketch > Include Library > Manage Libraries. Должен открыться менеджер библиотек.
Введите «SSD1306» в поле поиска и установите библиотеку SSD1306 от Adafruit.
После установки библиотеки SSD1306 от Adafruit введите «GFX» в поле поиска и установите библиотеку.
После установки библиотек перезапустите Arduino IDE.
Код
Перед загрузкой кода вам нужно зарегистрировать разные отпечатки пальцев от разных людей. Перейдите в раздел «Регистрация нового отпечатка пальца» выше, загрузите указанный код и следуйте инструкциям для регистрации двух отпечатков.
Затем измените код так, чтобы ID отпечатков соответствовали именам зарегистрированных людей — прокрутите страницу вниз для объяснения кода. Наконец, вы можете загрузить предоставленный код.
/*********
Rui Santos
Complete project details at https://randomnerdtutorials.com
*********/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
int fingerprintID = 0;
String IDname;
void setup(){
//Fingerprint sensor module setup
Serial.begin(9600);
// set the data rate for the sensor serial port
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
}
else {
Serial.println("Did not find fingerprint sensor :(");
while (1) { delay(1); }
}
//OLED display setup
Wire.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
//displays main screen
displayMainScreen();
}
void loop(){
displayMainScreen();
fingerprintID = getFingerprintIDez();
delay(50);
if(fingerprintID == 1 || fingerprintID == 3 || fingerprintID == 4 || fingerprintID == 5){
IDname = "Sara";
displayUserGreeting(IDname);
}
else if(fingerprintID == 2){
IDname = "Rui";
displayUserGreeting(IDname);
}
}
// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) return -1;
p = finger.image2Tz();
if (p != FINGERPRINT_OK) return -1;
p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return -1;
// found a match!
Serial.print("Found ID #");
Serial.print(finger.fingerID);
Serial.print(" with confidence of ");
Serial.println(finger.confidence);
return finger.fingerID;
}
void displayMainScreen(){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(7,5);
display.println("Waiting fingerprint");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(52,20);
display.println("...");
display.display();
delay(2000);
}
void displayUserGreeting(String Name){
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(0,0);
display.print("Hello");
display.setCursor(0,15);
display.print(Name);
display.display();
delay(5000);
fingerprintID = 0;
}
Импорт библиотек
Код начинается с импорта необходимых библиотек для записи на OLED-дисплей и создания объекта Adafruit_SSD1306 с именем display.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
Нам также нужно импортировать библиотеки, необходимые для датчика отпечатков пальцев: Adafruit_Fingerprint.h и SoftwareSerial.h.
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
Следующая строка устанавливает программный serial на пинах 2 и 3. Пин 2 как RX, а пин 3 как TX.
SoftwareSerial mySerial(2, 3);
Затем мы создаём объект Adafruit_Fingerprint с именем finger на ранее заданных serial-пинах.
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
Следующие две строки создают переменные для хранения ID отпечатка пальца и IDname.
int fingerprintID = 0;
String IDname;
setup()
В setup() инициализируются как датчик отпечатков пальцев, так и OLED-дисплей. Мы также выводим сообщение в монитор порта, чтобы знать, был ли датчик отпечатков пальцев успешно обнаружен.
void setup(){
//Fingerprint sensor module setup
Serial.begin(9600);
// set the data rate for the sensor serial port
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
}
else {
Serial.println("Did not find fingerprint sensor :(");
while (1) { delay(1); }
}
//OLED display setup
Wire.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
//displays main screen
displayMainScreen();
}
Рекомендуемое чтение: Руководство по I2C OLED-дисплею с Arduino
loop()
В loop() код отображает главный экран на OLED-дисплее — это выполняется функцией displayMainScreen(). Затем код постоянно проверяет входящие отпечатки пальцев. Если датчик находит сохранённый отпечаток, Arduino сохраняет соответствующий ID в переменной fingerprintID.
Затем код использует оператор if/else для проверки, какому ID соответствует отпечаток. Вам следует отредактировать следующие строки кода с соответствующими ID и именами.
if(fingerprintID == 1 || fingerprintID == 3 || fingerprintID == 4 || fingerprintID == 5){
IDname = "Sara";
displayUserGreeting(IDname);
}
else if(fingerprintID == 2){
IDname = "Rui";
Иногда датчик лучше распознаёт отпечаток пальца, если он сохранён несколько раз под разными ID. После идентификации имени ID OLED-дисплей показывает приветствие — это выполняется функцией displayUserGreeting().
Демонстрация
Теперь, когда человек с сохранённым отпечатком пальца прикладывает палец к датчику, на дисплее отображается приветственное сообщение.
Подведение итогов
В этой статье мы показали вам, как использовать модуль датчика отпечатков пальцев: регистрировать отпечатки и находить совпадения.
Иногда датчику сложно идентифицировать отпечаток пальца, если вы не прикладываете палец очень похоже на то, как вы его сохраняли — особенно женские отпечатки пальцев (мы понятия не имеем, почему так происходит). Мы заметили, что датчик работает лучше, если вы прикладываете палец к сканеру медленно.
По нашему мнению, модуль датчика отпечатков пальцев работает довольно хорошо и является доступным способом добавить биометрическое распознавание в ваши проекты.
Вам также могут понравиться следующие проекты:
Спасибо за чтение.