Sabtu, 22 Juni 2019

Absensi Fingerprint Simpan Database


Absensi Fingerprint Simpan Database

2.1 Alat & Bahan


·         PC (memasukan data base)
·         Jaringan/Router(local area)
·         Software(Xampp, MS. VisualCode, Arduino IDE)
·         Modul NodeMCU
·         Sensor Fingerprint
·         Modul LCD 16x2
·         Buzzer
·         Kabel jumper

2.2 Diagram Blok










2.3 Foto alat







2.4 Source Code

Pada sensor fingerprint terdapat 3 program besar, yakni;
1.         Program mendaftarkan sidik jari (ENROLL),  program ini digunakan untuk mendaftarkan sidik jari.
2.         Program mambaca sidik jari, digunakan untuk membaca sidik jari yang telah didaftarkan
3.         Program mengahpus sidik jari, digunkan untuk menghapus data sidik jari yang telah terekam
//program mendaftarkan sidik jari
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
SoftwareSerial mySerial(D7, D8);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
int id;
int buzzer= D5;
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Gunakan serial sebagai monitor
#define USE_SERIAL Serial
// Buat object Wifi
ESP8266WiFiMulti WiFiMulti;
// Ini adalah alamat script (URL) yang kita pasang di web server
// Silahkan sesuaikan alamat IP dengan ip komputer anda atau alamat domain (bila di web hosting)
// '?suhu=' adalah adalah nama parameter yang akan dikirimkan ke script PHP

String url = "http://192.168.43.29/proyek_akhir/finger.php?";
// Buat object http
HTTPClient http;
//deklarasi variable
int data;
String payload;
void setup(){
   // Turn on the blacklight and print a message.
  lcd.backlight();
  pinMode(buzzer,OUTPUT);
  USE_SERIAL.begin(115200);
    USE_SERIAL.setDebugOutput(false);
    for(uint8_t t = 4; t > 0; t--) {
        USE_SERIAL.printf("[SETUP] Tunggu %d...\n", t);
        USE_SERIAL.flush();
        delay(1000);
    }
    WiFi.mode(WIFI_STA);
    WiFiMulti.addAP("punyaku","mobileku"); // Sesuaikan SSID dan password ini
 
  //Serial.begin(9600);
  finger.begin(57600);

  if (finger.verifyPassword()) {
    Serial.println("FingerPrint Sensor Ditemukan!");
  } else {
    Serial.println("FingerPrint Sensor Tidak Ditemukan! :(");
    while (1) { delay(1); }
  }
  lcd.begin();
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print ("Assalamualaikum ...");
  delay(100);
  lcd.setCursor(0,1);
  lcd.print ("Tap jari anda ...");
  delay(100);
 
}
void loop(){
  ENROLL();
}
//---------------------------------------ENROLL--------------------------------------------------------------//
void ENROLL(){
  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() );
}

//------------------------------------PROSES ENROLL----------------------------------------------------------//

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

//----RETURN NUM-------------------//

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");
       digitalWrite (buzzer, HIGH );
       delay (200);
       digitalWrite (buzzer, LOW );
       delay (200);
        lcd.clear();
                lcd.setCursor(0,0);
                lcd.print("terdeteksi tap");
                lcd.setCursor(0,1);
                lcd.print("sekali lagi");
                delay(2000);
      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!");
                digitalWrite (buzzer, HIGH );
                delay (500);
                 digitalWrite (buzzer, LOW );
                delay (500);
                lcd.clear();
                lcd.setCursor(0,0);
                lcd.print("   Pendaftaran ");
                lcd.setCursor(0,1);
                lcd.print("     Sukses");
                delay(5000);
              lcd.clear();
              lcd.setCursor(0,0);
              lcd.print ("Assalamualaikum ...");
              lcd.setCursor(0,1);
              lcd.print ("Tap jari anda ...");
              delay(100);
  } 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);

 
    // Cek apakah statusnya sudah terhubung
    if((WiFiMulti.run() == WL_CONNECTED)) {

        Serial.println(data);
        // Tambahkan nilai suhu pada URL yang sudah kita buat
        USE_SERIAL.print("[HTTP] Memulai...\n");
        http.begin( url + "id="+(String) id +"&cek=?");
       
        // Mulai koneksi dengan metode GET
        USE_SERIAL.print("[HTTP] Melakukan GET ke server...\n");
        int httpCode = http.GET();

        // Periksa httpCode, akan bernilai negatif kalau error
        if(httpCode > 0) {
           
            // Tampilkan response http
            USE_SERIAL.printf("[HTTP] kode response GET: %d\n", httpCode);

            // Bila koneksi berhasil, baca data response dari server
            if(httpCode == HTTP_CODE_OK) {
                payload = http.getString();
                USE_SERIAL.println(payload);
            }

        } else {

            USE_SERIAL.printf("[HTTP] GET gagal, error: %s\n", http.errorToString(httpCode).c_str());
        }

        http.end();
    }
 
  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;
  }  
}

