- Необходимые компоненты
- Описание Проекта:
- Модуль FingerPrint:
- Работа системы посещаемости на основе отпечатков пальцев
- Принципиальная схема и описание проекта системы учета отпечатков пальцев
- Пояснение к коду:
Системы посещаемости обычно используются для обозначения присутствия в офисах и школах. От ручной отметки посещаемости в журналах посещаемости до использования высокотехнологичных приложений и биометрических систем, эти системы значительно улучшились. В наших предыдущих проектах мы рассмотрели несколько других проектов системы электронного учета рабочего времени с использованием микроконтроллера RFID и AVR, 8051 и raspberry Pi. В этом проекте мы использовали модуль отпечатков пальцев и Arduino для сбора и хранения данных и записей о посещаемости. Используя датчик отпечатков пальцев, система станет более безопасной для пользователей. В следующих разделах объясняются технические детали создания биометрической системы посещаемости на основе отпечатков пальцев с использованием Arduino.
Необходимые компоненты
- Ардуино -1
- Модуль отпечатков пальцев -1
- Кнопка - 4
- Светодиоды -1
- Резистор 1К -2
- Резистор 2.2К -1
- Мощность
- Соединительные провода
- Коробка
- Зуммер -1
- 16x2 ЖК-1
- Хлебная доска -1
- Модуль RTC -1
Описание Проекта:
В этой схеме системы посещаемости отпечатков пальцев мы использовали модуль датчика отпечатков пальцев.для аутентификации настоящего человека или сотрудника путем ввода их пальца в систему. Здесь мы используем 4 кнопки для регистрации, удаления, вверх / вниз. Клавиши ENROLL и DEL имеют тройные функции. Клавиша ENROLL используется для регистрации нового человека в системе. Поэтому, когда пользователь хочет зарегистрировать новый палец, ему / ей нужно нажать кнопку ENROLL, после чего ЖК-дисплей запросит идентификатор, где пользователь хочет сохранить изображение отпечатка пальца. Теперь, если в это время пользователь не хочет продолжать дальше, он / она может снова нажать кнопку ENROLL, чтобы вернуться. На этот раз клавиша ENROLL работает как клавиша возврата, т.е. клавиша ENROLL имеет как регистрацию, так и функцию возврата. Помимо ключа регистрации также используется для загрузки данных о посещаемости через последовательный монитор. Точно так же клавиша DEL / OK также имеет ту же двойную функцию, что и когда пользователь вводит новый палец,затем ему / ей нужно выбрать идентификатор пальца, используя еще две клавиши, а именно ВВЕРХ и ВНИЗ. Теперь пользователю нужно нажать клавишу DEL / OK (на этот раз эта клавиша ведет себя как ОК), чтобы продолжить с выбранным идентификатором. А ключ Del используется для сброса или удаления данных из EEPROM Arduino.
Модуль FingerPrint:
Модуль датчика отпечатков пальцев захватывает изображение отпечатка пальца, затем преобразует его в эквивалентный шаблон и сохраняет его в своей памяти в соответствии с выбранным идентификатором Arduino. Arduino управляет всем процессом, таким как создание изображения отпечатка пальца, преобразование его в шаблоны и сохранение в качестве идентификатора и т. Д. Вы можете проверить еще несколько проектов с помощью модуля отпечатков пальцев:
Система безопасности на основе отпечатков пальцев
Биометрическая машина для голосования по отпечаткам пальцев
Здесь мы добавили желтый светодиод, который показывает, что модуль отпечатков пальцев готов сделать снимок пальца. Зуммер также используется для различных показаний. Arduino является основным компонентом этой системы, он отвечает за управление всей системой.
Работа системы посещаемости на основе отпечатков пальцев
Работа над проектом системы учета отпечатков пальцевдовольно просто. Прежде всего, пользователю необходимо зарегистрировать отпечатки пальцев пользователя с помощью кнопок. Для этого пользователю необходимо нажать кнопку ENROLL, после чего на ЖК-дисплее появится запрос на ввод идентификатора отпечатка пальца, чтобы сохранить его в памяти по имени идентификатора. Итак, теперь пользователю необходимо ввести идентификатор, используя клавиши ВВЕРХ / ВНИЗ. После выбора идентификатора пользователю необходимо нажать кнопку ОК (клавишу DEL). Теперь ЖК-дисплей попросит приложить палец к модулю отпечатка пальца. Теперь пользователю нужно приложить палец к модулю отпечатка пальца, а затем модуль сделает снимок пальца. Теперь на ЖК-дисплее появится сообщение, что нужно удалить палец из модуля отпечатка пальца, и снова попросить приложить палец снова. Теперь пользователю нужно снова положить палец, и модуль берет изображение, конвертирует его в шаблоны и сохраняет по выбранному идентификатору в памяти модуля отпечатков пальцев.Теперь пользователь будет зарегистрирован, и он / она сможет кормить посещаемость, приложив палец к модулю отпечатков пальцев. Таким же способом все пользователи будут зарегистрированы в системе.
Теперь, если пользователь хочет удалить или удалить любой из сохраненных идентификаторов или отпечатков пальцев, ему / ей нужно нажать клавишу DEL. После нажатия кнопки удаления на ЖК-дисплее появится запрос на выбор идентификатора, который необходимо удалить. Теперь пользователю нужно выбрать ID и нажать кнопку OK (та же кнопка DEL). Теперь ЖК-дисплей сообщит вам, что отпечаток пальца был успешно удален.
Как работает посещаемость в этом проекте системы посещаемости по отпечаткам пальцев:
Всякий раз, когда пользователь кладет палец на модуль отпечатка пальца, модуль отпечатка пальца захватывает изображение пальца и выполняет поиск, связан ли какой-либо идентификатор с этим отпечатком пальца в системе. Если идентификационный номер отпечатка пальца обнаружен, на ЖК-дисплее отобразится сообщение «Посещаемость зарегистрировано», в то же время прозвучит один звуковой сигнал, а светодиод погаснет до тех пор, пока система снова не будет готова принять ввод.
Наряду с модулем отпечатков пальцев мы также использовали модуль RTC для времени и даты. Время и дата в системе идут непрерывно. Таким образом, Arduino берет время и дату всякий раз, когда настоящий пользователь кладет свой палец на отпечаток пальца, и сохраняет их в EEPROM в выделенном слоте памяти.
Здесь мы создали 5 пользовательских пространств в этой системе за 30 дней. При нажатии кнопки RESET в Arduino, а затем сразу после регистрации, ключ будет отвечать за загрузку данных посещаемости через последовательный монитор из памяти EEPROM Arduino.
Управление памятью:
У нас есть 1023 байта памяти в Arduino UNO, из которых у нас есть 1018 байт для хранения данных, и мы взяли данные о посещаемости 5 пользователей за 30 дней. И каждое посещение будет записывать время и дату, так что это становится 7-байтовыми данными.
Итак, общая необходимая память составляет
5 * 30 * 7 = 1050, поэтому здесь нам нужно больше 32 байта
Но если мы будем использовать 4 пользователя, то нам потребуется
4 * 30 * 7 = 840
Здесь мы провели демонстрацию этого проекта, взяв память 5 пользователей. Таким образом, мы не сможем хранить 32 байта или 5 записей посещаемости 5- го пользователя.
Вы можете попробовать это на 4-х пользователях, изменив несколько строк в коде. Я сделал комментарии в коде, где необходимы изменения.
Принципиальная схема и описание проекта системы учета отпечатков пальцев
Схема этого проекта системы посещаемости на основе отпечатков пальцев, как показано на диаграмме выше, довольно проста. Он имеет Arduino для управления всем процессом проекта, кнопку для регистрации, удаления, выбора идентификаторов и посещаемости, зуммер для предупреждения, светодиоды для индикации и ЖК-дисплей для инструктирования пользователя и отображения результирующих сообщений.
Как показано на принципиальной схеме, кнопка напрямую подключена к контакту A0 (ENROLL), A1 (DEL), A2 (UP), A3 (DOWN) Arduino относительно земли, а желтый светодиод подключен к цифровому контакту D7. Ардуино относительно земли через резистор 1 кОм. Rx и Tx модуля отпечатков пальцев напрямую подключены к последовательным выводам D2 и D3 (программный последовательный порт) Arduino. Питание 5В используется для питания модуля отпечатков пальцев, снятого с платы Arduino. Зуммер также подключен к выводу A5. ЖК-дисплей 16x2 настроен в 4-битном режиме, а его RS, EN, D4, D5, D6 и D7 напрямую подключены к цифровому выводу D13, D12, D11, D10, D9 и D8 Arduino.
Пояснение к коду:
Код системы посещаемости по отпечатку пальца для Arduino приведен в следующих разделах. Хотя код хорошо объясняется с комментариями, мы обсуждаем здесь несколько важных частей кода. Мы использовали библиотеку отпечатков пальцев для взаимодействия модуля отпечатков пальцев с платой Arduino.
Прежде всего, мы включаем файл заголовка и определяем входной и выходной контакты, а также определяем макрос и объявленные переменные. После этого в функции настройки мы даем направление определенному контакту и запускаем модуль ЖК-дисплея и отпечатка пальца.
После этого мы должны написать код для загрузки данных о посещаемости.
void setup () {задержка (1000); lcd.begin (16,2); Serial.begin (9600); pinMode (регистрация, INPUT_PULLUP); pinMode (вверх, INPUT_PULLUP); pinMode (вниз, INPUT_PULLUP); pinMode (del, INPUT_PULLUP); pinMode (совпадение, INPUT_PULLUP); pinMode (зуммер, ВЫХОД); pinMode (indFinger, ВЫХОД); digitalWrite (зуммер, LOW); если (digitalRead (enroll) == 0) {digitalWrite (зуммер, ВЫСОКИЙ); задержка (500); digitalWrite (зуммер, LOW); lcd.clear (); lcd.print («Подождите»); lcd.setCursor (0,1); lcd.print («Загрузка данных»);
После этого мы должны написать код для очистки данных посещаемости из EEPROM.
если (digitalRead (del) == 0) {lcd.clear (); lcd.print («Подождите»); lcd.setCursor (0,1); lcd.print ("Сброс….."); для (int i = 1000; i <1005; i ++) EEPROM.write (i, 0); для (int i = 0; i <841; i ++) EEPROM.write (i, 0xff); lcd.clear (); lcd.print («Сброс системы»); задержка (1000); }
После этого мы запускаем модуль отпечатков пальцев, отображая приветственное сообщение на ЖК-дисплее, а также запускаем модуль RTC.
После этого в функции цикла мы считываем время RTC и отображаем его на ЖК-дисплее.
void loop () {now = rtc.now (); lcd.setCursor (0,0); lcd.print ("Время->"); lcd.print (now.hour (), DEC); lcd.print (':'); lcd.print (now.minute (), DEC); lcd.print (':'); lcd.print (now.second (), DEC); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Дата->"); lcd.print (now.day (), DEC); lcd.print ('/'); lcd.print (now.month (), DEC); lcd.print ('/'); lcd.print (now.year (), DEC);
После этого, ожидая ввода отпечатка пальца и сравнения идентификатора захваченного изображения с сохраненными идентификаторами. Если совпадение происходит, переходите к следующему шагу. И проверка регистрации ключей del также
int result = getFingerprintIDez (); если (результат> 0) {digitalWrite (indFinger, LOW); digitalWrite (зуммер, ВЫСОКИЙ); задержка (100); digitalWrite (зуммер, LOW); lcd.clear (); lcd.print ("ID:"); lcd.print (результат); lcd.setCursor (0,1); lcd.print («Подождите…»); задержка (1000); посещаемость (результат); lcd.clear (); lcd.print («Посещаемость»); lcd.setCursor (0,1); lcd.print («Зарегистрировано»); задержка (1000); digitalWrite (indFinger, HIGH); возвращение; }
Данная функция void checkKeys () используется для проверки того, нажата ли клавиша Enroll или DEL и что делать, если она нажата. Если нажата клавиша ENROLL, вызывается функция Enroll () и нажимается клавиша DEL, вызывается функция delete () .
Функция void delet () используется для ввода идентификатора, который нужно удалить, и вызова функции uint8_t deleteFingerprint (uint8_t id) , которая удаляет палец из записей.
Данная функция используется для получения изображения отпечатка пальца и преобразования его в шаблон, а также сохранения по выбранному идентификатору в памяти модуля отпечатка пальца.
uint8_t getFingerprintEnroll () {int p = -1; lcd.clear (); lcd.print ("идентификатор пальца:"); lcd.print (id); lcd.setCursor (0,1); lcd.print («Поместите палец»); задержка (2000); в то время как (p! = FINGERPRINT_OK) {p = finger.getImage ();…………………
Данная функция используется для хранения времени и даты явки в отведенном слоте EEPROM.
недействительная посещаемость (int id) {int user = 0, eepLoc = 0; если (id == 1) {eepLoc = 0; пользователь = user1 ++; } иначе, если (id == 2) {eepLoc = 210; пользователь = пользователь2 ++; } else if (id == 3)………….
Данная функция используется для извлечения данных из EEPROM и отправки на последовательный монитор.
недействительная загрузка (int eepIndex) {если (EEPROM.read (eepIndex)! = 0xff) {Serial.print ("T->"); если (EEPROM.read (eepIndex) <10) Serial.print ('0'); Serial.print (EEPROM.read (eepIndex ++)); Serial.print (':'); если (EEPROM.read (eepIndex) <10) Serial.print ('0'); Serial.print (EEPROM.read (eepIndex ++));………….