Cara Menggunakan Sensor Sidik Jari / Fingerprint dengan Arduino

Assalamu’alaikum pengunjung setia cronyos.com, kali ini kita akan belajar tentang cara mengakses sebuah sensor yang biasanya digunakan sebagai akses keamanan, yaps, nama sensornya adalah sensor sidik jari, kali ini kita akan coba membuat rangkaian keamanan sederhana menggunakan sensor sidik jari dan tentunya menggunakan arduino, oh iya, sensor yang saya gunakan disini adalah sensor sidik jari tipe FPM10A, namun kalian bisa menggunakan seri sensor lain asalkan tipe komunikasinya sama yaitu lewat RX TX, baiklah langsung saja, pertama silahkan siapkan bahannya

Bahan / Komponen

  1. Arduino Uno (Tokopedia) 
  2. Breadboard (Tokopedia)
  3. Kabel Jumper (Tokopedia)
  4. Sensor Sidik Jari (Tokopedia)
  5. Led (Tokopedia)

Setelah semua komponen siap, selanjutnya kita buat rangkaiannya seperti wiring dibawah ini

Setelah rangkaian selesai dibuat, saatnya kita menuju langkah pengkodingan, senelum kita mulai ngoding jangan lupa tambahkan library sensor sidik jarinya yang bisa di download di link dibawah ini

Download Library

Untuk cara insatall librarynya bisa dilihat di artikel ini Cara Memasukan / Menambahkan Library di Arduino IDE

Baik, selanjutnya upload coding berikut

/*******************************************************************
 *  Program Dasar Akses Sidik Jari Arduino                         *
 *                                                                 *
 *                                                                 *
 *  Dipbulikasikan Oleh : Giri Wahyu Pambudi                       *
 *                        (https://www.cronyos.com)                *
 *                                                                 *
 *  di Tulis 28/11/2018                                            *
 *******************************************************************/

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

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()  
{
  Serial.begin(9600);
  while (!Serial); 
  delay(100);
  Serial.println("Program Dasar Akses Sidik Jari Arduino");
  Serial.println("https://www.cronyos.com");

  // set the data rate for the sensor serial port
  finger.begin(57600);
  
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) { delay(1); }
  }
  Serial.println("Waiting for valid finger...");
}

void loop()                     // run over and over again
{
  getFingerprintID();
  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(".");
      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");
    delay(1000);
    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); 
  delay(1000);

  return finger.fingerID;
}

Setelah selesai diupload coba buka serial monitor, maka anda akan mendapati hasil di serial mointor seperti ini

lalu coba tempelkan salah satu jari di sensor fingerprint, maka akan jadi seperti ini

dari hasil di serial monitor, bisa kita ketahui bahawa sidik jari kita belum terdaftar / tidak dikenali,
Q : kenapa??
A : karena sidik jari kita belum tersimpan di memory di dalam sensor tersebut
Q : lalu bagaimana agar sidik jari kita terdaftar??
A : kita harus enroll dulu
Q : Gimana caranya??
A : Kita upload dulu coding dibawah ini

/*******************************************************************
 *  Program Dasar Akses Sidik Jari Arduino                         *
 *                                                                 *
 *                                                                 *
 *  Dipbulikasikan Oleh : Giri Wahyu Pambudi                       *
 *                        (https://www.cronyos.com)                *
 *                                                                 *
 *  diTulis 28/11/2018                                            *
 *******************************************************************/

#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("\n\nAdafruit Fingerprint sensor enrollment");

  // set the data rate for the sensor serial port
  finger.begin(57600);
  
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    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("Ready to enroll a fingerprint!");
  Serial.println("Please type in the ID # (from 1 to 127) you want to save this finger as...");
  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("Place same finger again");
  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("Prints matched!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_ENROLLMISMATCH) {
    Serial.println("Fingerprints did not match");
    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("Stored!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_BADLOCATION) {
    Serial.println("Could not store in that location");
    return p;
  } else if (p == FINGERPRINT_FLASHERR) {
    Serial.println("Error writing to flash");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }   
}

setelah itu buka lagi serial monitor, maka akan muncul seperti ini

