fbpx

Arduino, Cara Menggunakan Sensor Fingerprint AS608 Sidik Jari

Oke kali ini akan membahas seputar sensor fingerprint, dimana fungsi dari fingerprint ini adalah sebagai validasi data identitas dengan cara merekam gambar dari sidik jari kemudian disimpan dalam memori. Sensor fingerprint yang akan dibahas adalah jenis AS608, tampilannya bisa dilihat di bawah ini.

Komunikasinya menggunakan Serial TTL dengan 4 pin saja yang digunakan jika dihubungkan ke Arduino maupun kontroler lainnya yaitu VCC, GND, TX dan RX.

Spesifikasi :

– Resolusi: 500 dpi
– pasokan Arus : 60mA
– Supply tegangan: 3.3 V
– gambar sidik jari waktu masuk: 1.0 detik
– Window area: 15.3×18.2 MM
– Antarmuka komunikasi: USB/UART TTL

Dalam penggunaan sensor ini kita bisa menggunakan 3 proses :

  1. Enroll, proses pendaftaran sidik jari > disimpan pada memori.
  2. Pembacaan sidik jari yang terdaftar.
  3. Menghapus data sidik jari yang terdaftar.

Alat dan bahan yang dibutuhkan :

  • Arduino Uno, BELI
  • Sensor Fingerprint, AS608, BELI
  • kabel jumper male to male, BELI
  • Library Adafruit-Fingerprint-Sensor-master, download.

Rangkaian

Keterangan :

  • GND ke GND Arduino
  • +V dihubungkan ke 3.3V Arduino
  • RX dihubungkan ke Pin 3 Arduino
  • TX dihubungkan ke Pin 2 Arduino

Kabel yang didapat pada fingerprint bentuknya kecil-kecil sehingga butuh disambung dengan kabel jumper male dengan cara kabel jumper dipotong, kemudian disolder dengan kabel fingerprint bawaan. Hasilnya di bawah ini.

Sisa kabel yang lain abaikan saja, karena yang dipakai hanya 4 kabel saja. Oke selanjutnya kita ke tahap programnya, silahkan masukkan library yang sudah didownload > hubungkan Arduino ke laptop > pilih Board : Arduino/Genuino Uno > Port : pilih yang tampil, misal COM22.

ENROLL

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

uint8_t id;

void setup()  
{
  Serial.begin(9600);
  while (!Serial);  // For Yun/Leo/Micro/Zero/...
  delay(100);
  Serial.println("\nProses Enroll/Pendaftaran Sidik Jari");

  // set the data rate for the sensor serial port
  finger.begin(57600);
  
  if (finger.verifyPassword()) {
    Serial.println("Sensor Fingerprint Terdeteksi!");
  } else {
    Serial.println("Sensor Fingerprint tidak terdeteksi :(");
    while (1) { delay(1); }
  }
}

uint8_t readnumber(void) {
  uint8_t num = 0;
  
  while (num == 0) {
    while (! Serial.available());
    num = Serial.parseInt();
  }
  return num;
}

void loop()                     // run over and over again
{
  Serial.println("Pendaftaran Sidik Jari siap digunakan!");
  Serial.println("Masukan ID yang di pilih # (Dari 1 samapai 127)");
  Serial.println("\nAnda akan menyimpan sidik jari ini dengan ID...");
  id = readnumber();
  if (id == 0) {// ID #0 not allowed, try again!
     return;
  }
  Serial.print("Enrolling ID #");
  Serial.println(id);
  
  while (!  getFingerprintEnroll() );
}

uint8_t getFingerprintEnroll() {

  int p = -1;
  Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);
  while (p != FINGERPRINT_OK) {
    p = finger.getImage();
    switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println(".");
      break;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      break;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      break;
    default:
      Serial.println("Unknown error");
      break;
    }
  }

  // OK success!

  p = finger.image2Tz(1);
  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;
  }
  
  Serial.println("Remove finger");
  delay(2000);
  p = 0;
  while (p != FINGERPRINT_NOFINGER) {
    p = finger.getImage();
  }
  Serial.print("ID "); Serial.println(id);
  p = -1;
  Serial.println("Tempatkan jari yang sama lagi!");
  while (p != FINGERPRINT_OK) {
    p = finger.getImage();
    switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.print(".");
      break;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      break;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      break;
    default:
      Serial.println("Unknown error");
      break;
    }
  }

  // OK success!

  p = finger.image2Tz(2);
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Image too messy");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("Could not find fingerprint features");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("Could not find fingerprint features");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }
  
  // OK converted!
  Serial.print("Creating model for #");  Serial.println(id);
  
  p = finger.createModel();
  if (p == FINGERPRINT_OK) {
    Serial.println("Fingerprint Sesuai!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Komunikasi error");
    return p;
  } else if (p == FINGERPRINT_ENROLLMISMATCH) {
    Serial.println("Fingerprints tidak sesuai");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }   
  
  Serial.print("ID "); Serial.println(id);
  p = finger.storeModel(id);
  if (p == FINGERPRINT_OK) {
    Serial.println("Tersimpan!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Komunikasi error");
    return p;
  } else if (p == FINGERPRINT_BADLOCATION) {
    Serial.println("Tidak bisa menyimpan di penyimpanan.");
    return p;
  } else if (p == FINGERPRINT_FLASHERR) {
    Serial.println("Error writing to flash");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }   
}

Upload sketch program di atas dan buka Serial Monitornya dengan baudrate 9600.

  • Masukkan ID dari 1-127, disini dicontohkan dengan ID 4 > kemudian klik Send
  • Tempelkan jari yang akan didaftarkan > lepas.
  • Setelah muncul “Tempatkan jari yang sama lagi!” > tempelkan lagi jari yang sebelumnya > jika sesuai maka akan muncul keterangan “Tersimpan!”.

Sampai tahap ini, data sidik jari sudah berhasil didaftarkan. Selanjutnya kita tes apakah sudah benar terdafatar, dengan cara upload sketch program di bawah ini.

DETEKSI SIDIK JARI

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()  
{
  Serial.begin(9600);
  while (!Serial);  // For Yun/Leo/Micro/Zero/...
  delay(100);
  Serial.println("\nMendeteksi Fingerpint yang terdaftar");

  // set the data rate for the sensor serial port
  finger.begin(57600);
  
  if (finger.verifyPassword()) {
    Serial.println("Sensor Terdeteksi!");
  } else {
    Serial.println("Sensor Tidak Terdeteksi :(");
    while (1) { delay(1); }
  }

  finger.getTemplateCount();
  Serial.print("Terdapat  "); Serial.print(finger.templateCount); Serial.println(" data sidik jari yang terdaftar");
  Serial.println("Tempatkan Jari Anda...");
}

void loop()                     // run over and over again
{
  getFingerprintIDez();
  delay(50);            //don't ned to run this at full speed.
}

uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("No finger detected");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }

  // OK success!

  p = finger.image2Tz();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Image too messy");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("Could not find fingerprint features");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("Could not find fingerprint features");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }
  
  // OK converted!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    Serial.println("Found a print match!");
  } 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;
  }   
  
  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); Serial.println(finger.confidence); 

  return finger.fingerID;
}

// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.image2Tz();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  return -1;
  
  // found a match!
  Serial.print("ID yang ditemukan #"); Serial.print(finger.fingerID); 
  Serial.print(" dengan ketepatan "); Serial.println(finger.confidence);
  return finger.fingerID; 
}

Hasilnya . . .  silahkan tempatkan jari anda.

Oke sip jadi sudah bisa ya untuk mendeteksi data yang sudah terdaftar. Sekarang mari kita coba hapus ID dengan mengupload sketch dibawah.

DELETE DATA

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()  
{
  Serial.begin(9600);
  while (!Serial);  // For Yun/Leo/Micro/Zero/...
  delay(100);
  Serial.println("\nHapus Data Sidik Jari yang terdaftar");

  // set the data rate for the sensor serial port
  finger.begin(57600);
  
  if (finger.verifyPassword()) {
    Serial.println("Sensor terdeteksi!");
  } else {
    Serial.println("Sensor tidak terdeteksi :(");
    while (1);
  }
}


uint8_t readnumber(void) {
  uint8_t num = 0;
  
  while (num == 0) {
    while (! Serial.available());
    num = Serial.parseInt();
  }
  return num;
}

void loop()                     // run over and over again
{
  Serial.println("Masukkan ID # (dari 1 - 127) yang akan Anda hapus...");
  uint8_t id = readnumber();
  if (id == 0) {// ID #0 not allowed, try again!
     return;
  }

  Serial.print("Deleting ID #");
  Serial.println(id);
  
  deleteFingerprint(id);
}

uint8_t deleteFingerprint(uint8_t id) {
  uint8_t p = -1;
  
  p = finger.deleteModel(id);

  if (p == FINGERPRINT_OK) {
    Serial.println("ID berhasil dihapus!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_BADLOCATION) {
    Serial.println("Could not delete in that location");
    return p;
  } else if (p == FINGERPRINT_FLASHERR) {
    Serial.println("Error writing to flash");
    return p;
  } else {
    Serial.print("Unknown error: 0x"); Serial.println(p, HEX);
    return p;
  }   
}

Hasil … masukkan data ID yang akan dihapus > klik Send.

Jika ada keterangan ID berhasil dihapus, tentunya proses penghapusan ID telah berhasil.

Cukup sekian pembahasan kali ini, semoga berhasil.

About the Author

13 thoughts on “Arduino, Cara Menggunakan Sensor Fingerprint AS608 Sidik Jari

  1. min di baris 44-46 masih Blom bisa memunculkan jari yg tidak terdaftar, ane salah Mulu min.. kalau gak keberatan minta no wa min 🙏 makasih

  2. assalamu’alaikum admin contoh program supaya jari yang tidak terdaftar ada pemberitahuan muncul di LCD, trimakasih sebelum nya

      1. makasih sebelumnya kang, tapi setelah saya coba2 belum beres, kasih dikit kode programnya dong bang

  3. Izin bertanya Mas, kalau selalu munculnya “Sensor Fingerprint tidak terdeteksi :(”
    itu kira2 apa yang salah ya? padahal wiring sudah mengikuti tutorial di atas.

    Sebatas analisa saya, kalau dilihat codingan itu kan seakan2 pada bagian finger.verifyPassword() adalah false ya, jadi masuk ke else dengan pesan “Sensor Fingerprint tidak terdeteksi :(”

    Mohon pencerahannya Mas, Terima kasih…

      1. wiring itu apa ka??
        soalnya program saya slalu kaya gitu, yang muncul “Sensor finger print tidak ditemukan”
        saya sudah otak atik tapi tetap saja seperti itu

  4. Izin nanya admin, saya kan membuat sistem absensi mahasiswa menggunakan fingerprint. Terus saya ditanya sama dosen tentang data yang dikirimkan ke arduino itu berupa apa dan ukuran data yang dapat dikirimkan oleh sensor fingerprint untuk setiap record data.
    Saya jawab data yang dikirim berupa string ID fingerprint dan ukuran data yang dikirimkan 512 byte, tp kata dosen masih kurang sesuai.
    Mungkin admin dpt membatu menjawabnya. Terima kasih sebelumnya.

    1. jadi gini, arduino itu kan mikrokontroller 8 bit, jadi ngga mampu untuk melakukan digital signal processing (DSP) untuk biometrik recognition (minimal Raspberry Pi atau Linux board lainnya yang bisa). Jadi arduino membutuhkan sensor biometrik yang mampu melakukan proses recognition seperti contohnya AS608 ini. Nah, yang dilakukan AS608 adalah melakukan proses DSP khususnya fingerprint recognition dan melakukan matching dengan data fingerprint yang sudah di-record sebelumnya. Sebagai outputnya, AS608 ini akan mengeluarkan data berupa ID logical, misal ID ‘1’ adalah sidk jari si ‘A’, ID ‘2’ adalah kepunyaan si ‘B’, dst. Semoga membantu

  5. Selamat siang admin, izin bertanya. Saya sudah menerapkan codingan diatas. dan sudah berhasil. Lalu saya ada sedikit pertanyaan mengenai codingan deteksi sidik jari, yang saya dapatkan dimana ketika jari yang tidak saya daftarkan melalui proses enroll maka tidak ada keterangan bahwa sidik jarinya tidak terdaftar di serial. Mohon bantuannya, jika admin ada kontak yang bisa dihubungin akan saya kontak secara personal.