- Необходимые компоненты
- Принципиальная электрическая схема
- Как работает система посещаемости отпечатков пальцев
- Code Explanation
По мнению исследователей из Университета штата Пен, люди с большей вероятностью будут доверять машинам, а не людям, что, вероятно, очевидно из того, что мы так легко открываем наш пин-код банкомата. Сегодня в мире, где ИИ, машинное обучение, чат-боты, умные динамики, роботы и т. Д. Активно развиваются, эта синергия между людьми и роботами будет только усиливаться. Сегодня, от сборщиков платы за проезд на мосту до кассиров, все вокруг нас заменяется машинами, чтобы работа выполнялась проще и эффективнее. Чтобы идти в ногу с этапом, в этом проекте мы построим биометрическую систему посещаемости с использованием микроконтроллеров AVR, чтобы заменить ручную процедуру приема посещаемости. Эта система будет более надежной и эффективной, так как позволит сэкономить время и избежать ловушек.
Системы учета отпечатков пальцев уже доступны прямо на рынке, но что может быть интереснее, чем их создание? Ранее мы также создали широкий спектр систем посещаемости, от простой системы посещаемости на основе RFID до биометрической системы посещаемости на основе Интернета вещей с использованием Arduino и Raspberry Pi. В этом проекте мы использовали модуль отпечатков пальцев и AVR (atmega32) для регистрации посещаемости. Используя датчик отпечатков пальцев, система станет более безопасной для пользователей. В следующих разделах объясняются технические детали создания биометрической системы посещаемости на основе отпечатков пальцев с использованием AVR.
Необходимые компоненты
- Атмега32 -1
- Модуль отпечатков пальцев (r305) -1
- Кнопочные или мембранные кнопки - 4
- Светодиоды -2
- Резистор 1К -2
- Резистор 2.2К -1
- Адаптер питания 12 В
- Соединительные провода
- Зуммер -1
- 16x2 ЖК-1
- Печатная плата или хлебная доска
- Модуль RTC (ds1307 или ds3231) -1
- LM7805 -1
- 1000 мкФ, 10 мкФ конденсатор -1
- Burgstips мужской женский
- DC JACK (необязательно)
- BC547 Транзистор -1
В этой схеме системы посещаемости отпечатков пальцев мы использовали модуль датчика отпечатков пальцев для аутентификации личности человека или сотрудника путем ввода их отпечатков пальцев в систему. Здесь мы используем 4 кнопки для регистрации, удаления, увеличения и уменьшения данных отпечатков пальцев . Ключ 1 используется для регистрации нового человека в системе. Поэтому, когда пользователь хочет зарегистрировать новый палец, ему / ей нужно нажать клавишу 1, затем ЖК-дисплей просит его / ее приложить палец к датчику отпечатка пальца два раза, а затем запрашивает идентификатор сотрудника. Точно так же клавиша 2 имеет двойную функцию, например, когда пользователь вводит новый палец, ему / ей нужно выбрать идентификатор отпечатка пальца.используя еще две клавиши, а именно 3 и 4. Теперь пользователю нужно нажать клавишу 1 (на этот раз эта клавиша ведет себя как OK), чтобы продолжить с выбранным идентификатором. И ключ 2 также используется для сброса или удаления данных из EEPROM микроконтроллера.
Модуль датчика отпечатков пальцев захватывает изображение отпечатка пальца, затем преобразует его в эквивалентный шаблон и сохраняет их в своей памяти в соответствии с выбранным микроконтроллером идентификатором. Всем процессом управляет микроконтроллер, как будто снимается отпечаток пальца; преобразовать его в шаблоны и сохранить в качестве идентификатора и т. д. Вы также можете ознакомиться с другими проектами датчиков отпечатков пальцев, в которых мы создали систему безопасности датчика отпечатка пальца и машину для голосования по датчику отпечатка пальца.
Принципиальная электрическая схема
Полная принципиальная схема проекта системы посещаемости на основе отпечатков пальцев показана ниже. Он имеет микроконтроллер Atmega32 для управления всем процессом проекта. Нажимная или мембранная кнопка используется для регистрации, удаления, выбора идентификаторов для посещаемости, зуммер используется для индикации и ЖК-дисплея 16x2, чтобы проинструктировать пользователя о том, как использовать машину.
Как показано на принципиальной схеме, нажимные или мембранные кнопки напрямую подключены к контактам PA2 (клавиша ENROLL 1), PA3 (клавиша DEL 2), PA0 (клавиша UP 3), PA1 (клавиша DOWN 4) микроконтроллера относительно земли. или PA4. А светодиод подключен к выводу PC2 микроконтроллера относительно земли через резистор 1 кОм. Rx и Tx модуля отпечатков пальцев напрямую подключены к последовательным выводам PD1 и PD3 микроконтроллера. Источник 5 В используется для питания всей схемы с помощью регулятора напряжения LM7805который питается от адаптера постоянного тока 12 В. К выводу PC3 также подключен зуммер. ЖК-дисплей 16x2 настроен в 4-битном режиме, и его RS, RW, EN, D4, D5, D6 и D7 напрямую подключены к выводу PB0, PB1, PB2, PB4, PB5, PB6, PB7 микроконтроллера. Модуль RTC подключается к I2Cpin PC0 SCL и PC1 SDA. А PD7 используется как программный вывод UART Tx для получения текущего времени.
Как работает система посещаемости отпечатков пальцев
Всякий раз, когда пользователь кладет палец на модуль отпечатка пальца, модуль отпечатка пальца захватывает изображение пальца и выполняет поиск, связан ли какой-либо идентификатор с этим отпечатком пальца в системе. Если идентификационный номер отпечатка пальца обнаружен, то на ЖК-дисплее отобразится сообщение о посещаемости, и в то же время прозвучит один звуковой сигнал.
Наряду с модулем отпечатков пальцев мы также использовали модуль RTC для данных времени и даты. Время и дата в системе работают постоянно, поэтому микроконтроллер может принимать время и дату всякий раз, когда настоящий пользователь кладет свой палец на датчик отпечатков пальцев, а затем сохраняет их в EEPROM в выделенном слоте памяти.
Пользователь может загрузить данные о посещаемости, нажав и удерживая кнопку 4. Подключите источник питания к цепи и подождите, и через некоторое время на ЖК-дисплее отобразится «Загрузка….». И пользователь может видеть данные посещаемости через последовательный монитор, здесь в этом коде программное обеспечение UART запрограммировано на выводе PD7-pin20 как Tx для отправки данных на терминал. Пользователю также нужен преобразователь TTL в USB, чтобы просматривать данные о посещаемости через последовательный терминал.
And if the user wants to delete all the data then he/she has to press and hold key 2 and then connect power and wait for some time. Now after some time LCD will show ‘Please wait…’ and then ‘Record Deleted successfully’. These two steps are not shown in demonstration video given in the end.
Code Explanation
Complete code along with the video for this biometric attendance system is given at the end. Code of this project is a little bit lengthy and complex for beginner. Hence we have tried to take descriptive variables to make good readability and understanding. First of all, we have included some necessary header file then written macros for different-different purpose.
#define F_CPU 8000000ul #include #include
After this, we have declared some variables and arrays for fingerprint command and response. We have also added some functions for fetching and setting data to RTC.
void RTC_stp() { TWCR=(1<
Then we have some functions for LCD which are responsible to drive the LCD. LCD driver function is written for 4-bit mode drive. Followed by that we also have some UART driver functions which are responsible for initializing UART and exchanging data between fingerprint sensor and microcontroller.
void serialbegin() { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB=(1<
Now we have some more UART function but they are software UART. It is used for transferring saved data to the computer via serial terminal. These functions are delay-based and don’t use any type of interrupt. And for UART only tx signal will work and we have hardcoded baud rate for soft UART as 9600.
void SerialSoftWrite(char ch) { PORTD&=~(1<<7); _delay_us(104); for(int i=0;i<8;i++) { if(ch & 1) PORTD-=(1<<7); else PORTD&=~(1<<7); _delay_us(104); ch>>=1; } PORTD-=(1<<7); _delay_us(104); } void SerialSoftPrint(char *str) { while(*str) { SerialSoftWrite(*str); str++; } }
Followed by that we have functions that are responsible for displaying the RTC time in the LCD. The below given functions are used for writing attendance data to EEPROM and reading attendance data from EEPROM.
int eeprom_write(unsigned int add,unsigned char data) { while(EECR&(1<
The below function is responsible for reading fingerprint image and convert them in template and matching with already stored image and show result over LCD.
void matchFinger() { // lcdwrite(1,CMD); // lcdprint("Place Finger"); // lcdwrite(192,CMD); // _delay_ms(2000); if(!sendcmd2fp((char *)&f_detect,sizeof(f_detect))) { if(!sendcmd2fp((char *)&f_imz2ch1,sizeof(f_imz2ch1))) { if(!sendcmd2fp((char *)&f_search,sizeof(f_search))) { LEDHigh; buzzer(200); uint id= data; id<<=8; id+=data; uint score=data; score<<=8; score+=data; (void)sprintf((char *)buf1,"Id: %d",(int)id); lcdwrite(1,CMD); lcdprint((char *)buf1); saveData(id); _delay_ms(1000); lcdwrite(1,CMD); lcdprint("Attendance"); lcdwrite(192,CMD); lcdprint("Registered"); _delay_ms(2000); LEDLow; }
Followed by that we have a function that is used for enrolling a new finger and displaying the result or status on LCD. Then the below function is used for deleting stored fingerprint from the module by using id number and show status of the same.
void deleteFinger() { id=getId(); f_delete=id>>8 & 0xff; f_delete=id & 0xff; f_delete=(21+id)>>8 & 0xff; f_delete=(21+id) & 0xff; if(!sendcmd2fp(&f_delete,sizeof(f_delete))) { lcdwrite(1,CMD); sprintf((char *)buf1,"Finger ID %d ",id); lcdprint((char *)buf1); lcdwrite(192, CMD); lcdprint("Deleted Success"); } else { lcdwrite(1,CMD); lcdprint("Error"); } _delay_ms(2000); }
Below function is responsible for sending attendance data to serial terminal via soft UART pin PD7 and TTL to USB converter.
/*function to show attendence data on serial moinitor using softserial pin PD7*/ void ShowAttendance() { char buf; lcdwrite(1,CMD); lcdprint("Downloding…."); SerialSoftPrintln("Attendance Record"); SerialSoftPrintln(" "); SerialSoftPrintln("S.No ID1 ID2 Id3 ID4 ID5 "); //serialprintln("Attendance Record"); //serialprintln(" "); //serialprintln("S.No ID1 ID2 Id3 ID4 ID5"); for(int cIndex=1;cIndex<=8;cIndex++) { sprintf((char *)buf,"%d " "%d:%d:%d %d/%d/20%d " "%d:%d:%d %d/%d/20%d " "%d:%d:%d %d/%d/20%d " "%d:%d:%d %d/%d/20%d " "%d:%d:%d %d/%d/20%d ", cIndex, eeprom_read((cIndex*6)),eeprom_read((cIndex*6)+1),eeprom_read((cIndex*6)+2),eeprom_read((cIndex*6)+3),eeprom_read((cIndex*6)+4),eeprom_read((cIndex*6)+5), eeprom_read((cIndex*6)+48),eeprom_read((cIndex*6)+1+48),eeprom_read((cIndex*6)+2+48),eeprom_read((cIndex*6)+3+48),eeprom_read((cIndex*6)+4+48),eeprom_read((cIndex*6)+5+48), eeprom_read((cIndex*6)+96),eeprom_read((cIndex*6)+1+96),eeprom_read((cIndex*6)+2+96),eeprom_read((cIndex*6)+3+96),eeprom_read((cIndex*6)+4+96),eeprom_read((cIndex*6)+5+96), eeprom_read((cIndex*6)+144),eeprom_read((cIndex*6)+1+144),eeprom_read((cIndex*6)+2+144),eeprom_read((cIndex*6)+3+144),eeprom_read((cIndex*6)+4+144),eeprom_read((cIndex*6)+5+144), eeprom_read((cIndex*6)+192),eeprom_read((cIndex*6)+1+192),eeprom_read((cIndex*6)+2+192),eeprom_read((cIndex*6)+3+192),eeprom_read((cIndex*6)+4+192),eeprom_read((cIndex*6)+5+192)); SerialSoftPrintln(buf); //serialprintln(buf); } lcdwrite(192,CMD); lcdprint("Done"); _delay_ms(2000); }
Below function is used for deleting all the attendance data from the microcontroller’s EEPROM.
void DeleteRecord() { lcdwrite(1,CMD); lcdprint("Please Wait…"); for(int i=0;i<255;i++) eeprom_write(i,10); _delay_ms(2000); lcdwrite(1,CMD); lcdprint("Record Deleted"); lcdwrite(192,CMD); lcdprint("Successfully"); _delay_ms(2000); }
In the main function we will initialize all the used module and gpio pins. Finally, all-controlling event are performed in this as shown below
while(1) { RTC(); // if(match == LOW) // { matchFinger(); // } if(enrol == LOW) { buzzer(200); enrolFinger(); _delay_ms(2000); // lcdinst(); } else if(delet == LOW) { buzzer(200); getId(); deleteFinger(); _delay_ms(1000); } } return 0; }
The complete working set-up is shown in the video linked below. Hope you enjoyed the project and learnt something new. If you have any questions leave them in the comment section or use the forums for other technical questions.