Komponen · 12 mnt baca

Panduan Sensor Sidik Jari Arduino: AS608, R307, dan Kunci Pintu

Cara memakai sensor sidik jari dengan Arduino: warna kabel dan daya AS608/R307, enroll dan pencocokan dengan Adafruit Fingerprint, kunci pintu relay, ESP32, dan solusi error.

Sensor sidik jari membuat proyek Arduino bisa bertanya “kamu siapa?” hanya dengan satu sentuhan, lalu membuka pintu, laci, atau brankas begitu jarimu dikenali. Model yang paling umum di dunia elektronika hobi adalah modul optik berbasis AS608 dan R307: modul ini mengolah gambar jari di dalamnya sendiri, menyimpan sidik jari di memorinya sendiri, dan hanya mengirim jawaban pendek ke Arduino, misalnya “cocok dengan ID 3”. Karena itu, board kecil seperti Arduino Uno pun bisa dengan mudah menjalankan kunci sidik jari untuk ratusan orang.

Di panduan ini kamu akan belajar cara kerja sensor, cara menghubungkannya dengan benar walaupun warna kabelnya berbeda-beda tiap produsen, cara mendaftarkan (enroll) dan memverifikasi sidik jari dengan library Adafruit Fingerprint, serta arti ID dan skor kepercayaan. Setelah itu kamu akan membuat kunci pintu sungguhan dengan relay dan solenoid 12 V, melakukan hal yang sama dengan ESP32 dan Raspberry Pi Pico, lalu mengatasi error terkenal “Did not find fingerprint sensor” langkah demi langkah.

Sensor sidik jari optik AS608 dengan konektor 6 kabel
Sensor sidik jari optik AS608: jendela baca dengan prisma, chip DSP yang mengolah gambar, dan set konektor berkabel tipis. Warna kabel berbeda-beda tergantung penjual.

Apa itu sensor sidik jari dan bagaimana cara kerjanya?

Modul seperti AS608 dan R307 adalah sensor optik. Ketika kamu meletakkan jari di atas kaca, LED di dalamnya menerangi prisma di bawah kaca; punggung alur sidik jarimu menyentuh kaca dan memantulkan cahaya secara berbeda, sedangkan lembahnya tidak menyentuh. Kamera kecil menangkap pola ini sebagai gambar skala abu-abu dengan resolusi sekitar 500 dpi. Chip DSP di dalam modul mengambil titik-titik tempat alur berakhir atau bercabang (minutiae) lalu mengubahnya menjadi file karakter berukuran beberapa ratus byte. Dua file karakter dari jari yang sama digabung menjadi sebuah template, dan template itu disimpan di memori flash milik sensor sendiri dengan sebuah nomor ID.

Selama verifikasi, sensor kembali mengubah gambar baru menjadi file karakter dan membandingkannya dengan semua template yang tersimpan. Pencarian 1:N ini biasanya selesai dalam waktu kurang dari satu detik; di akhir, sensor mengirim ID yang cocok beserta skor kepercayaan (confidence) yang menunjukkan seberapa kuat kecocokannya. Poin pentingnya: gambar sidik jari tidak pernah sampai ke Arduino, semua pekerjaan berat dilakukan di dalam sensor. Arduino hanya mengirim perintah lewat port serial (UART) dan membaca balasan pendek.

FiturModul AS608R307FPM10A / ZFM-20
Catu daya3,3 V4,2–6 V (biasanya 5 V)3,6–6 V
Kapasitas penyimpananBiasanya 300 (162 di beberapa board)1000162
AntarmukaUART (TTL), default 57600 bpsUART (TTL), default 57600 bpsUART (TTL), default 57600 bps
Pin deteksi sentuhanAda (WAK + Vt)Ada (Touch + 3.3VT)Kebanyakan tidak ada
Tingkat keamanan1–51–51–5
Tingkat penerimaan salah (FAR)< 0,001%< 0,001%< 0,001%
Library ArduinoAdafruit FingerprintAdafruit FingerprintAdafruit Fingerprint

Nilai di tabel bisa berbeda tergantung penjual dan revisi board, terutama kapasitasnya. Cara yang paling bisa diandalkan adalah menjalankan sketch uji di bawah dan membaca kapasitas yang dilaporkan sensor itu sendiri. Mari kita perjelas juga tiga istilah: ID adalah nomor slot template di memori (dari 0 sampai kapasitas dikurangi satu); tingkat keamanan menentukan ambang pencocokan dari 1 (paling longgar) sampai 5 (paling ketat); dan skor kepercayaan adalah skor kemiripan yang dikirim sensor setiap kali ada kecocokan.

Warna kabel dan daya: kabel mana ke mana?

Kesalahan paling umum dengan sensor sidik jari adalah menganggap warna kabelnya standar. Model yang sama bisa datang dengan kabel merah-hitam-kuning-putih dari satu penjual dan merah-hitam-hijau-biru dari penjual lain; bahkan Adafruit mencantumkan susunan warna yang berbeda untuk versi sensor yang berbeda. Jadi jangan berpatokan pada warna: cek label pin di bagian belakang sensor atau di samping konektor, serta diagram dari penjual. Modul AS608 biasanya punya 6 pin: V+ (Vi), TX, RX, GND, WAK (Touch), dan Vt (3.3VT). Untuk pemakaian dasar, kamu cukup memakai empat pin pertama.

