• Tidak ada hasil yang ditemukan

Rancang Bangun Sistem Keamanan Loker Mengunakan Sistem Biometrik Sidik Jari

N/A
N/A
Protected

Academic year: 2017

Membagikan "Rancang Bangun Sistem Keamanan Loker Mengunakan Sistem Biometrik Sidik Jari"

Copied!
21
0
0

Teks penuh

(1)

LAMPIRAN PROGRAM

a. Library

#include <LiquidCrystal.h> #include <Keypad.h> #include <EEPROM.h>

#include <Adafruit_Fingerprint.h> #include <SoftwareSerial.h>

b. Inilisialisasi Variabel dan PORT

uint8_t getFingerprintEnroll(uint8_t id);

SoftwareSerial mySerial(52, 53);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

int addr = 0; byte value; uint8_t p = -1;

int addr_door1 = 0; int addr_door2 = 1;

int dot=0,n_code=3,id_door=0,door=0,g=0,x=0,i=0, times=0, times1=0, times2=0;

char pass1[3] = {'0','0','0'}; char pass2[3] = {'0','0','0'};

(2)

int passB1=5; int passB2=6; int passB3=7;

const byte ROWS = 4; const byte COLS = 4;

LiquidCrystal lcd(8, 9, 4, 5, 6, 7); char key[3] = {'0','0','0'};

char hexaKeys[ROWS][COLS] = { {'1','2','3','A'},

{'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} };

byte rowPins[ROWS] = {23, 25, 27, 29}; byte colPins[COLS] = {31, 33, 35, 37};

Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

c. Configurasi Pin dan Conektifitas (void setup())

void setup() { Serial.begin(9600); lcd.begin(16, 2); finger.begin(57600);

(3)

if (finger.verifyPassword()) {

lcd.setCursor(0, 0);

Serial.println("Fingerprint"); }

else {

lcd.setCursor(0, 0);

Serial.println("Not Found"); while (1);

} }

c.1 Fungsi Tambahan (void InputPin() dan void change_pass())

void InputPin() {

lcd.clear();

lcd.setCursor(0, 0);

lcd.print("ups, not match"); delay(2000);

lcd.clear();

lcd.setCursor(0, 0); lcd.print("PIN code "); delay(1000);

while(times < 3) {

char customKey = customKeypad.getKey(); if (customKey)

{

(4)

{

if(id_door==1) {

pass1[0]=EEPROM.read(passA1); pass1[1]=EEPROM.read(passA2); pass1[2]=EEPROM.read(passA3); if(key[x]==pass1[x])

{

times++;

lcd.setCursor(x, 1); lcd.print(customKey); delay(300);

x++; continue;

} else {

lcd.setCursor(0, 0);

lcd.print("ups, not match"); delay(1000);

lcd.clear(); times = 0; x=0; return; }

}

else if(id_door==2) {

(5)

{

times++;

lcd.setCursor(x, 1); lcd.print(customKey); delay(300);

x++; continue; }

else {

lcd.setCursor(0, 0);

lcd.print("ups, not match"); delay(1000);

lcd.clear(); times = 0; x=0; return; }

} } } } }

void change_pass() {

g=0; lcd.clear(); while(g<n_code) {

lcd.setCursor(0, 0);

(6)

char customKey = customKeypad.getKey(); if (customKey)

{

lcd.setCursor(g, 1); lcd.print(customKey); key[g]=customKey; g++;

if(g==n_code){ if(id_door==1) {

EEPROM.write(passA1,key[0]); EEPROM.write(passA2,key[1]); EEPROM.write(passA3,key[2]); }

else if(id_door==2) {

EEPROM.write(passB1,key[0]); EEPROM.write(passB2,key[1]); EEPROM.write(passB3,key[2]); }

} }

delay(300); }

lcd.clear(); }

d. Raning Main Program (void loop())

void loop() {

(7)

door = 0; lcd.clear();

lcd.setCursor(0, 0); lcd.print("No.Locker :");

char customKey = customKeypad.getKey(); id = customKey;

delay(1); id = id - 48;

if (customKey) //atau while(customKey) {

lcd.setCursor(11, 0); lcd.print(customKey); delay(1000);

if(customKey=='1') {

id_door = 1;

value = EEPROM.read(addr_door1); if(value == 0)

{

//Tag fingerprint baru door = 1;

getFingerprintEnroll(id); EEPROM.write(addr_door1, 1); }

else {

(8)

if (times1==3) {

InputPin(); if (times == 3) {

lcd.clear();

lcd.setCursor(0,0); lcd.print("Locker #1"); delay(1000);

lcd.setCursor(0,1);

lcd.print("is opened"); delay(3000);

EEPROM.write(addr_door1, 0); door= 1;

lcd.clear();

lcd.setCursor(0,0); lcd.print("Open..."); lcd.setCursor(0,1); lcd.print("Locker #"); lcd.print(door); delay(2000); lcd.clear();

times = 0; x = 0; }

times1 = 1; }

} }

(9)

{

id_door = 2;

value = EEPROM.read(addr_door2); if(value == 0)

{

//Tag fingerprint baru door = 2; getFingerprintEnroll(id);

EEPROM.write(addr_door2, 1); }

else {

//searching fingerprint getFingerprintSearch(); if (times2==3)

{

InputPin(); if (times == 3) {

lcd.clear();

lcd.setCursor(0,0); lcd.print("Locker #2"); delay(1000);

lcd.setCursor(0,1);

lcd.print("is opened"); delay(3000);

EEPROM.write(addr_door2, 0); door= 2;

lcd.clear();

(10)

lcd.setCursor(0,1); lcd.print("Locker #"); lcd.print(door); delay(2000); lcd.clear();

times = 0; x=0; }

times2 = 1; }

} }

else if(customKey=='D') {

EEPROM.write(addr_door1, 0); EEPROM.write(addr_door2, 0); EEPROM.write(passA1,'0'); EEPROM.write(passA2,'0'); EEPROM.write(passA3,'0'); EEPROM.write(passB1,'0'); EEPROM.write(passB2,'0'); EEPROM.write(passB3,'0'); lcd.clear();

lcd.setCursor(0,0); lcd.print("Erasing"); lcd.setCursor(0,1);

lcd.print("EEPROM..."); delay(1000);

(11)

{

lcd.clear();

lcd.setCursor(0, 0); lcd.print("Locker #"); lcd.print(customKey); lcd.setCursor(0, 1);

lcd.print("is not available..."); delay(1000);

door=0; }

lcd.clear(); }

// Checking door

if(door==1) {

digitalWrite(50,HIGH); }

else if(door==2) {

digitalWrite(24,HIGH); }

delay(2000);

digitalWrite(50,LOW); digitalWrite(24,LOW); }

//ambil original image 288 x 256

uint8_t getFingerprintEnroll(uint8_t id) {

(12)

lcd.clear(); delay(500);

lcd.setCursor(0, 0);

lcd.print("Rec New Finger"); lcd.setCursor(0, 1);

while (p != FINGERPRINT_OK) {

p = finger.getImage(); switch (p) {

case FINGERPRINT_OK: lcd.print("Image taken"); break;

case FINGERPRINT_NOFINGER: if(dot<3)

{

lcd.print("."); dot++; } break;

case FINGERPRINT_PACKETRECIEVEERR: lcd.print("Communication error");

break;

case FINGERPRINT_IMAGEFAIL: lcd.print("Imaging error");

break; default:

lcd.setCursor(0,1);

lcd.print("Unknown error"); break;

(13)

// OK success!

//convert original image ke bentuk character file simpan di char buffer 1 p = finger.image2Tz(1);

lcd.clear(); delay(500);

lcd.setCursor(0,0); switch (p)

{

case FINGERPRINT_OK: lcd.clear();

lcd.print("Image converted"); break;

case FINGERPRINT_IMAGEMESS: lcd.print("Image too messy"); return p;

case FINGERPRINT_PACKETRECIEVEERR: lcd.print("Communication error");

return p;

case FINGERPRINT_FEATUREFAIL: lcd.print("Could not find");

return p;

case FINGERPRINT_INVALIDIMAGE: lcd.print("Could not find");

return p; default:

lcd.setCursor(0,1);

lcd.print("Unknown error"); return p;

}

(14)

delay(500); lcd.setCursor(0,0);

lcd.print("Remove finger"); delay(1000);

p = 0;

while (p != FINGERPRINT_NOFINGER) {

p = finger.getImage(); }

change_pass();

// ambil kembali original image p = -1;

lcd.clear(); delay(500); lcd.setCursor(0,0);

lcd.print("Place your fngr"); lcd.setCursor(0,1);

while (p != FINGERPRINT_OK) {

p = finger.getImage(); switch (p) {

case FINGERPRINT_OK: lcd.print("Image taken"); break;

case FINGERPRINT_NOFINGER: if(dot<3)

{

lcd.print("."); dot++;

(15)

case FINGERPRINT_PACKETRECIEVEERR: lcd.print("Communication error");

break;

case FINGERPRINT_IMAGEFAIL: lcd.print("Imaging error"); break;

default:

lcd.print("Unknown error"); break;

} }

// OK success!

//convert original image ke bentuk character file simpan di char buffer 2 p = finger.image2Tz(2);

lcd.clear(); delay(500); lcd.setCursor(0,0); switch (p)

{

case FINGERPRINT_OK: lcd.print("Image converted"); break;

case FINGERPRINT_IMAGEMESS: lcd.print("Image too messy"); return p;

case FINGERPRINT_PACKETRECIEVEERR: lcd.print("Communication error");

return p;

(16)

return p;

case FINGERPRINT_INVALIDIMAGE: lcd.print("Could not find");

return p; default:

lcd.print("Unknown error"); return p;

}

// OK converted!

// matching kan isi char buffer 1 dan buffer 2

// convert isi di char buffer 1 dan char buffer 2 menjadi sebuah template lalu simpan kembali di char buffer

lcd.clear(); delay(500);

p = finger.createModel(); lcd.setCursor(0,0);

if (p == FINGERPRINT_OK) {

lcd.print("Prints matched!"); }

else if (p == FINGERPRINT_PACKETRECIEVEERR) {

lcd.print("Communication error"); return p;

}

else if (p == FINGERPRINT_ENROLLMISMATCH) {

lcd.print("Not Match"); return p;

(17)

else {

lcd.print("Unknown error"); return p;

}

delay(2000);

//setelah print matched !

//simpan template jari di flash memory ZFM-20 p = finger.storeModel(id);

lcd.clear(); delay(500); lcd.setCursor(0,0);

if (p == FINGERPRINT_OK) {

lcd.print("Stored!"); delay(1000);

lcd.clear();

lcd.print("Succesfull"); delay(2000);

lcd.clear();

lcd.setCursor(0,0); lcd.print("Open..."); lcd.setCursor(0,1); lcd.print("Locker #"); lcd.print(door); }

else if (p == FINGERPRINT_PACKETRECIEVEERR) {

(18)

}

else if (p == FINGERPRINT_BADLOCATION) {

lcd.print("Could not store"); return p;

}

else if (p == FINGERPRINT_FLASHERR) {

lcd.print("Error writing"); return p;

} else {

lcd.print("Unknown error"); return p;

}

delay(1000); }

uint8_t getFingerprintSearch() {

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Scan your finger..."); delay(500);

uint8_t p = -1;

while (p != FINGERPRINT_OK) {p = finger.getImage();}

p = -1;

(19)

{p = finger.image2Tz();}

p = -1; while (1) {

p = finger.fingerFastSearch(); if (p != FINGERPRINT_OK) {

lcd.clear();

lcd.print("Locker #");

if (id_door == 0) {id_door = 1;} lcd.print(id_door); delay(300);

if (id_door == 1){times1++;} else if (id_door == 2){times2++;}

lcd.setCursor(0,1); lcd.print("is not yours"); delay(3000);

door = 0; }

else {

if (id_door == 0) {id_door = 1;}

if(finger.fingerID==id_door) {

lcd.clear();

(20)

lcd.print("Locker #"); if (id_door == 0) {id_door = 1;} lcd.print(id_door); delay(1000); lcd.setCursor(0,1);

lcd.print("is opened"); delay(3000);

if (finger.fingerID == 1)

{EEPROM.write(addr_door1, 0);door = 1;} else if (finger.fingerID == 2)

{EEPROM.write(addr_door2, 0);door = 2;} lcd.clear();

lcd.print("Locker #"); lcd.print(door); delay(2000); lcd.clear();

times1 = 1; times2 = 1; }

else {

lcd.clear();

lcd.print("Locker #"); if (id_door == 0) {id_door = 1;} lcd.print(id_door); delay(300);

(21)

else if (id_door == 2){times2++;}

lcd.setCursor(0,1); lcd.print("is not yours"); delay(3000);

door = 0; }

}

return 1; // break; }

Referensi

Dokumen terkait

Tanaman sela jagung yang ditanam 2 minggu sebelum dan bersama tanam tebu menunjukkan hasil total tanaman penyusun lebih rendah daripada kacang tanah dan

Grebeg Kendalisodo dalam perkembangan tahun berikutnya hingga saat ini bertambah dengan diadakanya jamasan pusaka serta diaraknya hasil pertanian dan perkebunan atau

1) Memperoleh pengetahuan dan ketrampilan baru dalam pembelajaran 2) Meningkatkan kemampuan peserta didik dalam pemecahan masalah projek. 3) Membuat peserta didik lebih aktif

Manusia dan tumbuh-tumbuhan sangat erat kaitannya dalam kehidupan. Banyak sekali nilai manfaat yang didapatkan oleh manusia dari tumbuh-tumbuhan namun masih banyak

Selain tu, YPKDT Daerah Batu Pahat telah diberikan tanggungjawab untuk mengendalikan program Pengamalan Sakinah bagi setiap DUN dan program-program lain mengikut standard yang

Untuk topup dengan tipe manual seperti “Cash”, maka pihak Airline perlu melakukan Approve/Reject terhadap permintaan topup yang dilakukan oleh Agent. Data topup yang di approve

Jenis gulma yang mempunyai nilai NJD terbesar berarti gulma tersebut merupakan gulma dominan. c) Bobot kering gulma per spesies, pengamatan dilakukan pada saat