Membuat Absensi Sidik Jari dengan Arduino

Membuat Absensi Sidik Jari dengan Arduino – Pada kesempatan kali ini projekita akan membuat alat absensi karyawan menggunakan sensor sidik jari. Sensor yang digunakan untuk membuat alat absensi karyawan adalah sensor fingerprint FPM10.

Cara kerja alat absensi ini adalah dengan membaca dan mendaftarkan sidik jari karyawan kemudian data tersebut disimpan pada EEPROM internal Arduino. Pada project kali ini hanya akan mendaftarkan 10 data sidik jari karyawan saja, sobat juga bisa menambahkan lebih banyak data sidik jari jika diinginkan. Absensi sidik jari ini didukung oleh modul RTC yang berfungsi untuk membaca tanggal absensinya. Untuk melihat data atau daftar absensi dapat menggunakan monitor serial yang merupakan fitur bawaan dari software Sketch Arduino.

Hardware yang perlu dipersiapkan

  1. Arduino UNO Board
  2. Sensor Fingerprint FPM10
  3. Modul RTC DS1307
  4. Buzzer
  5. LCD 2×16
  6. Power Supply 7v-9v dc

Shematics

Koneksi Arduino UNO dengan modul RFID RC522

Pin ArduinoPin Modul Sensor Fingerprint
5.0 V5.0 V (kabel merah)
GNDG (kabel hitam)
2T (kabel hijau)
3R (kabel putih)

Koneksi Arduino UNO dengan Buzzer

Pin ArduinoBuzzer
7BUZZER +
GNDBUZZER –

Koneksi Arduino UNO dengan LCD

Pin ArduinoPin Modul Sensor Fingerprint
8RS
9E
10D4
11D5
12D6
13D7

Koneksi Arduino UNO dengan RTC

Pin ArduinoPin RTC DS1307
A4SDA
A5SCL
5V5V
GNDGND

Source Code Absensi Fingerprint dengan Arduino

/************************************* * Program : Project 3 Absensi dg sidik jari * Input : Sensor Fingerprint, DS1307 * Output : LCD 2x16, BUZZER * 125 Proyek Arduino Inkubatek * www.tokotronik.com * ***********************************/ #include <Adafruit_Fingerprint.h> #include <SoftwareSerial.h> #include <LiquidCrystal.h> #include <EEPROM.h> #include <Wire.h> #define DS1307_ADDRESS 0x68 byte zero = 0x00; LiquidCrystal lcd(8, 9, 10, 11, 12, 13); byte second ,minute,hour, weekDay; byte monthDay,month,year; uint8_t id; uint8_t getFingerprintEnroll(); // pin #2 is IN from sensor (GREEN wire) // pin #3 is OUT from arduino (WHITE wire) SoftwareSerial mySerial(2, 3); Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); void setup(){ pinMode(7, OUTPUT); digitalWrite(7, LOW); delay(500); Wire.begin(); /* // Seting RTC second=0; minute=50; hour=12; monthDay=15; month=10; year=16; setingRTC(); delay(100); */ Serial.begin(9600); lcd.begin(16, 2); lcd.clear(); lcd.print("Absensi karyawan"); lcd.setCursor(0,1); lcd.print(" dg sidik jari"); delay(2000); lcd.clear(); lcd.print("Test Koneksi"); // set the data rate for the sensor serial port finger.begin(57600); if (finger.verifyPassword()) { lcd.setCursor(0,1); lcd.print("OK !"); } else { lcd.setCursor(0,1); lcd.print("ERROR !"); while (1); } delay(2000); } //===================program utama void loop(){ // bacaRTC(); lcd.setCursor(0, 0); lcd.print("Absensi Karyawan"); lcd.setCursor(0, 1); lcd.print(" Letakkan Jari "); getFingerprintIDez(); kirimSerial(); delay(50); } int getFingerprintIDez() { uint8_t p = finger.getImage(); if (p != FINGERPRINT_OK) return -1; p = finger.image2Tz(); if (p != FINGERPRINT_OK) return -1; p = finger.fingerFastSearch(); if (p == FINGERPRINT_NOTFOUND){ lcd.clear(); lcd.print(" Akses"); lcd.setCursor(0,1); lcd.print(" Tidak Diterima"); digitalWrite(7, HIGH); delay(3000); digitalWrite(7, LOW); delay(100); return p; } if (p != FINGERPRINT_OK) return -1; // found a match! digitalWrite(7, HIGH); delay(500); digitalWrite(7, LOW); delay(50); bacaRTC(); lcd.clear(); lcd.print("Karyawan "); lcd.print(finger.fingerID); lcd.setCursor(0,1); lcd.print(hour); lcd.print(":"); lcd.print(minute); lcd.print(":"); lcd.print(second); lcd.print(" "); lcd.print(monthDay); lcd.print("/"); lcd.print(month); lcd.print(" "); //-------------------simpan data id=finger.fingerID; byte addr = (monthDay*10)+id; EEPROM.write(addr, 0); delay(4000); lcd.clear(); return finger.fingerID; } /**************************************** * peta penyimpanan di EEPROM * tanggal disimpan pada alamt 0 * ---------------------------------------------------------* tgl | Alamat EEPROM karyawan * | 1 2 3 4 5 6 7 8 9 10 * ----------------------------------------------------------* 1 | 11 12 13 14 15 16 17 18 19 20 * 2 | 21 22 23 24 25 26 27 28 29 30 * 3 | 31 32 33 34 35 36 37 38 39 40 * * 30 | 311 312 313 314 315 316 317 318 319 320 * --------------------------------------------* Rumus Penyimpanan EEPROM= * alamatSimpan = (tgl * 10)+id * * kode absensi: * * 0 = Hadir * * 255 = Alpha */ //---------------------------RTC Area byte decToBcd(byte val){ return ( (val/10*16) + (val%10) ); } byte bcdToDec(byte val) { return ( (val/16*10) + (val%16) ); } void bacaRTC(){ Wire.beginTransmission(DS1307_ADDRESS); Wire.write(zero); Wire.endTransmission(); Wire.requestFrom(DS1307_ADDRESS, 7); second = bcdToDec(Wire.read()); minute = bcdToDec(Wire.read()); hour = bcdToDec(Wire.read() & 0b111111); weekDay = bcdToDec(Wire.read()); monthDay = bcdToDec(Wire.read()); month = bcdToDec(Wire.read()); year = bcdToDec(Wire.read()); } void setingRTC(){ Wire.beginTransmission(DS1307_ADDRESS); Wire.write(zero); //stop RTC Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); Wire.write(decToBcd(weekDay)); Wire.write(decToBcd(monthDay)); Wire.write(decToBcd(month)); Wire.write(decToBcd(year)); Wire.write(zero); //start Wire.endTransmission(); } void kirimSerial(){ if(Serial.available()){ char str; str=Serial.read(); if (str=='R'){ /* * --------------------------------------------* tgl | Absensi karyawan * | 1 2 3 4 5 6 7 8 9 10 * ---------------------------------------------* 1 | H H - - H H H H H H * 2 | H H H H - H H H H H * 3 | * * 30 | * --------------------------------------------* H = HADIR * - = ALPHA */ for(byte i=0; i<60;i++){ Serial.print('-'); } Serial.println('-'); Serial.println(" tgl | Absensi Karyawan"); Serial.print (" | "); for(byte i=1; i<11;i++){ Serial.print(i); Serial.print(" "); } Serial.println(" "); for(byte i=0; i<60;i++){ Serial.print('-'); } Serial.println('-'); byte value; byte address; byte j=0; String absensi=""; for(byte tgl=1; tgl<31; tgl++){ Serial.print(tgl); Serial.print(" |"); j=tgl*10; for(byte i=1; i<11; i++){ address=i+j; value = EEPROM.read(address); if (value==0) absensi="H"; else absensi="-"; Serial.print(" "+absensi+" "); } Serial.println(" "); } str=' '; } else if(str=='D'){ Serial.println("Hapus Data"); for(word i=0; i<310; i++){ EEPROM.write(i, 255); Serial.println("."); delay(5); } Serial.println("Hapus Data Sukses!"); } } }

