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.