Pin sensorFungsiArduino UnoESP32Raspberry Pi Pico
V+ / Vi / VCCDaya3.3V (AS608) atau 5V (R307)3V3 (5V/VIN untuk R307)3V3(OUT) (VBUS untuk R307)
GNDGroundGNDGNDGND
TXData keluar dari sensorD2 (SoftwareSerial RX)GPIO 16 (RX2)GP1 (UART0 RX)
RXData masuk ke sensorD3 (SoftwareSerial TX)GPIO 17 (TX2)GP0 (UART0 TX)
WAK / TouchSinyal jari terdeteksi (opsional)D4GPIO 27GP2
Vt / 3.3VTDaya untuk rangkaian sentuh (opsional)3.3V3V33V3(OUT)
Sebagian besar board AS608 bekerja di 3,3 V; memberi 5 V ke sensor bertanda 3.3V bisa merusaknya secara permanen. Sebaliknya, R307 butuh 5 V dan sering sama sekali tidak merespons di 3,3 V. Pin 3.3V di Uno secara resmi hanya dirancang untuk 50 mA, sedangkan sensor optik menarik arus lebih besar ketika menangkap gambar (Adafruit mencantumkan arus kerja hingga 120 mA untuk sensor optiknya sendiri). Kalau board-mu reset secara acak atau sensornya sering menghilang, beri daya sensor dari regulator 3,3 V eksternal seperti AMS1117 dan satukan ground-nya. Karena pin D3 di Uno mengeluarkan 5 V, menambahkan pembagi tegangan 1 kΩ + 2 kΩ di jalur RX sensor 3,3 V adalah pilihan paling aman.

Pin WAK (atau Touch) terhubung ke rangkaian deteksi sentuhan berdaya rendah di dalam sensor. Dengan 3,3 V di pin Vt, level pin ini berubah begitu jari menyentuh kaca; di kebanyakan modul menjadi HIGH, di sebagian lagi menjadi LOW, jadi uji dulu di board-mu sendiri. Pada kunci bertenaga baterai, kamu bisa memutus catu daya utama dengan MOSFET, hanya membiarkan Vt tetap menyala, lalu memakai sinyal WAK untuk membangunkan mikrokontroler dari sleep dan baru menyalakan sensor ketika itu.

Menginstal library Adafruit Fingerprint

  1. Di Arduino IDE, buka Tools > Manage Libraries, cari Adafruit Fingerprint Sensor Library, lalu instal. Kalau kamu belum pernah menambahkan library, lihat Cara Instal Library Arduino.
  2. Library ini bekerja dengan semua sensor yang memakai set perintah yang sama, seperti AS608, R307, R503, FPM10A, dan seri ZFM; kode tidak perlu diubah.
  3. Di File > Examples kamu akan menemukan contoh enroll (pendaftaran), fingerprint (verifikasi), delete (menghapus satu data), dan emptyDatabase (menghapus semuanya).
  4. Di Uno dan Nano, sensor dihubungkan ke D2 dan D3 dengan SoftwareSerial, supaya tidak memakai pin 0 dan 1 yang dipakai koneksi USB. Board yang punya port serial hardware kedua, seperti Mega, Leonardo, dan ESP32, memakai Serial1 atau Serial2.

Uji pertama: apakah sensornya terdeteksi?

Sebelum mendaftarkan sidik jari, mari pastikan sensor sudah bisa berkomunikasi dengan Arduino. Sketch di bawah pertama-tama mencari sensor di kecepatan default 57600 bps, dan kalau tidak ketemu, mencoba baud rate umum lainnya. Begitu sensor ditemukan, sketch mencetak baud rate yang dijawab sensor, kapasitas yang dilaporkan, tingkat keamanan, dan jumlah sidik jari yang tersimpan ke Serial Monitor. Jangan lupa atur Serial Monitor ke 9600 baud; nilai ini tidak bergantung pada kecepatan sensor.

C++ (Arduino IDE)
1#include <Adafruit_Fingerprint.h>
2#include <SoftwareSerial.h>
3
4SoftwareSerial fpSerial(2, 3);            // D2 = RX (sensör TX), D3 = TX (sensör RX) / D2 = RX (sensor TX), D3 = TX (sensor RX)
5Adafruit_Fingerprint finger(&fpSerial);
6
7const uint32_t rates[] = {57600, 9600, 19200, 38400, 115200};   // denenecek hızlar / baud rates to try
8
9void setup() {
10  Serial.begin(9600);
11  Serial.println(F("Sensor araniyor / searching for sensor..."));
12  bool found = false;
13  for (uint8_t i = 0; i < 5 && !found; i++) {
14    finger.begin(rates[i]);               // 1 sn bekler, portu açar / waits 1 s, opens the port
15    if (finger.verifyPassword()) {        // sensör cevap verdi mi? / did the sensor answer?
16      Serial.print(F("Bulundu / found @ "));
17      Serial.println(rates[i]);
18      found = true;
19    }
20  }
21  if (!found) {
22    Serial.println(F("Did not find fingerprint sensor :("));
23    while (1) delay(1);
24  }
25  finger.getParameters();                 // kapasite ve ayarları oku / read capacity and settings
26  Serial.print(F("Kapasite / capacity: "));
27  Serial.println(finger.capacity);
28  Serial.print(F("Guvenlik / security level: "));
29  Serial.println(finger.security_level);
30  finger.getTemplateCount();              // kayıtlı şablon sayısı / number of stored templates
31  Serial.print(F("Kayitli iz / templates: "));
32  Serial.println(finger.templateCount);
33}
34
35void loop() {
36}

Mendaftarkan sidik jari langkah demi langkah

