55. Sensor FingerPrint FPM10A
55. Sensor FingerPrint FPM10A

Modul Sensor Fingerprint merupakan modul sensor yang berfungsi pemindaian identitas sidik jari manusia yang bersifat unik. Secara umum prinsip kerja dari sensor sidik jari atau Fingerprint :

  1. Pendaftaran atau pengenalan sidik jari sebagai ID (Enroll)
  2. Database sebagai penyimpanan data pendaftaran ID (Storage)
  3. Perbandingan, pencarian dan pencocokan (Matching and Comparing)

Pada Modul sensor FPM10A dilengkapi dengan memori FLASH sebagai penyimpan sidik jari dan dapat diakses menggunakan mikrokontroler dengan komunikasi UART / Serial TTL. Contoh pengaplikasian sensor ini, dapat diterapkan pada beberapa sistem antara lain :

  • Sistem keamanan / Security System
    • Attendace time / sistem waktu kehadiran pegawai, siswa, mahasiswa
    • Kunci pintu / Lock door System seperti di hotel, dan lain sebagainya

Spesifikasi FPM10A

  • Voltage / Tegangan Supply : DC 3.6 ~ 6.0 V
  • Current / Arus Supply : <120mA
  • Max Curent / Arus Maksimal : <140mA
  • Waktu Pengenalan : <1 detik
  • Ukuran Sidik Jari : 14 x 18 mm
  • Ukuran Profil : 256 byte
  • Enroll Template: 512 byte
  • Kapasitas penyimpanan: 1000
  • False Accept Rate (FAR): <0.001% (security level 3)
  • False Reject Rate (FRR): <1% (security level 3)
  • Waktu pencarian: <1 detik (1:500, rata-rata)
  • Interface / Antarmuka komputer: UART (logika TTL Level)
  • Baud Rate (UART): 9600
  • Lingkungan kerja: Suhu:-20 °C sampai + 50 °C
  • Kelembaban relatif: 40% RH sampai 85% RH
  • Kondisi penyimpanan: Suhu:-40 °C sampai + 85 °C
  • Kelembaban relatif: <85% H
  • Dimensi (L * W * H): 56 x 20 x 21 mm

Pinout Sensor

  • Note NC adalah Not Connected sehingga kedua pinout tersebut tidak perlu dihubungkan.

Cara Enroll Sidik jari baru

Enroll adalah mendaftarkan fingerprint baru ke memori flash sensor. Pastikan terlebih dahulu telah menginstal libraries Adafruit sensor fingerprint. Berikut ini adalah langkah-langkah Enroll:

  1. Buka program “enroll”
  2. Upload kode program tersebut, dan buka Serial Monitor dengan kecepatan baudrate komunikasi 9600
  3. Masukkan ID untuk sidik jari. Karena ini merupakan sidik jari pertama Anda, ketik 1 di sudut kiri atas, lalu klik tombol Send
  1. Tempatkan jari anda pada pemindai fingerprint dan ikuti instruksi pada monitor serial
  2. Tempatkan Jari anda lagi pada pemindai fingerprint. Jika sudah terdapat “Stored!” maka menandakan bahwa sidik jari yang dipindai baru saja sudah tersimpan dan bisa diuji coba

Pencocokan Sidik Jari

Pencocokan ini dilakukan sebagai konfirmasi apakah data yang tersimpan sesuai atau tidak dengan pembacaan data.

  1. Buka program “fingerprint
  2. Upload kode program tersebut, dan buka Serial Monitor dengan kecepatan baudrate komunikasi 9600
  3. Pindai jari pada sensor pemindai fingerprint
  4. Amati pembacaan pemindaian pada serial monitor, jika terdapat ID #1 – #3 berarti sudah berhasil terbaca dari program enroll sebelumnya

Percobaan 70: Akses Fingerprints Sensor

.
  1. Hubungkan TX dengan pin D2 ATMEGA 328
  2. Hubungkan RX dengan pin D3 ATMEGA 328
  3. Hubungkan board ATMEGA 328 dengan Komputer menggunakan kabel USB.
  4. Bukalah IDE Arduino, kemudian ketikkan kode program/sketch atau buka file enroll (Enroll), fingerprint (TEST FINGERPRINT) atau fingerprint_LCD (TEST FINGERPRINT & LCD)
  5. Compile menggunakan verify button (tanda ceklist pada IDE arduino) untuk mengecek ada atau tidaknya error/kesalahan dalam pengetikan.
  6. Upload program ke arduino dengan cara, pilih File > Upload to I/O board, atau tekan tombol tanda panah pada jendela IDE arduino.