selanjutnya ketikan ID untuk sidik jari yang ingin di daftarkan ( ID : 1 – 127 ), sebagai contoh saya memilih id 1, lalu tekan enter

Setelah tampilan seperti gambar diatas, tempelkan jari yang ingin diaftarkan, maka akan menjadi seperti ini

Lepas jari kalian

lalu tempelkan lagi, dan jika menunjukan hasil seperti gambar dibawah ini, maka sidik jari kalian sudah tersimpan

Untuk memastikan kalau sidik jari kita sudah tersimpan, upload coding yang pertama kali kita upload tadi, dan buka serial monitor dan tempelkan jari yang sudah kita daftarkan, maka hasilnya akan seperti gambar dibwah ini yang berarti sidik jari kita sudah dikenali dengan ID 1

Oke, sebagai bonus, kita akan coba menyalakan LED menggunakan akses sidik jari yang sudah kita daftarkan tadi, caranya silahkan upload coding yang sudah saya modifikasi dibawah ini ( silahkan dipelajari ya)

/*******************************************************************
 *  Program Dasar Akses Sidik Jari Arduino                         *
 *                                                                 *
 *                                                                 *
 *  Dipbulikasikan Oleh : Giri Wahyu Pambudi                       *
 *                        (https://www.cronyos.com)                *
 *                                                                 *
 *  di Tulis 28/11/2018                                            *
 *******************************************************************/

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

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()  
{
  Serial.begin(9600);
  while (!Serial); 
  delay(100);
  pinMode(13,OUTPUT);
  Serial.println("Program Dasar Akses Sidik Jari Arduino");
  Serial.println("https://www.cronyos.com");

  // set the data rate for the sensor serial port
  finger.begin(57600);
  
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) { delay(1); }
  }
  Serial.println("Waiting for valid finger...");
}

void loop()                     // run over and over again
{
  getFingerprintID();
  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(".");
      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");
    delay(1000);
    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); 
  digitalWrite(13,HIGH);
  delay(3000);
  digitalWrite(13,LOW);

  return finger.fingerID;
}

Coding diatas hanya saya edit sedikit dari coding pertama, yaitu saya menambahkan baris kode

pinMode(13,OUTPUT);

di dalam void Setup() dan

digitalWrite(13,HIGH);
  delay(3000);
  digitalWrite(13,LOW);

yang bisa kalian temui di bawah coding

Oke, jadi itu tadi tutorial sederhana cara menggunakan mengakses sensor sidik jari menggunakan arduino, jika ada yang perlu ditanyakan, silahkan ditanyakan di kolom komentar, terima kasih, wassalamu’alaikum

Video Project (Jangan Lupa Subscribe ya  :babyboy1)

About Giri Wahyu Pambudi

Giri Wahyu Pambudi - Seorang Pemuda Desa yang berkeinginan ikut membangun Indonesia dengan Sedikit Ilmu yang dimiliki SMK N 2 Wonogiri lulus 2015 UNIV Negeri Yogyakarta lulus 2019 2019 - Sekarang Bekerja di SMK Gajah Mungkur 1 Wuryantoro, Wonogiri

Check Also

Cara Menggunakan / Mengakses Keypad menggunakan Arduino

Assalamu’alaikum teman – teman, kali ini kita akan belajar Arduino lagi, kali ini kita akan …

17 comments

  1. mas mau tanya kalau misal kan mau ID 1 jadi nama orang bisa ngga mas ,, jadi kalo misal kan ID 1 jari telunjuk maka yang tampil di lcd nya nama orang nya terus ID 2 nama orang yang lain begitu mas ?

  2. Giri Wahyu Pambudi

    bisa di mainkan di programnya gan.

  3. hallo kak, gimana caranya copy data finger print dan paste ke finger print yang lain, maksudnya supaya saya hanya mendaftarkan user nya 1 kali saja, dan datanya saya upload ke board yang lain

  4. Giri Wahyu Pambudi

    wah saya mlh blm tau mbak, hhe

  5. mantap mas, sangat membantu…

  6. Giri Wahyu Pambudi

    mantapp mas.

Tinggalkan Balasan