Selama pendaftaran (enroll), sensor mengambil dua gambar terpisah dari jari yang sama, menyimpannya sebagai file karakter di dua buffer (CharBuffer1 dan CharBuffer2), menggabungkannya menjadi template, lalu menulis template itu ke ID yang kamu pilih. Contoh enroll bawaan Adafruit meminta ID antara 1 dan 127 dan menyimpannya di variabel satu byte. Versi sederhana di bawah menyimpan ID dalam 16 bit dan mengambil batas atasnya dari kapasitas asli sensor, jadi kamu bisa memakai semua slot di sensor berkapasitas 300 atau 1000 sidik jari. Ini langkah-langkah di library-nya:

  1. getImage(): Terus mencoba mengambil gambar sampai ada jari di atas kaca; mengembalikan FINGERPRINT_NOFINGER kalau tidak ada jari.
  2. image2Tz(1): Mengubah gambar pertama menjadi file karakter dan menaruhnya di buffer 1.
  3. Jari diangkat, lalu jari yang sama diletakkan lagi; image2Tz(2) menaruh gambar kedua di buffer 2.
  4. createModel(): Membandingkan dan menggabungkan kedua buffer; mengembalikan FINGERPRINT_ENROLLMISMATCH kalau keduanya tidak cocok.
  5. storeModel(id): Menulis template secara permanen ke memori flash sensor; data tetap aman walaupun daya terputus.
C++ (Arduino IDE)
1#include <Adafruit_Fingerprint.h>
2#include <SoftwareSerial.h>
3
4SoftwareSerial fpSerial(2, 3);            // D2 = RX, D3 = TX
5Adafruit_Fingerprint finger(&fpSerial);
6
7void setup() {
8  Serial.begin(9600);
9  finger.begin(57600);
10  if (!finger.verifyPassword()) {
11    Serial.println(F("Did not find fingerprint sensor :("));
12    while (1) delay(1);
13  }
14  finger.getParameters();                 // gerçek kapasiteyi öğren / learn the real capacity
15  Serial.println(F("Kayit modu / enroll mode"));
16}
17
18// Parmak gelene kadar bekle, görüntüyü tampona çevir / wait for a finger, convert the image into a buffer
19bool captureTo(uint8_t slot) {
20  while (finger.getImage() != FINGERPRINT_OK) delay(50);
21  uint8_t p = finger.image2Tz(slot);
22  if (p != FINGERPRINT_OK) {
23    Serial.print(F("Goruntu kotu / bad image, kod / code 0x"));
24    Serial.println(p, HEX);
25    return false;
26  }
27  return true;
28}
29
30void loop() {
31  Serial.print(F("ID gir / enter ID (1-"));
32  Serial.print(finger.capacity - 1);
33  Serial.println(F("):"));
34  while (!Serial.available()) delay(10);
35  uint16_t id = Serial.parseInt();
36  while (Serial.available()) Serial.read();   // satır sonunu temizle / clear the line ending
37  if (id == 0 || id >= finger.capacity) return;
38
39  Serial.println(F("Parmagini koy / place your finger"));
40  if (!captureTo(1)) return;
41  Serial.println(F("Kaldir / remove your finger"));
42  delay(1000);
43  while (finger.getImage() != FINGERPRINT_NOFINGER) delay(50);   // parmak kalkana kadar / until the finger is lifted
44
45  Serial.println(F("Ayni parmagi tekrar koy / place the same finger again"));
46  if (!captureTo(2)) return;
47
48  uint8_t p = finger.createModel();       // iki görüntüyü birleştir / merge the two images
49  if (p == FINGERPRINT_ENROLLMISMATCH) {
50    Serial.println(F("Fingerprints did not match"));
51    return;
52  }
53  if (p != FINGERPRINT_OK) return;
54
55  p = finger.storeModel(id);              // sensörün flash belleğine yaz / write to the sensor's flash
56  if (p == FINGERPRINT_OK) {
57    Serial.print(F("Kaydedildi / stored, ID #"));
58    Serial.println(id);
59  } else {
60    Serial.print(F("Kayit hatasi / store error 0x"));
61    Serial.println(p, HEX);
62  }
63}
Ketik ID di Serial Monitor, tekan Enter, lalu ikuti petunjuknya. Pendaftaran yang baik menentukan kualitas semua pencocokan berikutnya: letakkan jarimu di tengah kaca tanpa menekan terlalu keras, dan ubah sudutnya sedikit saja untuk gambar kedua. Untuk kunci yang dipakai setiap hari, mendaftarkan jari yang sama dengan dua ID berbeda (sekali datar, sekali agak miring) menurunkan tingkat penolakan secara nyata. Catat ID mana milik siapa; sensor hanya tahu nomor, bukan nama.

Memverifikasi sidik jari: ID dan skor kepercayaan

Untuk verifikasi, pertama ambil gambar dengan getImage(), ubah dengan image2Tz(), lalu cari di antara template yang tersimpan. Library ini punya dua fungsi pencarian: fingerFastSearch() cepat, tetapi perintah yang dikirim library hanya memindai 163 data pertama (ID 0–162); fingerSearch() mencari di seluruh kapasitas yang dibaca dengan getParameters(). Kalau kamu akan memakai ID di atas 162, pakai fingerSearch() dan selalu panggil getParameters() di setup(); kalau tidak, library menganggap kapasitasnya default 64 dan hanya mencari di 64 data pertama.

