Menghidupkan Motor bahkan Mobil dengan Sidik Jari
Sensor Sidik Jari
Sensor Sidik jari sering kali di pakai untuk beberapa keperluan, biasa nya tampak nyata di sistem absensi di kantor kantor, absensi yang menggunakan finger print. Nah sensor finger print ini tidak lagi hanya di gunakan untuk absensi, tapi bisa di gunakan untuk keperluan lebih luas. Contoh nya adalah menghidupkan Sepeda Motor dan Mobil.
Sensor ini bisa menyimpan banyak sidik Jari, 180 sidik jari bisa disimpan, setidak nya itu yang sudah saya coba sendiri. Ingat, yang menyimpan sidik jari bukan Arduino nya, tapi modul finger print nya.
yang menyimpan sidik jari bukan Arduino nya, tapi modul finger print nya.
Sensor sidik jari ini membuat Sepeda motor kita menjadi lebih secure, canggih dan berbeda dengan lain nya. Gak kebayangkan, sistem nyala dan mati Kendaraan ini bisa di buat hanya dengan Arduino, Sensor Finger print dan Relay.
Interface Arduino dan Sensor Sidik Jari
Sensor sidik Jari ini bisa di hubungkan langsung ke Arduino kita nanti nya dengan interface komunikasi serial. Yups, karena Arduino punya library SoftwareSerial.h kita bisa menjadikan pin Digital biasa berubah fungsi menjadi komunikasi serial, TXD dan RXD. Jadi modul modul yang menggunakan interface komunikasi serial bisa di hubungkan dengan pin digital Biasa yang sudah di rubah fungsi nya menjadi interface komunikasi serial.
Beberapa contoh modul yang menggunakan interface komunikasi serial untuk menghidupkan sepeda motor adalah sim800, dfPlayer, modul Bluetooth dan tentu nya sensor sidik jari.
Untuk Produk finger Print buatan mikroavrnya bisa di lihat Gambar dibawah ini,
Untuk lebih jelas nya, seperti apa komunikasi Arduino dengan sidik jari, bisa kita lihat pada gambar rangkaian di bawah ini
Konfigurasi Finger Print dan Arduino
konfigurasi finger print penting untuk di perhatikan, agar program, hardware yang akan kita jalankan dapat bekerja dengan baik. Bisa jadi program nya sudah benar, tapi tidak jalan, karena kaki kaki nya tidak terhubung dengan benar. Untu lebih jelas nya Pin Out sidik jari bisa di lihat pada gambar di bawah ini
Tabel konfigurasi Pin finger print dan Arduino nya bisa dilihat pada Tabel di bawah ini,
Pin Arduino | Finger Print | Relay |
2 | TXD | |
3 | RXD | |
GND | GND | GND |
+5V | +5v | |
4 | IN1 | |
5 | IN2 |
Untuk power supply finger print, lebih baik di ambil dari power supply tambahan, jangan di ambil dari +5v nya arduino, agar regulator internal Arduino nya tidak terlalu di bebani, yang akan menggangu kinerja dari Arduino itu sendiri. Power supply nya bisa di ambil dari mini DC to DC, atau modul LM2596 ( pastikan tegangan outnya 5V sebelum di hubungkan dengan finger print).
Untuk Relay nya bisa di gunakan modul relay, modul relay aktif Low. Saya pribadi sih malas menggunakan menggunakan modul kemudian di jumper jumper menggunakan kabel. Lebih mudah pakai PCB build, jadi tinggal program, case pun lebih mudah.
Jika teman teman ingin di desain PCB nya, menggunakan atmega328 smd, relay + modul finger print, bisa whatsapp kita, cukup tekan button merah di bawah ini
Coding Arduino dengan Sidik Jarinya
Sekarang final, bagaimana kah koding finger print nya? eh sebelum ke program final program nya, teman-teman harus pastikan dulu, download library finger print nya di link berikut.
nah, pastikan library ini sudah di include di arduino kita yah, kalo gak program yang kita jalan kan pasti error, pasti error. hehe.
langkah selanjut nya adalah register sidik jari kita, register sidik jari saya sendiri biasanya dari example program nya, enrol nama nya, untuk lebih jelas nya bisa di lihat pada gambar di bawah ini.
Setelah program nya di upload, buka serial monitor, nanti ada perintah, tekan sidik jari, tekan sekali lagi, kemudian setelah berhasil, akan di beri no urut dari sidik jari kita, no 1 sampe 108. Gak sempat capture cara kerja nya.
Setelah program nya di upload, buka serial monitor, nanti ada perintah, tekan sidik jari, tekan sekali lagi,
Program Final Sidik Jari Kita
#mikroavr, Bagaimana kah program terakhir nya? Sebelum kesana kita bahas dulu cara kerja nya. Pertama tama modul relay ini bekerja aktif low, artinya jika di input logika 0 ke modul relay nya maka relay nya on, aktif. Sebalik nya, jika di beri logika high maka relay menjadi off.
Ketika Sidik jari yang ter register di tempel, maka relay kontaktor akan on, terhubung ( kemarin katanya di hubungkan ke CDI nya speda motor. Tempel Sidik jari kedua akan starter speda motor, dan tempel sidik jari ke tiga akan mematikan relay atau speda motor. Namun ketika salah sidik jari selama tiga kali, maka akan ada jeda waktu selama 20 detik agar finger aktif kembali dan request finger print.
Bagaimana kah program final nya, yuk kita lihat di bawah ini
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <Adafruit_Fingerprint.h> #include <SoftwareSerial.h> SoftwareSerial mySerial(6, 7); LiquidCrystal_I2C lcd(16, 2); Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); const byte SELENOID = A0; byte count_salah = 0; byte count_benar = 0; String line1, line2; void setup() { pinMode(SELENOID, OUTPUT); digitalWrite(SELENOID, LOW); Serial.begin(9600); delay(3000); while (!Serial); // For Yun/Leo/Micro/Zero/... delay(100); lcd.autoAddress(); lcd.begin(); Serial.println("\n\nAdafruit finger detect test"); // set the data rate for the sensor serial port finger.begin(57600); mySerial.listen(); while (!finger.verifyPassword()){ lcd.setCursor(0,0); lcd.print("Check Finger"); delay(100); } lcd.clear(); lcd.setCursor(0,0); lcd.print("Found Finger"); delay(2000); lcd.clear(); finger.getTemplateCount(); Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates"); Serial.println("Waiting for valid finger..."); } void loop() // run over and over again { //getFingerprintIDez(); getFingerprintID(); control(); lcd.setCursor(0,0); lcd.print(line1); lcd.setCursor(0,1); lcd.print(line2); delay(50); //don't ned to run this at full speed. } uint8_t getFingerprintID() { uint8_t p = finger.getImage(); switch (p) { case FINGERPRINT_OK: Serial.println("Image taken"); break; case FINGERPRINT_NOFINGER: //Serial.println("No finger detected"); return p; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return p; case FINGERPRINT_IMAGEFAIL: Serial.println("Imaging error"); return p; default: Serial.println("Unknown error"); return p; } // OK success! p = finger.image2Tz(); switch (p) { case FINGERPRINT_OK: Serial.println("Image converted"); break; case FINGERPRINT_IMAGEMESS: Serial.println("Image too messy"); return p; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return p; case FINGERPRINT_FEATUREFAIL: Serial.println("Could not find fingerprint features"); return p; case FINGERPRINT_INVALIDIMAGE: Serial.println("Could not find fingerprint features"); return p; default: Serial.println("Unknown error"); return p; } // OK converted! p = finger.fingerFastSearch(); if (p == FINGERPRINT_OK) { Serial.println("Found a print match!"); Serial.println("Benar........"); count_benar ++; count_salah = 0; if ( count_benar == 3) count_benar = 0; } else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println("Communication error"); return p; } else if (p == FINGERPRINT_NOTFOUND) { Serial.println("Did not find a match"); Serial.println("Salah........."); count_salah ++; if ( count_salah == 3) count_salah = 0; return p; } else { Serial.println("Unknown error"); return p; } // found a match! Serial.print("Found ID #"); Serial.print(finger.fingerID); Serial.print(" with confidence of "); Serial.println(finger.confidence); return finger.fingerID; } // returns -1 if failed, otherwise returns ID # 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_OK) return -1; // found a match! Serial.print("Found ID #"); Serial.print(finger.fingerID); Serial.print(" with confidence of "); Serial.println(finger.confidence); return finger.fingerID; } void control(){ switch(count_benar){ case 0: line1 = "Smart Lock"; line2 = "Tap Finger.."; digitalWrite(SELENOID, LOW); break; case 1: line1 = "Smart Lock"; line2 = "KEY OPEN...."; digitalWrite(SELENOID, HIGH); break; case 2: digitalWrite(SELENOID, LOW); count_benar = 0; break; } }
jika program di atas error, bisa lihat di link berikut ini,
Pada Sebenar nya hardware di atas menurut saya masih ada kelemahan, karena belum tentu sepeda motor hidup hanya sekali starter. Bisa dua kali starter, bisa tiga kali starter. Untuk menutupi kelemahan nya, kita sediakan input digital ke arduino, sebagai indikasi speda motor sudah hidup. Jika motor hidup, ada tanda di Arduino nya.
Sediakan input sensor sebagai penanda bahwa sepeda motor hidup
Coba modifikasi program di atas untuk lebih sempurna, selamat berkreasi
Thanks
#mikroavr
#Learning&Sharing