Uji Coba Absensi Fingerprint Karyawan

  1. Daftarkan terlebih dahulu 10 sidik jari pada sensor fingerprint menggunakan program enroll.
  2. Tampilan pertama LCD menampilkan Tulisan:
    Absensi karyawan
    dg sidik jari
  3. Kemudian tes koneksi antara sensor fingerprint dengan Arduino, jika sudah terkoneksi makan layar akam menampilkan tulisan:
    Test Koneksi
    OK!
  4. Untuk melakukan absensi, letakan sidik jari pada sensor fingerprint. Jika sidik jari sudah terdaftar, maka LCD akan menampilkan tulisan:
    Karyawan 1
    10:11:25 10/11
    Baris pertama pada LCD menampilkan data karyawan, sedangkan pada baris kedua menampilkan jam dan tanggal.
  5. Setelah membaca sidik jari dan menampilkan data seperti pada poin nomor 4, maka LCD akan kembali ke tampilan normal:
    Absensi Karyawan
    Letakan Jari
  6. Jika ingin meilihat data karyawan, bisa melalui Serial Monitor dengan pengaturan baud rate 9600 + Carriage return.
  7. Ketik R, kemudian kirim. Data absen akan ditampilkan di layar.
  8. Informasi absensi dengan huruf H menunjukan kalau karyawan tersebut hadir, sedangkan minus (-) menunjukan bahwa karyawan tersebut alpha.

    Membuat Absensi Sidik Jari dengan Arduino - Informasi absensi
  9. Ketik huruf D kemudian kirim, untuk melakukan penghapusan data.

Jika sobat tertarik dan ingin mencoba dan mengembangkan project ini, sobat bisa mengunduh Source Code Program Sidik Jari Arduino DISINI. Untuk melihat project dan source code lainnya bisa mengunjungi halaman Source Code.

Baca Juga:
>
Project Arduino Sensor Suhu 3 Channel
> Project Arduino 2CH Sensor Suhu DS1820 & LM35

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

AKUN MEDIA SOSIAL

25,982FansLike
27,530FollowersFollow
23,591SubscribersSubscribe

Artikel Terbaru