Menyalakan Sepeda Motor Dengan Sidik Jari


Menyalakan Sepeda Motor Dengan Sidik Jari

Pada artikel ini, yaitu “Menyalakan Sepeda Motor Dengan Sidik Jari” Kita akan belajar bagaimana memprogram sebuah mikrokontroler yang terhubung dengan sensor sidik jari untuk dapat digunakan sebagai kunci elektronik di kendaraan kita seperti salah satu nya sepeda motor.

Saya katakan pada kendaraan kita karena sistem atau alat yang akan kita bahas disini tidak hanya bisa dipasang di sepeda motor saja, tapi juga bisa dipasang pada mobil, rumah, bahkan sepeda listrik pun juga bisa.

Alat ini akan berfungsi untuk menyalakan kelistrikan sepeda motor dan juga bisa kita gunakan untuk menyalakan mesin secara otomatis saat sidik jari yang dipasang sudah merupakan sidik jari yang terprogram pada sensor yang dipakai.

Alat dan Bahan

  • Arduino Uno / Atmega328
  • Modul Sidik Jari
  • Modul Relay
  • DFPlayer modul
  • Speaker
  • Kabel jumper

Untuk bahan bahan yang akan digunakan disini khususnya arduino kalian bisa gunakan arduino tipe apa saja karena pin yang digunakan dalam project ini tidak banyak.

 

Gambar Rangkaian

Dari gambar skematik diatas kalian bisa lihat pin mana saja yang digunakan dalam membuat alat ini. Saya sengaja membuat PCB custom untuk project ini agar ukuran nya menjadi lebih kecil dan ringkas. Coba kalian buat alat ini dengan menggunakan arduino dan modul relay yang terpisah, tentunya akan menjadi rangkaian yang sangat besar dan kelihatan ribet.

Maka dari itu di project selanjutnya yang PCB nya saya sudah cetak di pabrik, nanti relay nya akan dibuat terpisah menggunakan relay khusus otomotif yang mampu mengalirkan arus 30A. berikut adalah gambar layout terbaru nya.

Coding Arduino

Untuk Bagian merekam sidik jari nya, file example yang ada pada library dinamakan dengan enroll

#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;
  }   
}

 

Sedangkan untuk menguji coba sidik jari yang sudah tersimpan kalian bisa menggunakan coding example fingerprint dan melihat hasilnya pada serial monitor.

#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; 
}

jangan lupa juga pada bagian coding fingerprint untuk menambahkan fungsi untuk menyalakan dan mematikan relay yang kita pasang saat sidik jari yang kita tempelkan benar. Bagian tersebut ada pada bagian

// found a match!

Silahkan dicoba dan di kreasikan sesuai dengan imajinasi kalian agar dapat berfungsi sesuai dengan keinginan kalian.

 

Download

[button color=”red” size=”medium” link=”http://nimbleinity.com/CKpj” icon=”” target=”false”]DOWNLOAD LIBRARY[/button]

[button color=”blue” size=”medium” link=”http://nimbleinity.com/CKy7″ icon=”” target=”false”]DOWNLOAD SKEMATIK[/button]

Share this post

Comments (6)

  • Woro prasetyo Reply

    Bang bisa pesan pcb nya bang. Sukur2 sih pcb yang sudah jadi. Maksudnya pcb yg sudah sama komponennya bang.

    14 Januari 2018 at 22.19
  • sondy pranata Reply

    bang, PCB yang sudah jadi yang ukuran kecil klo sudah jadi saya bisa pesann lewat apa bang.?
    apakah abang punya online shop?

    8 Februari 2018 at 09.42
  • Irwan Kamala Reply

    Mencoba menghubungi Via WhasApp ke nomor: 0857-3978-6669 dan 0897-0869-443, tidak dibaca.

    Mohon responsnya di WhatsApp 08161816231, terima kasih.

    8 Februari 2018 at 16.51
    • Anak Agung Duwi Arsana Reply

      kalau ga dibales coba di akun toko pedia nya langsung mas nama toko nya Bali Mikro, mungkin ada kegiatan dirumahnya makanya ga dibales

      8 Februari 2018 at 21.35

Komentar anda