A.
Kompetensi
3.1 Menguraikan
konsep dasar sistem kontrol akses menggunakan teknologi fingerprint dan prinsip
kerja sensor fingerprint.
3.2
Mengidentifikasi jenis-jenis perangkat keras dan perangkat lunak yang digunakan
dalam sistem kontrol akses berbasis fingerprint, termasuk Wemos D1 Mini, modul
relay, dan OLED display.
3.3 Menguraikan
proses konfigurasi dan pemrograman sensor fingerprint pada Wemos D1 Mini,
termasuk penggunaan pustaka yang diperlukan untuk berfungsi dengan baik.
4.1 Memasang dan
mengonfigurasi sensor fingerprint, relay, dan OLED display pada Wemos D1 Mini.
4.2 Mengoperasikan
sistem kontrol akses menggunakan sensor fingerprint untuk menghidupkan dan
mematikan relay pada kendaraan listrik.
B.
Dasar Teori
Sensor
Fingerprint
Sensor fingerprint
adalah perangkat yang digunakan untuk mengenali dan memverifikasi identitas
pengguna melalui sidik jari. Sensor ini bekerja dengan menangkap gambar dari
sidik jari dan membandingkannya dengan data sidik jari yang telah disimpan
dalam basis data. Jika sidik jari yang terdeteksi cocok dengan salah satu sidik
jari yang tersimpan, sensor akan mengirimkan sinyal yang menandakan bahwa
identitas pengguna telah terverifikasi. Proses ini melibatkan beberapa langkah,
termasuk pengambilan gambar, pemrosesan citra, dan pencocokan pola. Sensor
fingerprint sering digunakan dalam berbagai aplikasi keamanan, seperti akses
kontrol, autentikasi perangkat, dan sistem pembayaran.
Wemos
D1 Mini
Wemos D1 Mini
adalah papan mikrokontroler yang berbasis pada chip ESP8266, yang dikenal
karena kemampuannya untuk mendukung konektivitas WiFi. Papan ini memiliki
ukuran yang kecil, sehingga cocok untuk proyek-proyek IoT (Internet of Things)
yang memerlukan konektivitas jaringan tanpa kabel. Dengan Wemos D1 Mini,
pengguna dapat mengembangkan aplikasi yang dapat terhubung ke internet atau
jaringan lokal untuk mengirim dan menerima data. Selain itu, papan ini
mendukung berbagai pustaka Arduino yang memudahkan pengembang dalam memprogram
dan mengintegrasikan perangkat keras lain, seperti sensor, relay, dan layar
OLED.
Relay
Relay adalah
saklar elektromekanis yang dapat dikendalikan secara elektrik. Ketika arus
listrik kecil diterapkan pada kumparan relay, ini akan menyebabkan saklar
internal untuk membuka atau menutup, memungkinkan arus yang lebih besar untuk
mengalir melalui sirkuit utama. Dalam konteks proyek ini, relay digunakan untuk
mengontrol daya ke kendaraan listrik. Dengan menggunakan Wemos D1 Mini untuk
mengendalikan relay, sistem dapat menghidupkan atau mematikan kendaraan listrik
berdasarkan sinyal dari sensor fingerprint. Relay ini sangat penting dalam
aplikasi yang memerlukan isolasi listrik antara sirkuit kendali dan sirkuit
daya tinggi.
OLED
Display
OLED (Organic
Light Emitting Diode) display adalah jenis layar yang menggunakan teknologi
dioda pemancar cahaya organik untuk menghasilkan gambar dengan kualitas tinggi
dan kontras yang baik. Layar OLED sering digunakan dalam proyek elektronik
karena konsumsi dayanya yang rendah dan kemampuannya untuk menampilkan teks dan
grafik yang jelas. Dalam proyek ini, layar OLED digunakan untuk menampilkan
status sistem kepada pengguna. Pesan seperti "Fingerprint Benar",
"Fingerprint Salah", "Relay Hidup", atau "Relay
Mati" akan ditampilkan di layar untuk memberikan umpan balik visual yang
instan. Ini membantu pengguna memahami status operasi sistem dan memberikan
pengalaman interaktif yang lebih baik.
C.
Alat dan Bahan:
·
Wemos D1 Mini
·
Sensor Fingerprint
·
Relay module
·
OLED Display (I2C)
·
Software Arduino IDE
D. Rangkaian
E. Program
#include <Adafruit_Fingerprint.h>
#include <Arduino.h>
#include <U8x8lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
U8X8_SSD1306_64X48_ER_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
#if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__)
SoftwareSerial mySerial(2, 0);
#else
#define mySerial Serial1
#endif
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
void setup() {
Serial.begin(9600);
u8x8.begin();
u8x8.setPowerSave(0);
while (!Serial);
delay(100);
Serial.println("\n\nKendali relay berbasis fingerprint");
finger.begin(57600);
delay(5);
if (finger.verifyPassword()) {
Serial.println("Sensor fingerprint terdeteksi");
} else {
Serial.println("Sensor fingerprint tidak ditemukan");
while (1) {
delay(1);
}
}
Serial.println(F("Membaca parameter sensor"));
finger.getParameters();
Serial.print(F("Status: 0x")); Serial.println(finger.status_reg, HEX);
Serial.print(F("Sys ID: 0x")); Serial.println(finger.system_id, HEX);
Serial.print(F("Capacity: ")); Serial.println(finger.capacity);
Serial.print(F("Security level: ")); Serial.println(finger.security_level);
Serial.print(F("Device address: ")); Serial.println(finger.device_addr, HEX);
Serial.print(F("Packet len: ")); Serial.println(finger.packet_len);
Serial.print(F("Baud rate: ")); Serial.println(finger.baud_rate);
finger.getTemplateCount();
if (finger.templateCount == 0) {
Serial.print("Sensor tidak memiliki data fingerprint. Mohon lakukan 'enroll'");
}
else {
Serial.println("Menunggu data fingerprint...");
Serial.print("Sensor menyimpan "); Serial.print(finger.templateCount); Serial.println(" data");
}
u8x8.setFont(u8x8_font_chroma48medium8_r);
u8x8.drawString(0, 0, " Status");
u8x8.drawString(0, 1, " Menunggu");
u8x8.refreshDisplay();
}
void loop() {
getFingerprintID();
u8x8.refreshDisplay();
delay(50);
}
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Gambar diperoleh");
break;
case FINGERPRINT_NOFINGER:
Serial.println("Tidak ada jari terdeteksi");
u8x8.drawString(0, 3, " Sentuh");
u8x8.drawString(0, 4, " Sensor");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Komunikasi error");
return p;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Error saat menangkap gambar");
return p;
default:
Serial.println("Error yang tidak diketahui");
return p;
}
p = finger.image2Tz();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Gambar terkonversi");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Komunikasi error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Tidak dapat menemukan fitur fingerprint");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Tidak dapat menemukan fitur fingerprint");
return p;
default:
Serial.println("Error tidak diketahui");
return p;
}
p = finger.fingerSearch();
if (p == FINGERPRINT_OK) {
Serial.println("Data fingerprint sesuai!");
u8x8.clear();
u8x8.drawString(0, 3, " Data");
u8x8.drawString(0, 4, " Sesuai");
delay(1000);
u8x8.clear();
}
else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Komunikasi error");
return p;
}
else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Data fingerprint tidak sesuai!");
u8x8.clear();
u8x8.drawString(0, 3, " Tidak");
u8x8.drawString(0, 4, " Dikenal");
delay(1000);
u8x8.clear();
return p;
}
else {
Serial.println("Error tidak diketahui");
return p;
}
Serial.print("Ditemukan ID #"); Serial.print(finger.fingerID);
Serial.print(" dengan confidence "); 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;
Serial.print("Ditemukan ID #"); Serial.print(finger.fingerID);
Serial.print(" dengan confidence "); Serial.println(finger.confidence);
return finger.fingerID;
}
F. Langkah-langkah:
1.
Siapkan alat dan bahan yang dibutuhkan.
2.
Sambungkan rangkaian sesuai dengan skematik yang sudah
diberikan.
3.
Koneksikan pin sensor fingerprint pada wemos sebagai berikut:
§
Pin RX ke Pin 0 Wemos
§
Pin TX ke Pin 2 Wemos
§
Pin VCC ke 3V3 Wemos
§
Pin GND ke GND Wemos
4.
Koneksikan pin OLED pada wemos sebagai berikut:
§
Pin 3V3 ke 3V3 Wemos
§
Pin D1 ke Pin 5 Wemos
§
Pin D2 ke Pin 4 Wemos
§
Pin GND ke GND Wemos
5.
Sebelum mengupload program diatas ke Wemos D1 Mini menggunakan
Arduino IDE.
a. Buka Arduino IDE.
b.
Tambahkan Board Wemos D1 Mini:
·
Pergi ke File > Preferences.
·
Di bagian "Additional Boards Manager URLs", tambahkan
URL berikut: http://arduino.esp8266.com/stable/package_esp8266com_index.json.
·
Pergi ke Tools > Board > Boards Manager, cari esp8266 dan
instal.
c.
Pilih Board dan Port:
·
Pergi ke Tools > Board > ESP8266 Boards > pilih
LOLIN(WEMOS) D1 R2 & mini.
·
Pergi ke Tools > Port > pilih port yang sesuai dengan
Wemos D1 Mini.
d.
Tambahkan database sidik jari pada sensor fingerprint dengan
langkah berikut
·
Pilih file > Adafruit Fingerprint Sensor Library > enroll
· Kemudian tekan Upload
untuk mengupload program.
6.
Buka Serial Monitor untuk melihat output dari sensor fingerprint
dan OLED display.
·
Pergi ke Tools > Serial Monitor.
·
Pastikan baud rate diatur ke 9600.
7.
Letakkan jari pada sensor fingerprint dan amati pesan yang
ditampilkan pada OLED display:
·
Jika sidik jari dikenali, akan ditampilkan pesan "Data
Sesuai".
·
Jika sidik jari tidak dikenali, akan ditampilkan pesan
"Tidak Dikenal".
8.
Setelah itu masukkan program yang sudah disediakan di atas.
9.
Periksa koneksi dan pastikan semua komponen terhubung dengan
benar jika terdapat kesalahan dalam membaca sidik jari atau tampilan OLED tidak
sesuai.
·
Pastikan semua koneksi sesuai dengan skematik.
·
Jika terdapat kesalahan dalam membaca sidik jari atau tampilan
OLED tidak sesuai, periksa ulang sambungan kabel dan pastikan tidak ada kabel
yang longgar atau terputus.
G. Tugas
1.
Jelaskan bagaimana cara kerja rangkaian ini?
2.
Selanjutnya Paste program yang mengaktifkan relay ketika sensor membaca sidik jari yang dikenali,
dan mematikannya ketika sidik jari tersebut dikenali kembali. Jika sidik jari
tidak dikenali, relay tidak akan menyala.
Program :
#include <Adafruit_Fingerprint.h>
#include <Arduino.h>
#include <U8x8lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
U8X8_SSD1306_64X48_ER_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
#if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__)
SoftwareSerial mySerial(2, 0);
#else
#define mySerial Serial1
#endif
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
int relayPin = 15;
int relStat = 1;
void setup()
{
Serial.begin(9600);
u8x8.begin();
u8x8.setPowerSave(0);
while (!Serial);
delay(100);
Serial.println("\n\nKendali relay berbasis fingerprint");
finger.begin(57600);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, relStat);
delay(5);
if (finger.verifyPassword()) {
Serial.println("Sensor fingerprint terdeteksi");
} else {
Serial.println("Sensor fingerprint tidak ditemukan");
while (1) {
delay(1);
}
}
Serial.println(F("Membaca parameter sensor"));
finger.getParameters();
Serial.print(F("Status: 0x")); Serial.println(finger.status_reg, HEX);
Serial.print(F("Sys ID: 0x")); Serial.println(finger.system_id, HEX);
Serial.print(F("Capacity: ")); Serial.println(finger.capacity);
Serial.print(F("Security level: ")); Serial.println(finger.security_level);
Serial.print(F("Device address: ")); Serial.println(finger.device_addr, HEX);
Serial.print(F("Packet len: ")); Serial.println(finger.packet_len);
Serial.print(F("Baud rate: ")); Serial.println(finger.baud_rate);
finger.getTemplateCount();
if (finger.templateCount == 0) {
Serial.print("Sensor tidak memiliki data fingerprint. Mohon lakukan 'enroll'");
}
else {
Serial.println("Menunggu data fingerprint...");
Serial.print("Sensor menyimpan "); Serial.print(finger.templateCount); Serial.println(" data");
}
u8x8.setFont(u8x8_font_chroma48medium8_r);
u8x8.drawString(0, 0, " Relay");
u8x8.drawString(0, 1, " OFF");
u8x8.refreshDisplay();
}
void loop() {
getFingerprintID();
// u8x8.clear();
u8x8.refreshDisplay();
delay(50);
}
uint8_t getFingerprintID() {
if (relStat == 0) {
u8x8.drawString(0, 0, " Relay");
u8x8.drawString(0, 1, " ON");
}
else {
u8x8.drawString(0, 0, " Relay");
u8x8.drawString(0, 1, " OFF");
}
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Gambar diperoleh");
break;
case FINGERPRINT_NOFINGER:
Serial.println("Tidak ada jari terdeteksi");
u8x8.drawString(0, 3, " Sentuh");
u8x8.drawString(0, 4, " Sensor");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Komunikasi error");
return p;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Error saat menangkap gambar");
return p;
default:
Serial.println("Error yang tidak diketahui");
return p;
}
// OK success!
p = finger.image2Tz();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Gambar terkonversi");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Komunikasi error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Tidak dapat menemukan fitur fingerprint");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Tidak dapat menemukan fitur fingerprint");
return p;
default:
Serial.println("Error tidak diketahui");
return p;
}
// OK converted!
p = finger.fingerSearch();
if (p == FINGERPRINT_OK) {
Serial.println("Data fingerprint sesuai!");
if (relStat == 0) {
relStat = 1;
// u8x8.drawString(0, 0, "Relay");
// u8x8.drawString(0, 1, " OFF");
}
else if (relStat == 1) {
relStat = 0;
}
digitalWrite(relayPin, relStat);
Serial.println("TRIG");
u8x8.clear();
u8x8.drawString(0, 3, " Data");
u8x8.drawString(0, 4, " Sesuai");
delay(1000);
u8x8.clear();
}
else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Komunikasi error");
return p;
}
else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Data fingerprint tidak sesuai!");
u8x8.clear();
u8x8.drawString(0, 3, " Tidak");
u8x8.drawString(0, 4, " Dikenal");
delay(1000);
u8x8.clear();
return p;
}
else {
Serial.println("Error tidak diketahui");
return p;
}
// found a match!
Serial.print("Ditemukan ID #"); Serial.print(finger.fingerID);
Serial.print(" dengan confidence "); 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("Ditemukan ID #"); Serial.print(finger.fingerID);
Serial.print(" dengan confidence "); Serial.println(finger.confidence);
return finger.fingerID;
}
Jika program eror bisa gunakan link Drive
3.
Buatlah
laporan praktikum dan dikumpulkan!
No comments:
Post a Comment