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.

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.
| Fitur | Modul AS608 | R307 | FPM10A / ZFM-20 |
|---|---|---|---|
| Catu daya | 3,3 V | 4,2–6 V (biasanya 5 V) | 3,6–6 V |
| Kapasitas penyimpanan | Biasanya 300 (162 di beberapa board) | 1000 | 162 |
| Antarmuka | UART (TTL), default 57600 bps | UART (TTL), default 57600 bps | UART (TTL), default 57600 bps |
| Pin deteksi sentuhan | Ada (WAK + Vt) | Ada (Touch + 3.3VT) | Kebanyakan tidak ada |
| Tingkat keamanan | 1–5 | 1–5 | 1–5 |
| Tingkat penerimaan salah (FAR) | < 0,001% | < 0,001% | < 0,001% |
| Library Arduino | Adafruit Fingerprint | Adafruit Fingerprint | Adafruit 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 sensor | Fungsi | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|---|
| V+ / Vi / VCC | Daya | 3.3V (AS608) atau 5V (R307) | 3V3 (5V/VIN untuk R307) | 3V3(OUT) (VBUS untuk R307) |
| GND | Ground | GND | GND | GND |
| TX | Data keluar dari sensor | D2 (SoftwareSerial RX) | GPIO 16 (RX2) | GP1 (UART0 RX) |
| RX | Data masuk ke sensor | D3 (SoftwareSerial TX) | GPIO 17 (TX2) | GP0 (UART0 TX) |
| WAK / Touch | Sinyal jari terdeteksi (opsional) | D4 | GPIO 27 | GP2 |
| Vt / 3.3VT | Daya untuk rangkaian sentuh (opsional) | 3.3V | 3V3 | 3V3(OUT) |
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
- 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.
- Library ini bekerja dengan semua sensor yang memakai set perintah yang sama, seperti AS608, R307, R503, FPM10A, dan seri ZFM; kode tidak perlu diubah.
- Di File > Examples kamu akan menemukan contoh enroll (pendaftaran), fingerprint (verifikasi), delete (menghapus satu data), dan emptyDatabase (menghapus semuanya).
- 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.
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:
- getImage(): Terus mencoba mengambil gambar sampai ada jari di atas kaca; mengembalikan FINGERPRINT_NOFINGER kalau tidak ada jari.
- image2Tz(1): Mengubah gambar pertama menjadi file karakter dan menaruhnya di buffer 1.
- Jari diangkat, lalu jari yang sama diletakkan lagi; image2Tz(2) menaruh gambar kedua di buffer 2.
- createModel(): Membandingkan dan menggabungkan kedua buffer; mengembalikan FINGERPRINT_ENROLLMISMATCH kalau keduanya tidak cocok.
- storeModel(id): Menulis template secara permanen ke memori flash sensor; data tetap aman walaupun daya terputus.
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}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 kembalian | Pesan di Serial Monitor | Arti 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.
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}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.
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.
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:
| Gejala | Kemungkinan penyebab | Solusi |
|---|---|---|
| “Did not find fingerprint sensor :(” | TX dan RX disambung lurus | TX 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 kabel | Sambung ulang sesuai label pin di board atau diagram dari penjual; pastikan GND dengan multimeter. |
| “Did not find fingerprint sensor :(” | Daya salah atau kurang | Beri 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 lain | Jalankan pemindaian baud di sketch uji pertama dan masukkan nilai yang ditemukan ke finger.begin(). |
| “Did not find fingerprint sensor :(” | Password sensor sudah diganti | Berikan password-nya ke konstruktor: Adafruit_Fingerprint finger(&fpSerial, 0x12345678); |
| Sensor tidak terdeteksi di Mega atau Leonardo | SoftwareSerial tidak bisa menerima data di semua pin | Pakai Serial1: RX1 19, TX1 18 di Mega; RX 0, TX 1 di Leonardo. |
| Sensor tidak terdeteksi di ESP32 | Pin default Serial2 berbeda atau bentrok dengan PSRAM | Tulis 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 tipis | Buat kabelnya pendek, pakai sambungan solder alih-alih breadboard, dan tambahkan kapasitor 100 µF di catu daya. |
| Jari yang sudah terdaftar sering ditolak | Kaca kotor, jari kering atau basah, didaftarkan dari satu sudut saja | Lap 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 menyala | Polaritas daya terbalik atau AS608 diberi 5 V | Segera putus dayanya dan perbaiki pengkabelan; sensornya mungkin sudah rusak. |
Pembaca sidik jari UART Waveshare: catatan singkat

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.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
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

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.

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

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

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

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!

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

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.
Artikel lainnya
Aplikasi BlueGrays
Rakit rangkaian ini langkah demi langkah di ponselmu
Skema pengkabelan, kode, dan daftar komponen dalam satu layar. 200+ proyek Arduino, ESP32, dan Pico siap dibuat.
Pindai dengan ponselmu
Arahkan kamera ke kode ini dan toko aplikasi di ponselmu akan terbuka.
atau buka toko aplikasi

