- Необхідні компоненти
- Кругова діаграма
- Як працює система відвідування відбитків пальців
- Code Explanation
За словами дослідників з Університету штату Пен, люди, швидше за все, довіряють машинам людям, що, мабуть, видно з того, що ми так легко розкриваємо машині наш штифт банкомата. Сьогодні у світі, де ШІ, Машинне навчання, Боти-чати, Розумні колонки, Роботи тощо активно прогресують, ця синергія між людьми та роботами лише збільшується. На сьогоднішній день, від збирачів плати за мости до виїзних касирів, все навколо нас замінюють машини, щоб зробити роботу простішою та ефективнішою. Щоб не відставати від фази, у цьому проекті ми побудуємо систему біометричних відвідувачів із використанням мікроконтролерів AVR для заміни ручної процедури відвідування. Ця система буде більш надійною та ефективною, оскільки заощадить час та уникне ухильників.
Системи відвідування відбитків пальців вже доступні безпосередньо на ринку, але що цікавіше, ніж їх створення? Раніше ми також створили широкий спектр систем відвідуваності - від простої системи відвідуваності на основі RFID до біометричної системи відвідуваності на основі IoT із використанням Arduino та Raspberry Pi. У цьому проекті ми використовували модуль відбитків пальців та AVR (atmega32) для реєстрації відвідуваності. Використовуючи датчик відбитків пальців, система стане більш безпечною для користувачів. У наступних розділах пояснюються технічні подробиці створення системи біометричного відвідування на основі відбитків пальців за допомогою AVR.
Необхідні компоненти
- Atmega32 -1
- Модуль відбитків пальців (r305) -1
- Кнопка або мембранні кнопки - 4
- Світлодіоди -2
- Резистор 1К -2
- Резистор 2,2 К -1
- Адаптер живлення 12 В
- Підключення проводів
- Зуммер -1
- РК-дисплей 16x2 -1
- ПХД або хлібна дошка
- Модуль RTC (ds1307 або ds3231) -1
- LM7805 -1
- 1000 мкФ, 10 мкФ конденсатор -1
- Самки самців
- Гніздо постійного струму (додатково)
- BC547 Транзистор -1
У цій схемі системи відвідування відбитків пальців ми використовували модуль Датчик відбитків пальців для автентифікації особи або співробітника, вводячи в систему їхні відбитки пальців. Тут ми використовуємо 4 кнопки для реєстрації, видалення, збільшення та зменшення даних відбитків пальців . Ключ 1 використовується для зарахування нової особи до системи. Отже, коли користувач хоче зареєструвати новий палець, йому / їй потрібно натиснути клавішу 1, тоді РК-дисплей просить його покласти палець на датчик відбитків пальців два рази, після чого він запитує ідентифікатор працівника. Аналогічно, клавіша 2 має подвійну функцію, наприклад, коли користувач реєструє новий палець, тоді йому / їй потрібно вибрати ідентифікатор відбитка пальцявикористовуючи ще дві клавіші, а саме 3 та 4. Тепер користувачеві потрібно натиснути клавішу 1 (цього разу ця клавіша поводиться як ОК), щоб продовжити з обраним ідентифікатором. А ключ 2 також використовується для скидання або видалення даних з EEPROM мікроконтролера.
Модуль датчика відбитків пальців фіксує відбиток пальця, а потім перетворює його в еквівалентний шаблон і зберігає у свою пам'ять відповідно до вибраного ідентифікатора мікроконтролером. Весь процес керується мікроконтролером, як фотографування відбитків пальців; перетворити його на шаблони та зберігати як ідентифікатор тощо. Ви також можете перевірити ці інші проекти датчиків відбитків пальців, де ми створили систему захисту датчика відбитків пальців та машину для голосування датчиків відбитків пальців.
Кругова діаграма
Повна принципова схема для проекту системи відвідування на основі відбитків пальців наведена нижче. Він має мікроконтролер Atmega32 для управління всім процесом проекту. Кнопка або кнопка мембрани використовується для реєстрації, видалення, вибору ідентифікаторів для відвідування, зуммер використовується для індикації та РК-дисплей 16x2, щоб проінструктувати користувача про те, як користуватися машиною.
Як показано на схемі, кнопкові або мембранні кнопки безпосередньо підключені до контакту PA2 (клавіша ENROLL 1), PA3 (клавіша DEL 2), PA0 (клавіша UP 3), PA1 (клавіша DOWN 4) мікроконтролера відносно землі або PA4. І світлодіод підключений до виводу PC2 мікроконтролера щодо землі через резистор 1k. Модулі 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.