Ketika pencarian berhasil, finger.fingerID memberi nomor data yang cocok dan finger.confidence memberi skor kepercayaannya. Sensor sendiri sudah memutuskan cocok atau tidaknya berdasarkan tingkat keamanan; skor ini hanya menunjukkan seberapa kuat kecocokannya. Dengan jari yang didaftarkan dengan baik, skornya biasanya berada di antara beberapa puluh sampai beberapa ratus. Untuk kunci yang lebih ketat, kamu bisa menaikkan ambangnya dengan setSecurityLevel(4) atau setSecurityLevel(5), atau menambahkan batas bawah sendiri di kode (misalnya, tolak semua yang di bawah 50). Ambang yang lebih tinggi menurunkan peluang orang yang salah diterima, tetapi menaikkan peluang orang yang benar ditolak; temukan keseimbangannya dengan menguji memakai jarimu sendiri.

Kode kembalianPesan di Serial MonitorArti dan solusi
FINGERPRINT_OK (0x00)“Image taken” / “Stored!”Operasi berhasil.
FINGERPRINT_NOFINGER (0x02)“No finger detected”Tidak ada jari di atas kaca; terus tunggu di dalam loop.
FINGERPRINT_PACKETRECIEVEERR (0x01)“Communication error”Paket balasan tidak diterima; cek pengkabelan, baud rate, dan catu daya.
FINGERPRINT_IMAGEFAIL (0x03)“Imaging error”Gambar gagal diambil; letakkan jari lagi.
FINGERPRINT_IMAGEMESS (0x06)“Image too messy”Gambar buram; bersihkan kacanya, mungkin jarinya terlalu basah atau terlalu kering.
FINGERPRINT_FEATUREFAIL (0x07)“Could not find fingerprint features”Detailnya kurang; posisikan jari di tengah dan tekan perlahan.
FINGERPRINT_NOTFOUND (0x09)“Did not find a match”Tidak ada data yang cocok; jari itu belum didaftarkan atau didaftarkan dengan kurang baik.
FINGERPRINT_ENROLLMISMATCH (0x0A)“Fingerprints did not match”Dua gambar pendaftaran tidak cocok; ulangi prosesnya.
FINGERPRINT_BADLOCATION (0x0B)“Could not store in that location”ID berada di luar kapasitas; baca batasnya dengan getParameters().
FINGERPRINT_FLASHERR (0x18)“Error writing to flash”Gagal menulis ke memori sensor; cek catu daya dan pengkabelan.

Kunci pintu sidik jari dengan relay dan solenoid

Sekarang mari gabungkan semuanya untuk membuat kunci pintu yang terbuka selama 3 detik untuk jari yang berwenang, berbunyi bip tiga kali untuk jari yang tidak dikenal, dan mengunci sistem selama 30 detik setelah 5 kali percobaan gagal berturut-turut. Sebagai kuncinya kita memakai kunci solenoid 12 V. Solenoid menarik arus 0,5–1 A, jadi jangan pernah menghubungkannya langsung ke pin Arduino; pasang modul relay atau MOSFET logic-level di antaranya. Pengkabelannya: VCC dan GND modul relay ke 5V dan GND Arduino, pin IN-nya ke D8, buzzer aktif ke D9, kutub positif adaptor 12 V ke terminal COM relay, terminal NO relay ke kutub positif solenoid, dan kutub negatif solenoid ke kutub negatif adaptor.

Solenoid adalah kumparan, dan kumparan menghasilkan tegangan balik yang tinggi begitu arusnya diputus. Karena itu, pasang dioda 1N4007 secara terbalik di kedua ujung solenoid; ujung dioda yang bergaris menghadap ke sisi positif. Kalau kamu memakai MOSFET sebagai pengganti relay, pilih komponen logic-level seperti IRLZ44N dan hubungkan kutub negatif catu daya 12 V ke GND Arduino. Untuk detailnya, lihat Memakai MOSFET dengan Arduino, dan untuk urutan kaki MOSFET, cek alat pinout transistor.

C++ (Arduino IDE)
1#include <Adafruit_Fingerprint.h>
2#include <SoftwareSerial.h>
3
4SoftwareSerial fpSerial(2, 3);            // D2 = RX, D3 = TX
5Adafruit_Fingerprint finger(&fpSerial);
6
7const int RELAY_PIN = 8;                  // röle modülü IN / relay module IN
8const int BUZZER_PIN = 9;                 // aktif buzzer / active buzzer
9const uint8_t RELAY_ON = LOW;             // çoğu röle modülü LOW ile çeker / most relay modules switch on LOW
10const uint8_t RELAY_OFF = HIGH;
11const uint16_t MIN_CONFIDENCE = 50;       // ek güven eşiği / extra confidence threshold
12const unsigned long OPEN_MS = 3000;       // kilidin açık kalma süresi / unlock time
13
14uint8_t failCount = 0;
15
16void setup() {
17  digitalWrite(RELAY_PIN, RELAY_OFF);     // açılışta kilitli kalsın / stay locked at power-up
18  pinMode(RELAY_PIN, OUTPUT);
19  pinMode(BUZZER_PIN, OUTPUT);
20  Serial.begin(9600);
21  finger.begin(57600);
22  if (!finger.verifyPassword()) {
23    Serial.println(F("Did not find fingerprint sensor :("));
24    while (1) delay(1);
25  }
26  finger.getParameters();                 // fingerSearch için kapasite / capacity for fingerSearch
27}
28
29// Eşleşen ID; parmak yoksa -1, tanınmadıysa -2 / matching ID; -1 no finger, -2 not recognised
30int readFinger() {
31  if (finger.getImage() != FINGERPRINT_OK) return -1;
32  if (finger.image2Tz(1) != FINGERPRINT_OK) return -2;
33  if (finger.fingerSearch(1) != FINGERPRINT_OK) return -2;
34  if (finger.confidence < MIN_CONFIDENCE) return -2;
35  return finger.fingerID;
36}
37
38void beep(int count, int ms) {
39  for (int i = 0; i < count; i++) {
40    digitalWrite(BUZZER_PIN, HIGH);
41    delay(ms);
42    digitalWrite(BUZZER_PIN, LOW);
43    delay(ms);
44  }
45}
46
47void loop() {
48  int id = readFinger();
49  if (id >= 0) {
50    Serial.print(F("Hos geldin / welcome, ID #"));
51    Serial.print(id);
52    Serial.print(F(", guven / confidence "));
53    Serial.println(finger.confidence);
54    failCount = 0;
55    beep(1, 100);
56    digitalWrite(RELAY_PIN, RELAY_ON);    // kilidi aç / unlock
57    delay(OPEN_MS);
58    digitalWrite(RELAY_PIN, RELAY_OFF);   // yeniden kilitle / lock again
59  } else if (id == -2) {
60    failCount++;
61    Serial.println(F("Yetkisiz / not authorised"));
62    beep(3, 80);
63    if (failCount >= 5) {                 // 5 hatada 30 sn bekle / 30 s lockout after 5 failures
64      Serial.println(F("30 sn kilitli / locked for 30 s"));
65      delay(30000);
66      failCount = 0;
67    }
68    delay(1000);
69  }
70  delay(50);
71}
Proyek ini bagus untuk belajar dan untuk hobi, tetapi kalau berdiri sendiri, ini bukan sistem keamanan sungguhan. Sensor optik bisa dikelabui dengan cetakan sidik jari yang dibuat dengan baik, dan siapa pun yang bisa menjangkau kabelnya bisa langsung memicu relay. Pada pintu sungguhan, simpan bagian elektroniknya di sisi dalam, sediakan kunci mekanis atau cara lain untuk membuka pintu, dan pikirkan apa yang terjadi pada kunci ketika listrik padam: solenoid tipe kotak biasanya tetap terkunci tanpa daya, sedangkan kunci elektromagnetik justru terbuka. Jangan biarkan solenoid dialiri arus terlalu lama; kumparannya akan panas dan bisa rusak.

Sensor sidik jari dengan ESP32: koneksi Serial2

ESP32 punya tiga port serial hardware, jadi kamu tidak butuh SoftwareSerial; sensor dihubungkan ke UART2 (Serial2). Karena ESP32 bekerja di 3,3 V, level sinyalnya pas dengan AS608 dan tidak perlu pembagi tegangan. Satu-satunya hal yang perlu diperhatikan adalah pinnya: di core Arduino-ESP32 versi terbaru (3.x), pin default Serial2 bukan lagi GPIO 16/17 seperti di tutorial lama, melainkan GPIO 4 (RX) dan GPIO 25 (TX). Karena itu, sebaiknya tulis pinnya secara eksplisit di Serial2.begin(); fungsi begin() milik library tetap memakai pin yang sudah kamu atur sebelumnya. Peta pin board-mu bisa kamu lihat di alat diagram pin.

C++ (Arduino IDE)
1#include <Adafruit_Fingerprint.h>
2
3#define FP_RX 16                          // ESP32 RX2 <- sensör TX / sensor TX
4#define FP_TX 17                          // ESP32 TX2 -> sensör RX / sensor RX
5const int RELAY_PIN = 23;                 // röle modülü IN / relay module IN
6
7Adafruit_Fingerprint finger(&Serial2);
8
9void setup() {
10  Serial.begin(115200);
11  pinMode(RELAY_PIN, OUTPUT);
12  digitalWrite(RELAY_PIN, HIGH);          // LOW tetiklemeli röle kapalı / active-LOW relay off
13  Serial2.begin(57600, SERIAL_8N1, FP_RX, FP_TX);   // pinleri açıkça ver / set the pins explicitly
14  finger.begin(57600);                    // önceki pinleri korur / keeps the pins set above
15  if (!finger.verifyPassword()) {
16    Serial.println("Did not find fingerprint sensor :(");
17    while (true) delay(10);
18  }
19  finger.getParameters();
20  finger.getTemplateCount();
21  Serial.printf("Kapasite / capacity: %u, kayitli / stored: %u\n", finger.capacity, finger.templateCount);
22}
23
24void loop() {
25  if (finger.getImage() == FINGERPRINT_OK && finger.image2Tz(1) == FINGERPRINT_OK) {
26    if (finger.fingerSearch(1) == FINGERPRINT_OK) {
27      Serial.printf("ID #%u, guven / confidence %u\n", finger.fingerID, finger.confidence);
28      digitalWrite(RELAY_PIN, LOW);       // kilidi aç / unlock
29      delay(3000);
30      digitalWrite(RELAY_PIN, HIGH);      // yeniden kilitle / lock again
31    } else {
32      Serial.println("Did not find a match");
33      delay(1000);
34    }
35  }
36  delay(50);
37}

Pada board dengan modul ESP32-WROVER, GPIO 16 dan 17 terhubung ke PSRAM; di board seperti itu, ganti FP_RX dan FP_TX, misalnya menjadi 25 dan 26. ESP32-C3 hanya punya dua UART, jadi tidak ada Serial2; kamu bisa memakai kode yang sama dengan Serial1 dan dua pin mana pun yang kamu suka. Berkat Wi-Fi, kamu bisa mencatat setiap akses masuk beserta waktunya ke server, atau mengirim notifikasi ke ponselmu lewat bot Telegram ketika ada jari yang tidak dikenal.

Sensor sidik jari dengan Raspberry Pi Pico dan MicroPython

Belum ada versi MicroPython resmi dari library Adafruit, tetapi protokol sensornya cukup sederhana untuk kamu ajak bicara sendiri dengan beberapa baris kode. Setiap paket diawali kode awal EF 01, diikuti alamat 4 byte (default FF FF FF FF), jenis paket (01 perintah, 07 balasan), panjang 2 byte, perintah dan parameternya, dan terakhir checksum 2 byte yang berupa jumlah dari byte jenis, panjang, dan data. Byte data pertama dari balasan adalah kode konfirmasi: 00 berhasil, 02 tidak ada jari, 09 tidak cocok. Kode di bawah memverifikasi sensor, membaca kapasitas, dan mengenali jari di atas kaca beserta ID dan skor kepercayaannya. Karena Pico bekerja di 3,3 V, kamu bisa menghubungkan AS608 langsung ke pin 3V3(OUT); kalau kamu baru mengenal Pico, Apa Itu Raspberry Pi Pico? adalah titik awal yang bagus.

MicroPython
1from machine import UART, Pin
2import time
3
4# GP0 = UART0 TX -> sensör RX, GP1 = UART0 RX <- sensör TX / sensor RX, sensor TX
5uart = UART(0, baudrate=57600, tx=Pin(0), rx=Pin(1), timeout=2000, timeout_char=100)
6HEADER = b'\xEF\x01\xFF\xFF\xFF\xFF'          # başlangıç kodu + adres / start code + address
7
8def command(*data):
9    while uart.any():                          # eski baytları at / drop stale bytes
10        uart.read()
11    length = len(data) + 2                     # veri + 2 bayt sağlama / data + 2-byte checksum
12    body = bytes([0x01, length >> 8, length & 0xFF]) + bytes(data)   # 0x01 = komut paketi / command packet
13    s = sum(body)
14    uart.write(HEADER + body + bytes([(s >> 8) & 0xFF, s & 0xFF]))
15    head = uart.read(9)                        # başlık + tip + uzunluk / header + type + length
16    if not head or len(head) < 9 or head[0] != 0xEF:
17        return None
18    n = (head[7] << 8) | head[8]
19    rest = uart.read(n)
20    if not rest or len(rest) < n:
21        return None
22    return rest[:-2]                           # sağlama hariç veri / data without checksum
23
24def ok(r):
25    return r is not None and r[0] == 0x00      # 0x00 = başarılı / success
26
27time.sleep(1)                                  # sensörün açılmasını bekle / let the sensor boot up
28if not ok(command(0x13, 0, 0, 0, 0)):          # VfyPwd: şifre 0 / password 0
29    print("Did not find fingerprint sensor")
30    while True:
31        time.sleep(1)
32
33p = command(0x0F)                              # ReadSysPara: sistem parametreleri / system parameters
34capacity = (p[5] << 8) | p[6] if ok(p) else 162
35print("Kapasite / capacity:", capacity)
36
37def identify():
38    if not ok(command(0x01)):                  # GenImg: parmak yoksa 0x02 / 0x02 = no finger
39        return None
40    if not ok(command(0x02, 1)):               # Img2Tz: CharBuffer1'e çevir / convert into CharBuffer1
41        return (-1, 0)
42    r = command(0x04, 1, 0, 0, capacity >> 8, capacity & 0xFF)   # Search: tüm kayıtlar / all records
43    if not ok(r):
44        return (-1, 0)                         # 0x09 = eşleşme yok / no match
45    return ((r[1] << 8) | r[2], (r[3] << 8) | r[4])   # (ID, güven / confidence)
46
47while True:
48    res = identify()
49    if res:
50        fid, score = res
51        if fid >= 0:
52            print("ID", fid, "guven / confidence", score)
53        else:
54            print("Eslesme yok / no match")
55        time.sleep(1)
56    time.sleep_ms(100)

Error “Did not find fingerprint sensor” dan masalah umum lainnya

Pesan ini berarti library tidak menerima balasan yang valid dari sensor untuk perintah verifyPassword(); bukan berarti sensornya rusak. Sebagian besar kasus berasal dari pengkabelan, catu daya, atau baud rate yang salah. Periksa tabel di bawah dari atas ke bawah:

GejalaKemungkinan penyebabSolusi
“Did not find fingerprint sensor :(”TX dan RX disambung lurusTX sensor ke RX Arduino (D2) dan RX sensor ke TX (D3). Menukar posisi kedua kabel data tidak merusak apa pun, jadi coba saja.
“Did not find fingerprint sensor :(”Mengandalkan warna kabelSambung ulang sesuai label pin di board atau diagram dari penjual; pastikan GND dengan multimeter.
“Did not find fingerprint sensor :(”Daya salah atau kurangBeri AS608 3,3 V dan R307 5 V; kalau pin 3.3V di Uno tidak cukup, pakai regulator eksternal dan satukan ground-nya.
“Did not find fingerprint sensor :(”Sensor memakai baud rate lainJalankan pemindaian baud di sketch uji pertama dan masukkan nilai yang ditemukan ke finger.begin().
“Did not find fingerprint sensor :(”Password sensor sudah digantiBerikan password-nya ke konstruktor: Adafruit_Fingerprint finger(&fpSerial, 0x12345678);
Sensor tidak terdeteksi di Mega atau LeonardoSoftwareSerial tidak bisa menerima data di semua pinPakai Serial1: RX1 19, TX1 18 di Mega; RX 0, TX 1 di Leonardo.
Sensor tidak terdeteksi di ESP32Pin default Serial2 berbeda atau bentrok dengan PSRAMTulis pinnya secara eksplisit dengan Serial2.begin(57600, SERIAL_8N1, RX, TX); jangan pakai 16/17 di WROVER.
Sering muncul “Communication error”Konektor longgar, kabel panjang atau tipisBuat kabelnya pendek, pakai sambungan solder alih-alih breadboard, dan tambahkan kapasitor 100 µF di catu daya.
Jari yang sudah terdaftar sering ditolakKaca kotor, jari kering atau basah, didaftarkan dari satu sudut sajaLap kaca dengan kain lembut, daftarkan jari yang sama dengan dua ID, dan turunkan tingkat keamanan ke 2 kalau perlu.
Sensor terasa hangat, LED tidak pernah menyalaPolaritas daya terbalik atau AS608 diberi 5 VSegera putus dayanya dan perbaiki pengkabelan; sensornya mungkin sudah rusak.
Cara cepat untuk mempersempit masalah adalah menghubungkan sensor ke konverter USB-TTL dan mengujinya dengan program uji Windows seperti SFGDemo: kalau sensor muncul di sana, masalahnya ada di pengkabelan atau kode di sisi Arduino. Ingat juga bahwa kecepatan Serial Monitor (9600) dan kecepatan sensor (57600) adalah dua hal yang berbeda; jangan sampai tertukar.

Pembaca sidik jari UART Waveshare: catatan singkat

Modul pembaca sidik jari UART Waveshare dan board pengendalinya
Waveshare UART Fingerprint Reader: sensor optiknya terhubung lewat kabel pita ke board pengendali terpisah dengan prosesor STM32F205; board ini punya pin VCC, GND, TXD, RXD, BL, dan RST.

Walaupun tampilannya mirip, pembaca sidik jari UART dari Waveshare memakai protokol yang berbeda dari AS608 dan R307: perintahnya sepanjang 8 byte, diawali dan diakhiri dengan 0xF5, dan kecepatan default-nya 19200 bps. Karena itu, modul ini tidak bisa dipakai dengan library Adafruit Fingerprint; kamu memakai tabel perintah dan contoh kode dari buku panduan pengguna Waveshare. Selama pendaftaran, jari dipindai tiga kali, setiap pengguna bisa diberi tingkat hak akses dari 1 sampai 3, dan perbandingan 1:N dilakukan dengan satu perintah saja. Board-nya bisa diberi daya 3,3 V atau 5 V; TXD dihubungkan ke RX mikrokontroler dan RXD ke TX-nya. Kalau kamu ingin banyak library dan contoh siap pakai, pilih AS608 atau R307; kalau kamu tidak keberatan menulis kode protokol sendiri, Waveshare adalah pilihan yang bagus.

Ide proyek dengan sensor sidik jari

  • Laci atau brankas sidik jari: Brankas kecil yang terbuka dengan servo atau solenoid dan membunyikan alarm ketika ada percobaan tanpa izin. Untuk mekanisme kunci servo, lihat Apa Itu Motor Servo?
  • Pintu dua tahap: Akses masuk yang lebih aman, meminta sidik jari dulu lalu PIN di keypad.
  • Kartu atau jari: Tambahkan pembaca RFID RC522 ke kunci yang sama, jadi yang punya kartu masuk dengan kartu dan yang lain dengan jari.
  • Sistem absensi: Pasangkan setiap ID dengan nama untuk sekolah atau klub, lalu catat waktu masuknya.
  • Kunci dengan layar: Tampilkan pesan sambutan dan nama orangnya di layar OLED.
  • Digabung dengan alarm rumah: Sistem alarm Arduino yang diaktifkan dan dimatikan dengan sidik jari.

Dengan beberapa kabel dan library yang tepat, sensor sidik jari menambahkan lapisan identitas sungguhan ke proyekmu: uji sensornya dulu, daftarkan jari dengan teliti, lalu bangun kuncinya dengan relay dan solenoid. Di aplikasi BlueGrays kamu akan menemukan proyek keamanan seperti Brankas Elektronik Pintar, Autentikasi RFID, Kunci Pintu RFID ESP32, dan Kunci Sandi dengan Keypad, masing-masing dengan skema rangkaian dan kode langkah demi langkah, sehingga kamu punya fondasi siap pakai untuk menambahkan sensor sidik jari.

Pertanyaan umum

Berapa banyak sidik jari yang bisa disimpan sensor sidik jari?

Tergantung modelnya: board AS608 biasanya menampung 300 (sebagian 162), R307 menampung 1000, sedangkan FPM10A dan ZFM-20 menampung 162. Untuk mengetahui kapasitas sensormu sendiri, panggil getParameters() lalu cetak finger.capacity ke Serial Monitor. Ingat, mendaftarkan jari yang sama dengan dua ID memakai dua slot.

Sensor sidik jari bekerja di 5 V atau 3,3 V?

Sebagian besar board AS608 butuh 3,3 V, sedangkan R307 bekerja di 4,2–6 V, biasanya 5 V. Jangan sambungkan daya sebelum mengecek label di sensor dan spesifikasi dari penjual. Ketika kamu menghubungkan output TX dari Arduino 5 V ke RX sensor 3,3 V, pembagi tegangan adalah pilihan paling aman.

Apakah sidik jari disimpan di Arduino, dan apakah hilang ketika listrik padam?

Tidak, template disimpan di memori flash milik sensor sendiri dan tidak terhapus ketika listrik padam. Walaupun kamu mengganti Arduino atau meng-upload kode baru, datanya tetap ada di sensor. Di sisi Arduino kamu cukup mencatat ID mana milik siapa; kalau mau, catatan itu bisa kamu simpan di EEPROM.

Bagaimana cara mengatasi error “Did not find fingerprint sensor”?

Pertama, pastikan TX dan RX disambung silang: TX sensor ke pin RX Arduino (D2 di Uno). Lalu cek apakah catu dayanya bertegangan benar dengan arus yang cukup dan ground-nya sudah disatukan. Kalau masih tidak terdeteksi, mungkin sensornya memakai baud rate lain atau password; jalankan sketch uji yang mencoba beberapa baud rate.

Apa perbedaan AS608 dan R307?

Keduanya sensor optik yang memakai set perintah yang sama dan bekerja dengan kode yang sama di library Adafruit Fingerprint. Perbedaan utamanya ada di daya dan kapasitas: board AS608 biasanya bekerja di 3,3 V dan menampung sekitar 300 data, sedangkan R307 bekerja di 5 V dan bisa menampung 1000. Cek urutan pin pada label model milikmu sebelum menyambungkannya.

Bagaimana cara menghapus sidik jari yang tersimpan?

Pakai finger.deleteModel(id) untuk menghapus satu data dan finger.emptyDatabase() untuk menghapus semuanya. Contoh delete dan emptyDatabase di library melakukannya lewat Serial Monitor. Nanti kamu bisa mendaftarkan sidik jari baru ke ID yang sudah dihapus.

Lihat semua proyek
Brankas Elektronik Pintar
#92Mahir
Premium

Brankas Elektronik Pintar

Brankas kecil untuk barang berhargamu yang terbuka dengan kode. Kamu mengetik kode empat digitmu di keypad; jika benar, motor servo membuka kunci, lampu hijau menyala, dan layar menampilkan keadaan br

4.7(42)
63
Kunci Pintu RFID ESP32 (RC522 + Servo + OLED + Buzzer + LED)
#137Mahir
Premium

Kunci Pintu RFID ESP32 (RC522 + Servo + OLED + Buzzer + LED)

Kita membuat kunci pintu pintar dengan ESP32, modul RFID RC522, motor servo SG90, layar OLED SSD1306, buzzer aktif, dan 2 LED. Ketika sebuah kartu dipindai, UID-nya dibandingkan dengan daftar kartu resmi yang disimpan di kode; jika resmi, motor servo berputar untuk membuka kunci (LED hijau + 2 bunyi bip pendek), dan pintu otomatis terkunci lagi setelah 5 detik. Untuk kartu tidak resmi, LED merah menyala, peringatan diberikan dengan 3 bunyi bip cepat, dan UID yang terbaca ditampilkan di layar.

4.8(9)
15
Autentikasi RFID
#54Menengah
Premium

Autentikasi RFID

Persis seperti akses kartu di pintu apartemen: kamu mendekatkan kartumu ke pembaca RFID, dan Arduino membandingkan nomornya dengan yang tersimpan. Kartu yang benar menyalakan LED hijau selama tiga det

4.8(64)
83
Membaca Nilai RFID
#53Pemula
Premium

Membaca Nilai RFID

Gantungan kunci akses gedung atau kartu aksesmu menyimpan nomor ID rahasia, dan proyek ini membacanya. Dekatkan kartu ke pembaca RFID dan Arduino menulis nomor kartunya ke layar komputermu. Langkah pe

4.7(47)
61
Kunci Sandi dengan Keypad 4x4 dan LCD
#64Mahir
Premium

Kunci Sandi dengan Keypad 4x4 dan LCD

Kunci pintu elektronik kecil yang menahan siapa pun yang tidak tahu kodenya. Kamu menekan tombol pagar lalu mengetik kodenya di keypad; jika benar, layar menulis akses diberikan, LED hijau menyala, da

4.8(59)
75
Pembaca Kartu RFID RC522 ESP32 (dengan LCD)
#123Menengah

Pembaca Kartu RFID RC522 ESP32 (dengan LCD)

Di proyek ini, kita menyambungkan modul RFID RC522 berbasis MFRC522 ke ESP32 lewat SPI dan membaca UID kartu/tag. Ini menjadi dasar untuk aplikasi seperti kunci pintu, sistem keanggotaan, dan kontrol akses. Kita menampilkan UID yang terbaca di layar LCD; versi ini tidak membandingkannya dengan daftar kartu yang diizinkan. PERINGATAN: RC522 hanya bekerja di 3.3V; memberinya 5V akan membakar modulnya!

4.8(21)
39
Sensor Pintu dengan Sakelar Reed
#38Pemula
Premium

Sensor Pintu dengan Sakelar Reed

Ketahui apakah pintumu terbuka atau tertutup hanya dengan melihat lampu. Kamu menempelkan magnet kecil di pintu dan sakelar peka magnet di kusennya; ketika pintu tertutup keduanya bersebelahan dan LED

4.7(34)
44
Sistem Alarm Gerakan ESP32 (PIR + Buzzer + LED + Telegram)
#145Mahir
Premium

Sistem Alarm Gerakan ESP32 (PIR + Buzzer + LED + Telegram)

Sistem alarm keamanan pintar yang menyalakan buzzer dan LED ketika sensor PIR mendeteksi gerakan, sekaligus mengirim notifikasi instan ke pemilik lewat Telegram. Cooldown 30 detik membatasi seberapa sering alarm berulang; mekanisme ini tidak memvalidasi deteksi PIR atau menghilangkan pemicu palsu. Cocok untuk rumah, garasi, gudang, atau ruang kerja. Dengan ESP32-CAM bisa ditambahkan notifikasi berfoto; dengan ESP32 DevKit V1 klasik, notifikasinya berupa teks.

0.0(0)
9