//---------------------------------------ENROLL END--------------------------------//








//program membaca sidik jari
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
SoftwareSerial mySerial(D7, D8);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
//Gunakan serial sebagai monitor
#define USE_SERIAL Serial

// Buat object Wifi
ESP8266WiFiMulti WiFiMulti;

// Ini adalah alamat script (URL) yang kita pasang di web server
// Silahkan sesuaikan alamat IP dengan ip komputer anda atau alamat domain (bila di web hosting)
// '?suhu=' adalah adalah nama parameter yang akan dikirimkan ke script PHP

String url = "http://192.168.43.29/proyek_akhir/finger.php?";

// Buat object http
HTTPClient http;

//deklarasi variable

int data;
String payload;
int buzzer= D5;
void setup(){
// initialize the LCD
  // Turn on the blacklight and print a message.
  lcd.backlight();
  pinMode(buzzer,OUTPUT)
   USE_SERIAL.begin(115200);
    USE_SERIAL.setDebugOutput(false);

    for(uint8_t t = 4; t > 0; t--) {
        USE_SERIAL.printf("[SETUP] Tunggu %d...\n", t);
        USE_SERIAL.flush();
        delay(1000);
    }

    WiFi.mode(WIFI_STA);
    WiFiMulti.addAP("punyaku","mobileku"); // Sesuaikan SSID dan password ini
  Serial.begin(115200);
  finger.begin(57600);

  if (finger.verifyPassword()) {
    Serial.println("FingerPrint Sensor Ditemukan!");
  } else {
    Serial.println("FingerPrint Sensor Tidak Ditemukan!");
    while (1) { delay(1); }
  }
  finger.getTemplateCount();
  Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  Serial.println("Waiting for valid finger...");
  lcd.begin();
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print ("Assalamualaikum ...");
  delay(100);
  lcd.setCursor(0,1);
  lcd.print ("Tap jari anda ...");
  delay(100);
}
void loop(){
  getFingerprintID();
  delay(50);
  }

//----------------------------------------------------FINGERPRINt----------------------------------------------//



//----------------------------------------------------PROSES FINGERPRINT--------------------------------------//

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_IMAGEFAIL:
      Serial.println("Imaging 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_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");
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print ("tekan saklar");
      lcd.setCursor(0,1);
      lcd.print ("     reset");
      delay(100);
      return p;
  }
 
  // OK converted!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
 
                digitalWrite (buzzer, HIGH );
                delay (500);
                 digitalWrite (buzzer, LOW );
                delay (500);
                lcd.clear();
                lcd.setCursor(0,0);
                lcd.print("Absensi Sukses");
                lcd.setCursor(0,1);
                lcd.print("Happy Working");
                delay(5000);
              lcd.clear();
              lcd.setCursor(0,0);
              lcd.print ("Assalamualaikum ...");
              lcd.setCursor(0,1);
              lcd.print ("Tap jari anda ...");
              delay(100);
  } else if (p == FINGERPRINT_NOTFOUND) {
    Serial.println("Did not find a match");
                 digitalWrite (buzzer, HIGH );
                delay (100);
                 digitalWrite (buzzer, LOW );
                delay (100);digitalWrite (buzzer, HIGH );
                delay (100);
                 digitalWrite (buzzer, LOW );
                delay (100);digitalWrite (buzzer, HIGH );
                delay (100);
                 digitalWrite (buzzer, LOW );
                delay (100);
                  lcd.clear();
               lcd.setCursor(0,0);
              
                lcd.print("  Maaf Anda");
                lcd.setCursor(0,1);
                lcd.print("tidak terdaftar");
                delay(5000);
              lcd.clear();
              lcd.setCursor(0,0);
              lcd.print ("Assalamualaikum ...");
              lcd.setCursor(0,1);
              lcd.print ("Tap jari anda ...");
              delay(100);
    return p;
  }  
  Serial.print("Found ID #"); Serial.print(finger.fingerID);
    // Cek apakah statusnya sudah terhubung
    if((WiFiMulti.run() == WL_CONNECTED)) {

        Serial.println(data);
        // Tambahkan nilai id pada URL yang sudah kita buat
        USE_SERIAL.print("[HTTP] Memulai...\n");
        http.begin( url + "id="+(String)finger.fingerID+"&cek=Hadir");
       
        // Mulai koneksi dengan metode GET
        USE_SERIAL.print("[HTTP] Melakukan GET ke server...\n");
        int httpCode = http.GET();

        // Periksa httpCode, akan bernilai negatif kalau error
        if(httpCode > 0) {
           
            // Tampilkan response http
            USE_SERIAL.printf("[HTTP] kode response GET: %d\n", httpCode);

            // Bila koneksi berhasil, baca data response dari server
            if(httpCode == HTTP_CODE_OK) {
             
                payload = http.getString();
                USE_SERIAL.println(payload);             
              }
        } else {
            USE_SERIAL.printf("[HTTP] GET gagal, error: %s\n", http.errorToString(httpCode).c_str());
        }
        http.end();
    }
    return finger.fingerID;

}

  // found a match
//--------------------------------END FINGERPRINT----------------------------------------------//


//program menghapus sidik jari
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(D7, D8);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup(){
  Serial.begin(115200);
  finger.begin(57600);

  if (finger.verifyPassword()) {
    Serial.println("FingerPrint Sensor Ditemukan!");
  } else {
    Serial.println("FingerPrint Sensor Tidak Ditemukan! :(");
    while (1) { delay(1); }
  }
}
void loop(){
  DELETE();
}
//------------------------------------------DELETE-----------------------------------//
void DELETE(){
  Serial.println("Please type in the ID # (from 1 to 127) you want to delete...");
  uint8_t id = readnumber();
  if (id == 0) {// ID #0 not allowed, try again!
     return;
  }
  Serial.print("Deleting ID #");
  Serial.println(id);
  deleteFingerprint(id);
}
//------------------------------------------PROSES DELETE---------------------------//

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

//----RETURN NUM-------------------//
uint8_t deleteFingerprint(uint8_t id) {
  uint8_t p = -1;
 
  p = finger.deleteModel(id);
  if (p == FINGERPRINT_OK) {
    Serial.println("Deleted!");
  } 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;
  }  
}

2.5 Cara Kerja Alat

Urutan langkah menggunakan alat yang saya buat adalah;
1.    Mendaftarkan sidik jari dengan cara meng-upload program daftar sidik jari, lalu masukkan id berapa yang ingin anda pakai, kemudian tempelkan jari anda pada sensor fingerprint.
2.    Lalu jalankan kode edit_database.php untuk mengedit/memberi nama id yang telah dimasukkan.
3.    Mengupload program membaca sidik jari untuk proses absensi.
4.     Kemudian masuk pada aplikasi web yang telah saya buat dengan menjalankan kode awal.php
5.    Lalu lakukan login dengan memasukkan username dan password.
6.    Kemudian anda bisa pilih menu absensi dan anda bisa melihat anda telah terabsensi atau belum.
7.    Ulangi langkah 1-6 jika ingin menambah daftar sidik jari baru.


CARA MEMBUAT LINE TRACER ANALOG MUDAH

CARA MEMBUAT LINE TRACER ANALOG Oke temen-temen sudah lama tak jumpa nih, apa kabaar? Semoga tetap sehat yaa. Kali ini saya kembali hadi...