- Необходими компоненти
- Електрическа схема
- Как работи системата за посещаемост на пръстови отпечатъци
- Code Explanation
Според изследователи от Pen State University, хората са по-склонни да се доверяват на машини над хората, което вероятно е видно от това, че разкриваме нашия ПИН на машината толкова лесно. Днес, в света, където AI, машинно обучение, чат ботове, интелигентни високоговорители, роботи и т.н. активно напредват, тази синергия между хората и роботите е само да се увеличи. Днес, от събирачите на мостови такси до касиерите, всичко около нас се заменя с машини, за да свърши работата по-лесно и по-ефективно. За да сме в крак с фазата, в този проект ще изградим система Bio-metric Attendance, използваща AVR микроконтролери, за да заменим ръчната процедура за присъствие. Тази система ще бъде по-надеждна и ефективна, тъй като ще спести време и ще избегне измамниците.
Системите за посещаемост на пръстови отпечатъци вече са лесно достъпни директно от пазара, но какво е по-забавно от изграждането на такава? Също така сме изградили голямо разнообразие от системи за посещение по-рано - от проста система за присъствие, базирана на RFID, до биометрична система за присъствие, базирана на IoT, използваща Arduino и Raspberry Pi. В този проект използвахме модула за пръстови отпечатъци и AVR (atmega32), за да регистрираме присъствие. Използвайки сензор за пръстови отпечатъци, системата ще стане по-сигурна за потребителите. Следващите раздели обясняват техническите подробности за създаването на базирана на пръстови отпечатъци система за биометрично посещение с помощта на AVR.
Необходими компоненти
- Atmega32 -1
- Модул за пръстови отпечатъци (r305) -1
- Бутон или мембранни бутони - 4
- Светодиоди -2
- 1K резистор -2
- 2.2K резистор -1
- Захранващ 12v адаптер
- Свързващи проводници
- Звънец -1
- 16x2 LCD -1
- ПХБ или дъска за хляб
- RTC модул (ds1307 или ds3231) -1
- LM7805 -1
- 1000uf, 10uf кондензатор -1
- Burgstips мъжки женски
- DC JACK (по избор)
- BC547 Транзистор -1
В тази схема на системата за присъствие на пръстови отпечатъци използвахме модула Сензор за пръстови отпечатъци, за да удостоверим самоличността на човек или служител, като взехме въведените от него пръстови отпечатъци в системата. Тук използваме 4 бутона за записване, изтриване, увеличаване и намаляване на данните за пръстови отпечатъци . Ключ 1 се използва за записване на ново лице в системата. Така че, когато потребителят иска да регистрира нов пръст, той / тя трябва да натисне клавиш 1, след което LCD ще го помоли да постави пръст върху сензора за пръстови отпечатъци два пъти, след което ще поиска идентификационен номер на служител. По същия начин клавиш 2 има двойна функция, като когато потребителят регистрира нов пръст, тогава той / тя трябва да избере ID за отпечатване на пръстс помощта на други два ключа, а именно 3 и 4. Сега потребителят трябва да натисне клавиш 1 (този път този клавиш се държи като ОК), за да продължи с избрания идентификатор. А ключ 2 се използва и за нулиране или изтриване на данни от EEPROM на микроконтролера.
Модулът на сензора за пръстови отпечатъци улавя изображението на отпечатъка на пръста и след това го преобразува в еквивалентния шаблон и ги записва в паметта си според избрания идентификатор от микроконтролера. Целият процес се командва от микроконтролера, като правене на изображение на пръстов отпечатък; конвертирайте го в шаблони и съхранявайте като ID и т.н. Можете също така да проверите тези други проекти на сензори за пръстови отпечатъци, където сме изградили система за сигурност на сензора за пръстови отпечатъци и машина за гласуване на сензор за пръстови отпечатъци.
Електрическа схема
Пълната схема на схемата за проект за система за присъствие на базата на пръстови отпечатъци е показана по-долу. Разполага с микроконтролер Atmega32 за управление на целия процес на проекта. Бутонът за натискане или мембрана се използва за записване, изтриване, избор на идентификатори за присъствие, зумер се използва за индикация и 16x2 LCD, за да инструктира потребителя как да използва машината.
Както е показано на схемата, бутоните или мембранните бутони са директно свързани към щифт PA2 (клавиш ENROLL 1), PA3 (ключ DEL 2), PA0 (бутон UP 3), PA1 (бутон DOWN 4) на микроконтролера по отношение на земята или PA4. И LED е свързан към щифт PC2 на микроконтролера по отношение на земята чрез 1k резистор. Rx и Tx на модула за пръстови отпечатъци са директно свързани на сериен щифт PD1 и PD3 на микроконтролера. Захранването 5v се използва за захранване на цялата верига с помощта на регулатор на напрежение LM7805който се захранва от 12v dc адаптер. На пин PC3 е свързан и зумер. LCD 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 щифт за получаване на текущото време.
Как работи системата за посещаемост на пръстови отпечатъци
Всеки път, когато потребителят постави пръста си върху модула за пръстови отпечатъци, тогава модулът за пръстови отпечатъци заснема изображение на пръст и търси дали някой идентификатор е свързан с този пръстов отпечатък в системата. Ако се открие идентификационен номер на пръстов отпечатък, тогава LCD ще покаже присъствието регистрирано и в същото време зумер ще издава веднъж звуков сигнал.
Заедно с модула за пръстови отпечатъци, ние също използвахме RTC модул за данни за час и дата. Часът и датата се изпълняват непрекъснато в системата, така че микроконтролерът може да отнема време и дата, когато истински потребител постави пръста си върху сензора за пръстови отпечатъци и след това да ги запише в EEPROM в определения слот памет.
Потребителят може да изтегли данните за присъствието, като натисне и задържи клавиша 4. Свържете захранването към веригата и изчакайте и след известно време LCD ще покаже „Изтегляне….“. И потребителят може да вижда данните за посещаемост чрез сериен монитор, тук в този софтуер за кодове 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.