Code enroll (Enroll):

/*************************************************** 
  This is an example sketch for our optical Fingerprint sensor

  Designed specifically to work with the Adafruit BMP085 Breakout 
  ----> http://www.adafruit.com/products/751

  These displays use TTL Serial to communicate, 2 pins are required to 
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

#include <Adafruit_Fingerprint.h>

// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
// uncomment this line:
// #define mySerial Serial1

// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
// comment these two lines if using hardware serial
#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(1000);
  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;
  }   
}

.

Code fingerprint (TEST FINGERPRINT):

/*************************************************** 
  This is an example sketch for our optical Fingerprint sensor

  Designed specifically to work with the Adafruit BMP085 Breakout 
  ----> http://www.adafruit.com/products/751

  These displays use TTL Serial to communicate, 2 pins are required to 
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/


#include <Adafruit_Fingerprint.h>

// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
// uncomment this line:
// #define mySerial Serial1

// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
// comment these two lines if using hardware serial
#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("\n\nAdafruit finger detect test");

  // 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); }
  }

  finger.getTemplateCount();
  Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  Serial.println("Waiting for valid finger...");
}

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("Found ID #"); Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
  return finger.fingerID; 
}

Hasil:

Video Demo:

.

Code fingerprint_LCD (TEST FINGERPRINT & LCD):

#include <Adafruit_Fingerprint.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x3F for a 16 chars and 2 line display
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);

int fingerprintID = 00;
String IDname;

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);


void setup(){
  Serial.begin(9600);
  finger.begin(57600);
  
//lcd setup
  lcd.init();
  lcd.clear();         
  lcd.backlight();      // Make sure backlight is on
  lcd.setCursor(0, 0);
  lcd.print("Tempelkan Jari!!");
  delay(5000);
  lcd.clear(); 
  if (finger.verifyPassword()) {
    lcd.setCursor(0, 0);
    Serial.println("Sensor ditemukan");
    lcd.print("Sensor ditemukan");
    delay(500);
    lcd.clear();
  } 
  else {
    Serial.println("no sensor :(");
    lcd.setCursor(0, 0);
    lcd.print("no sensor :(");
    delay(500);
    lcd.clear();
    while (1) { delay(1); }
  }
  lcd.setCursor(0, 0);
  lcd.print("Pelatihan Mikro");
  lcd.setCursor(0, 1);
  lcd.print(" FingerPrint");
  delay(3000);
  lcd.clear();
}

void loop(){
 lcd.setCursor(0, 0);
 lcd.print("Waiting");
  lcd.setCursor(0, 1);
  lcd.print("FingerPrint");
  fingerprintID = getFingerprintIDez();
  delay(50);
  if(fingerprintID == 1){
    IDname = "Mikro_1";
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("ID Name:");
    lcd.setCursor(0, 1);
    lcd.print(IDname);   
    delay(3000);
    fingerprintID = 00; 
    lcd.clear();   
  }  
  else if(fingerprintID == 2){
    IDname = "Mikro_2";  
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("ID Name:");
    lcd.setCursor(0, 1);
    lcd.print(IDname);   
    delay(3000);
    fingerprintID = 00; 
    lcd.clear();             
  }
  else if(fingerprintID == 3){
    IDname = "Mikro_3";  
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("ID Name:");
    lcd.setCursor(0, 1);
    lcd.print(IDname);   
    delay(3000);
    fingerprintID = 00; 
    lcd.clear();             
  }
}

int getFingerprintIDez() {
  uint8_t x = finger.getImage();
  if (x != FINGERPRINT_OK)  return -1;

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

  x = finger.fingerFastSearch();
  if (x != FINGERPRINT_OK)  return -1;

  //menulis di komunikasi serial
  Serial.print("Found ID #"); 
  Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); 
  Serial.println(finger.confidence);
  return finger.fingerID; 
}

Video Demo:

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *