- Komponen yang Diperlukan
- Diagram Sirkuit
- Bagaimana Sistem Absensi Sidik Jari bekerja
- Code Explanation
Menurut peneliti dari Pen State University, manusia lebih cenderung mempercayai mesin daripada manusia, yang mungkin terbukti dari kita mengungkapkan pin ATM kita ke mesin dengan begitu mudah. Saat ini, di dunia di mana AI, Machine learning, Chat bots, Smart Speakers, Robots dll sedang berkembang secara aktif, sinergi antara manusia dan robot ini hanya akan meningkat. Saat ini, dari pengumpul tol jembatan hingga kasir check-out, segala sesuatu di sekitar kita telah diganti dengan mesin untuk menyelesaikan pekerjaan dengan lebih mudah dan efisien. Untuk mengikuti tahapan tersebut, dalam proyek ini kami akan membangun sistem Absensi Bio-metrik menggunakan mikrokontroler AVR untuk menggantikan prosedur pencatatan absensi secara manual. Sistem ini akan lebih andal dan efisien karena akan menghemat waktu dan menghindari pengelak.
Sistem absensi sidik jari sudah tersedia langsung dari pasar, tetapi apa yang lebih menyenangkan daripada membangunnya? Kami juga telah membangun berbagai macam Sistem Kehadiran sebelumnya dari sistem Absensi berbasis RFID sederhana hingga sistem Absensi biometrik berbasis IoT menggunakan Arduino dan Raspberry Pi. Dalam proyek ini, kami telah menggunakan modul sidik jari dan AVR (atmega32) untuk mendaftarkan kehadiran. Dengan menggunakan sensor sidik jari, sistem menjadi lebih aman bagi pengguna. Bagian berikut menjelaskan detail teknis pembuatan Sistem Absensi Biometrik berbasis sidik jari menggunakan AVR.
Komponen yang Diperlukan
- Atmega32 -1
- Modul sidik jari (r305) -1
- Tombol tekan atau tombol membran - 4
- LED -2
- Resistor 1K -2
- 2.2K resistor -1
- Adaptor daya 12v
- Menghubungkan kabel
- Buzzer -1
- LCD 16x2 -1
- PCB atau Papan Roti
- Modul RTC (ds1307 atau ds3231) -1
- LM7805 -1
- 1000uf, kapasitor 10uf -1
- Burgstips pria wanita
- DC JACK (opsional)
- BC547 Transistor -1
Dalam rangkaian sistem absensi sidik jari ini, kami telah menggunakan modul Sensor Sidik Jari untuk mengotentikasi identitas seseorang atau karyawan dengan mengambil input sidik jari mereka di sistem. Di sini kami menggunakan 4 tombol tekan untuk mendaftarkan, Hapus, Penambahan, dan Pengurangan data sidik jari . Kunci 1 digunakan untuk pendaftaran orang baru ke dalam sistem. Jadi ketika pengguna ingin meregister jari baru, maka dia perlu menekan tombol 1 lalu LCD memintanya untuk meletakkan jari pada sensor sidik jari dua kali kemudian meminta ID karyawan. Demikian pula tombol 2 memiliki fungsi ganda, seperti saat pengguna meregistrasi jari baru, maka ia harus memilih ID sidik jaridengan menggunakan dua tombol lain yaitu 3 dan 4. Sekarang pengguna perlu menekan tombol 1 (kali ini tombol ini berperilaku seperti OK) untuk melanjutkan dengan ID yang dipilih. Dan kunci 2 juga digunakan untuk mereset atau menghapus data dari EEPROM mikrokontroler.
Modul sensor sidik jari menangkap gambar sidik jari dan kemudian mengubahnya menjadi templat yang setara dan menyimpannya ke dalam memori sesuai ID yang dipilih oleh mikrokontroler. Semua proses ini diperintahkan oleh mikrokontroler, seperti mengambil gambar sidik jari; mengubahnya menjadi templat dan menyimpannya sebagai ID, dll. Anda juga dapat memeriksa proyek sensor sidik jari lainnya, di mana kami telah membangun sistem keamanan sensor sidik jari dan mesin pemungutan suara sensor sidik jari.
Diagram Sirkuit
Diagram rangkaian lengkap untuk proyek sistem absensi berbasis sidik jari ditunjukkan di bawah ini. Ini memiliki mikrokontroler Atmega32 untuk mengendalikan semua proses proyek. Tombol tekan atau membran digunakan untuk mendaftarkan, menghapus, memilih ID untuk kehadiran, bel digunakan untuk indikasi dan LCD 16x2 untuk menginstruksikan pengguna tentang cara menggunakan mesin.
Seperti yang ditunjukkan pada diagram rangkaian, tombol tekan atau membran terhubung langsung ke pin PA2 (tombol ENROLL 1), PA3 (tombol DEL 2), PA0 (tombol ATAS 3), PA1 (tombol KE BAWAH 4) dari mikrokontroler sehubungan dengan ground atau PA4. Dan sebuah LED dihubungkan pada pin PC2 mikrokontroler sehubungan dengan ground melalui resistor 1k. Modul sidik jari Rx dan Tx terhubung langsung pada pin Serial PD1 dan PD3 mikrokontroler. Suplai 5v digunakan untuk menyalakan seluruh rangkaian dengan menggunakan regulator tegangan LM7805yang didukung oleh adaptor 12v dc. Sebuah bel juga terhubung ke pin PC3. Sebuah LCD 16x2 dikonfigurasi dalam mode 4-bit dan RS, RW, EN, D4, D5, D6, dan D7-nya terhubung langsung ke pin PB0, PB1, PB2, PB4, PB5, PB6, PB7 mikrokontroler. Modul RTC terhubung ke I2Cpin PC0 SCL dan PC1 SDA. Dan PD7 digunakan sebagai pin UART Tx lunak untuk mendapatkan waktu saat ini.
Bagaimana Sistem Absensi Sidik Jari bekerja
Setiap kali pengguna meletakkan jarinya di atas modul sidik jari, modul sidik jari menangkap gambar jari, dan mencari apakah ada ID yang terkait dengan sidik jari ini di dalam sistem. Jika ID sidik jari terdeteksi maka LCD akan menunjukkan Kehadiran terdaftar dan dalam waktu yang sama bel akan berbunyi sekali.
Bersama modul sidik jari, kami juga menggunakan modul RTC untuk data Waktu dan tanggal. Waktu dan tanggal berjalan terus menerus di dalam sistem, sehingga Mikrokontroler dapat mengambil waktu dan tanggal setiap kali pengguna sejati meletakkan jarinya di atas sensor sidik jari dan kemudian menyimpannya di EEPROM pada slot memori yang dialokasikan.
Pengguna dapat mengunduh data kehadiran dengan menekan dan menahan tombol 4. Hubungkan suplai ke sirkuit dan tunggu dan setelah beberapa saat, LCD akan menampilkan 'Mengunduh….'. Dan pengguna dapat melihat data absensi melalui monitor serial, disini dalam kode software ini UART diprogram pada pin PD7-pin20 sebagai Tx untuk mengirimkan data ke terminal. Pengguna juga membutuhkan konverter TTL ke USB untuk melihat data kehadiran melalui terminal serial.
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.