Menurut penyelidik dari Pen State University, manusia lebih cenderung mempercayai mesin berbanding orang, yang mungkin jelas dari kita yang menunjukkan pin ATM kita ke mesin dengan mudah. Hari ini, di dunia di mana AI, Pembelajaran mesin, bot Chat, Pembesar Suara Pintar, Robot dan lain-lain sedang aktif, sinergi antara manusia dan robot ini akan meningkat. Hari ini, dari pengumpul tol jambatan hingga juruwang daftar keluar, segala yang ada di sekitar kita digantikan oleh mesin untuk menyelesaikan kerja dengan lebih mudah dan lebih cekap. Untuk mengikuti fasa ini, dalam projek ini kami akan membangun sistem Kehadiran Bio-metrik menggunakan mikrokontroler AVR untuk menggantikan prosedur manual kehadiran. Sistem ini akan lebih dipercayai dan efisien kerana dapat menjimatkan masa dan mengelakkan penipu.
Sistem kehadiran cap jari sudah tersedia langsung dari pasaran, tetapi apa yang lebih menyeronokkan daripada membuatnya? Kami juga telah membangun berbagai Sistem Kehadiran lebih awal dari sistem Kehadiran berasaskan RFID sederhana ke sistem Kehadiran biometrik berasaskan IoT menggunakan Arduino dan Raspberry Pi. Dalam projek ini, kami telah menggunakan Modul cap jari dan AVR (atmega32) untuk mendaftar kehadiran. Dengan menggunakan sensor cap jari, sistem akan menjadi lebih selamat untuk pengguna. Bahagian berikut menerangkan perincian teknikal membuat Sistem Kehadiran Biometrik berasaskan cap jari menggunakan AVR.
Komponen yang Diperlukan
- Atmega32 -1
- Modul cap jari (r305) -1
- Butang tekan atau butang membran - 4
- LED -2
- Perintang 1K -2
- Perintang 2.2K -1
- Penyesuai kuasa 12v
- Menyambung wayar
- Buzzer -1
- 16x2 LCD -1
- PCB atau Papan Roti
- Modul RTC (ds1307 atau ds3231) -1
- LM7805 -1
- 1000uf, kapasitor 10uf -1
- Burgstips lelaki perempuan
- DC JACK (pilihan)
- Transistor BC547 -1
Dalam rangkaian sistem kehadiran cap jari ini, kami telah menggunakan modul Fingerprint Sensor untuk mengesahkan identiti seseorang atau pekerja dengan memasukkan input cap jari mereka dalam sistem. Di sini kita menggunakan 4 butang tekan untuk mendaftarkan, Menghapus, Menambah dan mengurangkan data cap jari . Kunci 1 digunakan untuk pendaftaran orang baru ke dalam sistem. Oleh itu, apabila pengguna ingin mendaftarkan jari baru, maka dia perlu menekan kekunci 1 kemudian LCD meminta dia meletakkan jari pada sensor cap jari dua kali kemudian meminta ID pekerja. Begitu juga, kunci 2 mempunyai fungsi ganda, seperti ketika pengguna mendaftarkan jari baru, maka dia perlu memilih ID cap jaridengan menggunakan dua kekunci lain iaitu 3 dan 4. Sekarang pengguna perlu menekan kekunci 1 (kali ini kunci ini berkelakuan seperti OK) untuk meneruskan ID yang dipilih. Dan kunci 2 juga digunakan untuk menetapkan semula atau menghapus data dari EEPROM mikrokontroler.
Modul sensor cap jari menangkap gambar cetakan jari dan kemudian mengubahnya menjadi templat yang setara dan menyimpannya ke dalam ingatannya mengikut ID yang dipilih oleh mikrokontroler. Semua proses diperintahkan oleh mikrokontroler, seperti mengambil gambar cetakan jari; menukarnya menjadi templat dan menyimpannya sebagai ID dan lain-lain. Anda juga boleh melihat projek sensor cap jari yang lain, di mana kami telah membina sistem keselamatan sensor cap jari dan mesin pemilih sensor sidik jari.
Rajah Litar
Gambarajah litar lengkap untuk projek sistem kehadiran berdasarkan cap jari, ditunjukkan di bawah. Ia mempunyai mikrokontroler Atmega32 untuk mengendalikan semua proses projek. Butang tekan atau membran digunakan untuk mendaftarkan, menghapus, memilih ID untuk kehadiran, buzzer digunakan untuk petunjuk dan LCD 16x2 untuk memberi petunjuk kepada pengguna mengenai cara menggunakan mesin.
Seperti yang ditunjukkan dalam rajah litar, butang tekan atau membran disambungkan secara langsung ke pin PA2 (kunci ENROLL 1), PA3 (kunci DEL 2), PA0 (kekunci UP 3), PA1 (kekunci BAWAH 4) mikrokontroler sehubungan dengan tanah atau PA4. Dan LED disambungkan pada pin PC2 mikrokontroler berkaitan dengan tanah melalui perintang 1k. Rx dan Tx modul cap jari disambungkan secara langsung pada pin siri PD1 dan PD3 mikrokontroler. Bekalan 5v digunakan untuk menghidupkan keseluruhan litar dengan menggunakan pengatur voltan LM7805yang dikuasakan oleh penyesuai 12v dc. Buzzer juga disambungkan pada pin PC3. LCD 16x2 dikonfigurasikan dalam mod 4-bit dan RS, RW, EN, D4, D5, D6, dan D7 disambungkan secara langsung pada pin PB0, PB1, PB2, PB4, PB5, PB6, PB7 mikrokontroler. Modul RTC disambungkan di I2Cpin PC0 SCL dan PC1 SDA. Dan PD7 digunakan sebagai pin UART Tx lembut untuk mendapatkan masa semasa.
Bagaimana Sistem Kehadiran Cap Jari berfungsi
Setiap kali pengguna meletakkan jarinya di atas modul cap jari maka modul sidik jari menangkap gambar jari, dan mencari jika ada ID yang dikaitkan dengan cap jari ini dalam sistem. Sekiranya ID cap jari dikesan maka LCD akan menunjukkan Kehadiran didaftarkan dan pada masa yang sama buzzer akan berbunyi bip sekali.
Bersama dengan modul cap jari, kami juga telah menggunakan modul RTC untuk data Waktu dan tarikh. Masa dan tarikh berjalan secara berterusan dalam sistem, jadi Pengawal mikro dapat mengambil masa dan tarikh setiap kali pengguna benar meletakkan jarinya di atas sensor cap jari dan kemudian menyimpannya di EEPROM di slot memori yang diperuntukkan.
Pengguna boleh memuat turun data kehadiran dengan menekan dan menahan kekunci 4. Sambungkan bekalan ke litar dan tunggu dan setelah beberapa lama, LCD akan menunjukkan 'Memuat turun….'. Dan pengguna dapat melihat data kehadiran melalui monitor bersiri, di sini dalam perisian kod ini UART diprogramkan pada pin PD7-pin20 sebagai Tx untuk mengirim data ke terminal. Pengguna juga memerlukan penukar TTL ke USB untuk melihat data kehadiran melalui terminal bersiri.
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.