Fingerprint sensor (sensor sidik jari) adalah perangkat elektronik yang digunakan untuk memindai, mendeteksi, dan mengidentifikasi sidik jari seseorang.Berikut ini adalah cara memprogram nya :
#include <Arduino.h>
#include <Adafruit_Fingerprint.h>
// Gunakan Serial1 untuk ESP32
#define mySerial Serial1 // Sesuaikan dengan port yang digunakan, misalnya Serial1 atau Serial2
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
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;
}
// Convert image to template
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;
}
// Search the finger in the stored templates
p = finger.fingerSearch();
if (p == FINGERPRINT_OK) {
Serial.println("Found a print match!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Did not find a match");
return p;
} else {
Serial.println("Unknown error");
return p;
}
// Print the matched ID and confidence level
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
return finger.fingerID;
}
void setup() {
Serial.begin(115200); // Baud rate untuk komunikasi dengan serial monitor
mySerial.begin(57600); // Baud rate untuk komunikasi dengan sensor
while (!Serial); // Menunggu serial untuk siap
delay(100);
Serial.println("Adafruit Fingerprint Sensor Test");
// Cek apakah sensor fingerprint terhubung
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1) { delay(1); }
}
// Baca parameter sensor untuk pengecekan
Serial.println("Reading sensor parameters");
finger.getParameters();
Serial.print("Status: 0x"); Serial.println(finger.status_reg, HEX);
Serial.print("Sys ID: 0x"); Serial.println(finger.system_id, HEX);
Serial.print("Capacity: "); Serial.println(finger.capacity);
Serial.print("Security level: "); Serial.println(finger.security_level);
Serial.print("Device address: "); Serial.println(finger.device_addr, HEX);
Serial.print("Packet len: "); Serial.println(finger.packet_len);
Serial.print("Baud rate: "); Serial.println(finger.baud_rate);
// Cek apakah ada template sidik jari yang tersimpan
finger.getTemplateCount();
if (finger.templateCount == 0) {
Serial.println("Sensor doesn't contain any fingerprint data. Please enroll some fingerprints.");
} else {
Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
}
}
void loop() {
// Fungsi untuk mendeteksi ID sidik jari yang cocok
int fingerID = getFingerprintID();
// Jika ditemukan ID sidik jari, lakukan sesuatu
if (fingerID != -1) {
Serial.print("Finger ID: "); Serial.println(fingerID);
}
delay(200); // Tunda sebentar sebelum mencoba lagi
}
Berikut ini adalah penjelasan dari kode di atas :
1. Inisialisasi Library
#include <Arduino.h>
#include <Adafruit_Fingerprint.h>
Arduino.h
: Library dasar yang digunakan untuk komunikasi dengan platform Arduino.Adafruit_Fingerprint
: Library khusus dari Adafruit untuk berinteraksi dengan sensor sidik jari mereka. Ini menyediakan berbagai fungsi untuk memproses gambar sidik jari dan melakukan pencocokan template.
2. Menentukan Port Serial
#define mySerial Serial1 // Sesuaikan dengan port yang digunakan, misalnya Serial1 atau Serial2
mySerial
digunakan untuk komunikasi dengan sensor sidik jari. Pada ESP32, Anda dapat menggunakan beberapa port serial. Di sini,Serial1
dipilih untuk komunikasi dengan sensor. Kamu bisa menggantinya denganSerial2
jika diperlukan, tergantung pada port yang digunakan untuk koneksi dengan sensor.
3. Membuat Objek untuk Sensor Sidik Jari
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
- Membuat objek
finger
yang merupakan instansiasi dari kelasAdafruit_Fingerprint
. Objek ini memungkinkan kamu untuk mengakses berbagai fungsi dari sensor sidik jari.
4. Fungsi getFingerprintID
Fungsi ini bertanggung jawab untuk menangkap gambar sidik jari, mengkonversinya menjadi template, dan mencari template yang cocok di dalam database sensor.
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;
}
finger.getImage()
: Mengambil gambar sidik jari dari sensor. Jika tidak ada sidik jari yang terdeteksi, akan mengembalikan statusFINGERPRINT_NOFINGER
.- Setelah gambar diambil, ada beberapa kemungkinan hasil yang bisa muncul, seperti
FINGERPRINT_OK
(berhasil mengambil gambar), atauFINGERPRINT_NOFINGER
(tidak ada sidik jari yang terdeteksi).
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;
}
finger.image2Tz()
: Mengonversi gambar sidik jari yang diambil menjadi template yang dapat diproses lebih lanjut. Jika template berhasil dibuat, statusFINGERPRINT_OK
akan dikembalikan.- Jika ada masalah dengan konversi gambar (misalnya gambar terlalu berantakan), sensor akan mengembalikan error seperti
FINGERPRINT_IMAGEMESS
atauFINGERPRINT_FEATUREFAIL
.
p = finger.fingerSearch();
if (p == FINGERPRINT_OK) {
Serial.println("Found a print match!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Did not find a match");
return p;
} else {
Serial.println("Unknown error");
return p;
}
finger.fingerSearch()
: Mencari kecocokan sidik jari yang terdaftar dalam database sensor. Jika ditemukan kecocokan, akan mengembalikanFINGERPRINT_OK
.- Jika tidak ada kecocokan, status
FINGERPRINT_NOTFOUND
dikembalikan.
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
return finger.fingerID;
}
- Jika kecocokan ditemukan, ID sidik jari yang cocok dan tingkat kepercayaan (confidence level) akan dicetak ke Serial Monitor.
5. Fungsi setup()
void setup() {
Serial.begin(115200); // Baud rate untuk komunikasi dengan serial monitor
mySerial.begin(57600); // Baud rate untuk komunikasi dengan sensor
Serial.begin(115200)
: Menginisialisasi komunikasi serial dengan komputer (untuk debugging).mySerial.begin(57600)
: Menginisialisasi komunikasi serial dengan sensor sidik jari pada baud rate 57600 (default untuk Adafruit Fingerprint sensor).
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1) { delay(1); }
}
finger.verifyPassword()
: Mengecek apakah sensor sidik jari dapat terhubung dengan benar dan memiliki password yang benar. Jika berhasil, sensor siap digunakan.
finger.getParameters();
// Membaca parameter sensor untuk pengecekan dan debugging
finger.getParameters()
: Membaca beberapa parameter dari sensor untuk memastikan bahwa sensor berfungsi dengan baik, seperti status sensor, ID sistem, kapasitas template, tingkat keamanan, dan banyak lagi.
finger.getTemplateCount();
if (finger.templateCount == 0) {
Serial.println("Sensor doesn't contain any fingerprint data. Please enroll some fingerprints.");
} else {
Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
}
finger.getTemplateCount()
: Mengecek berapa banyak template sidik jari yang sudah tersimpan di sensor. Jika tidak ada template, sensor akan meminta untuk menambahkannya.
6. Fungsi loop()
void loop() {
int fingerID = getFingerprintID();
if (fingerID != -1) {
Serial.print("Finger ID: "); Serial.println(fingerID);
}
delay(200); // Tunda sebentar sebelum mencoba lagi
}
- Fungsi
loop()
berulang kali memanggilgetFingerprintID()
untuk mencoba mendeteksi sidik jari yang cocok. Jika ditemukan ID sidik jari, ID tersebut akan dicetak ke Serial Monitor.
untuk diskusi bisa kontak dibawah ini :

Sosial media :