IOT/M2M

Cara Menggunakan Sensor Sidik Jari / Fingerprint Dengan Arduino

Assalamu’alaikum pengunjung setia Konekthing, 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

2. Breadboard

3. Kabel Jumper

4. Sensor Sidik Jari

5. Led

 

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

 

Baik, selanjutnya upload coding berikut

 

#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

 

lalu coba tempelkan salah satu jari di sensor fingerprint

 

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

 

#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

 

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

 

Lepas jari kalian

 

Lalu tempelkan lagi, 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

 

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)

 

#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, silahkan dicoba. Semoga bermanfaat.

 

PT. Konekthing Benda Pintar

 

Jl. Ir H. Juanda No.88 a, Kemiri Muka, Kecamatan Beji, Kota Depok, Jawa Barat 16423

 

(021) 77808509

 

info@konekthing.com

 

 

 

Konekthing Bandung

 

Jl. Sukaresmi IV No.7, Ciumbuleuit, Kec. Cidadap, Kota Bandung, Jawa Barat 40142

 

 

 

Konekthing Yogyakarta

 

Jl. Duwet, RT.02/RW.32, Duwet, Sendangadi, Kec. Mlati, Kabupaten Sleman, Daerah Istimewa Yogyakarta 55285

 

(0274) 2883817, 0812-2510-1600

 

Terima kasih

 

Wassalamu’alaikum



Share to :

Related Posts

Apa Internet of Things (IOT) itu?

Biasanya dalam kehidupan sehari-hari kita, saat bangun tidur. ketika makan,...

Apa itu sensor cahaya?  

Sensor cahaya adalah komponen elektronika yang dapat mengubah besaran elektrik pada saat...

Peralatan elektronik di kehidupan kita sudah menjadi sahabat yang menemani aktivitas kita sehari-hari. Seringnya penggunaan...

Categories

Search Result: