Иван Иванов   9 февраля в 00:15

Система учета посетителей на основе Ардуино и модуля R305

Делаем систему учета посетителей на основе модуля отпечатков пальцев R305 и платы Arduino Uno или Mega.

О проекте

Сегодня мы поговорим о том как создать систему управления посещаемостью на основе биометрических данных, которая использует отпечаток большого пальца пользователей для оценки посещаемости. Такого рода система управления посещаемостью имеет решающее значение для многих учреждений. В настоящее время почти все компании автоматизировали свой процесс управления посещаемостью.

В этом уроке мы поймем как создать собственную систему управления посещаемостью, используя Arduino, датчик отпечатков пальцев и модуль SD-карты. Реализация проекта достаточно простая и не требует много времени и денег. Более того, итоговое устройство очень полезно для нашей повседневной жизни и может пригодиться во многих местах.

Комплектующие

По традиции перейдем к комплектующим и программному обеспечению, которое мы будем использовать для создания проекта учета посетителей на Ардуино:

  • Arduino Uno (либо Arduino Mega)
  • Модуль отпечатков пальцев R305/R307
  • ЖК дисплей 16x2 (LCD) с модулем I2C
  • Кнопки x 2
  • Светодиоды x 2
  • Резисторы 10 кОм x 2
  • Макетная плата
  • Провода-перемычки

Требуемые библиотеки:

Программное обеспечение:

Схема соединения

Несмотря на то, что схема подключения может выглядеть сложной на первый взгляд, ее довольно просто собрать.

Для получения пользовательского ввода сканер отпечатков пальцев взаимодействует напрямую с Arduino. ЖК-модуль и светодиоды показывают выходные данные или результат. Модуль SD-карты сохраняет отчет о посещаемости на SD-карте. Две или более кнопок могут использоваться для управления различными процессами.

R305 сканнер и Arduino

Сканер (модуль) отпечатков пальцев R305/R307 имеет интерфейс TTL UART, который можно напрямую подключить к Arduino UART.

Модуль SD-карты и Arduino

Модуль SD-карты связывается с Arduino по протоколу связи последовательного периферийного интерфейса (SPI). Его можно просто подключить к аппаратным SPI-контактам Arduino.

ЖК-дисплей с модулем I2C и Arduino

Как следует из названия, ЖК-модуль связывается с Arduino через I2C-связь.

Светодиоды и кнопки

Два светодиода и кнопки могут быть соединены так, как показано ниже.

Обзор системы сканера отпечатков пальцев

Блок-схема ниже показывает примерный функционал нашего будущего устройства.

Датчик отпечатков пальцев и кнопки работают как модули ввода. Здесь я использую две кнопки для регистрации и идентификации процессов. Когда мы хотим зарегистрировать нового пользователя, необходимо нажать кнопку регистрации, чтобы начать процесс регистрации. После нажатия кнопки посещаемости, палец будет верифицирован, чтобы отметки посещения.

ЖК-модули и светодиоды действуют как выходные модули. Они будут выводить сообщения и ошибки, чтобы визуально видеть процесс. Отпечатки пальцев сохраняются во флэш-памяти датчика отпечатков пальцев.

Для понимания. Модуль R305 сам выполняет сбор, сравнение и поиск отпечатков пальцев.

Идентификатор проверенного отпечатка пальца сохраняется в текстовом файле на SD-карте. Мы можем использовать этот отчет о посещаемости, изъяв карту microSD из модуля.

Код программы

Код Arduino для этого проекта довольно длинный. Вы можете скачать файл программы в архиве:

Мы разберем код ниже. Он состоит из основных процессов:

  1. Регистрация по отпечаткам пальцев;
  2. Распознавание отпечатков пальцев и маркировка посещаемости.

Процесс регистрации отпечатков пальцев

Все функции датчика отпечатков пальцев контролируются библиотекой датчика отпечатков пальцев от Adafruit. Библиотека содержит методы и функции для управления сканером отпечатков пальцев.

Мы создаем функцию getFingerprintEnroll() для регистрации новых отпечатков пальцев. При вызове этой функции датчик получает два скана отпечатка пальца (изображений отпечатка пальца). Затем изображение отпечатка пальца сохраняется (путем объединения этих двух сканов) в одну из 256 записей во встроенной базе данных. Вы всегда будете получать сообщение об ошибке, если изображение не было правильно снято из-за ошибок размещения пальцев.

// если кнопка регистрации была нажата
  if (buttonStateP1 == HIGH ){
    
    digitalWrite(ledBlue,HIGH);
    digitalWrite(ledRed,HIGH);

    lcd.setCursor(3,0);
    lcd.print("Registration Process");

    finger.getTemplateCount();  
    Serial.print("Sensor contains "); 
    Serial.print(finger.templateCount); 
    Serial.println(" templates");  
    id = finger.templateCount + 1;
    Serial.println(id); 
    getFingerprintEnroll();

    buttonStateP1 = 0;
    
  //if the attendance button has been pressed  
  }else if(buttonStateP2 == HIGH){

Как видите, сначала нужно понять количество отпечатков, которое уже сохранено в датчике. Мы можем получить это число с помощью функции getTemplateCount(). Поскольку нумерация позиций хранения начинается с 0, установите идентификатор, увеличив число на 1. Идентификационный номер является глобальной переменной. Таким образом, присвоенный идентификатор будет использоваться в функции getFingerprintEnroll() при сохранении отпечатка пальца.

Процесс распознавания отпечатков пальцев и маркировки

В процессе маркировки посещаемости вызывается функция getFingerprintIDez(). Эта функция получает отпечаток пальца пользователя и проверяет его с помощью уже сохраненных отпечатков пальцев. Если палец отсутствует в базе данных, сканер возвращает код ошибки.

Если палец совпадает, он вернет идентификационный номер пользователя. Мы преобразуем идентификационные номера в строковую переменную, чтобы сохранить их на SD-карте. Наконец,получаем отчет о посещаемости:

User ID 12
User ID 9
User ID 54
User ID 23
User ID 75
User ID 2
User ID 7
User ID 36
User ID 11
User ID 42

Конечный продукт этого проекта может быть собран как портативное устройство. В процессе регистрации пользователь должен предоставить свой отпечаток пальца два раза. Это означает, что каждый пользователь должен убрать палец со сканера и снова приложить к датчику.

Нужно нажать кнопку запуска (синяя кнопка), чтобы начать процесс. На ЖК-дисплее появится сообщение «Поместите палец», что сообщает нам о начале процесса.

Затем пользователь должен положить палец на сканер, чтобы зафиксировать себя как посетителя.

Как только отпечаток пальца совпадет, появится сообщение «Present» (Присутствует) и загорится синий светодиод.

Если совпадения нет, будет мигать красный светодиод и на дисплее появится сообщение об ошибке «Отпечаток не найден».

Хотя это полноценный проект, всегда есть возможности для улучшения. Давайте посмотрим что можно улучшить:

  • R305 имеет возможность хранить до 256 шаблонов отпечатков пальцев в своей памяти. Если вашему проекту требуется больше памяти, то есть несколько других альтернатив, таких как сканер отпечатков пальцев SparkFun GT521F52.
  • В этом проекте отчет о посещаемости представляет собой текстовый документ с идентификационным номером пользователя. Однако взаимодействие с модулем RTC также даст вам зафиксировать время прибытия пользователя.
  • Если вы хотите IoT-решение для хранения данных, вы можете заменить плату Arduino на ESP32 или Raspberry Pi и использовать облачное хранилище (как пример - база данных MySQL).

Это всё. На этом мы закончили создание системы посещаемости на основе отпечатков пальцев с помощью Arduino. Спасибо за урок Дженани Вичесинге с проекта maker.pro.