Anda di halaman 1dari 13

DOOR LOCK SECURITY SYSTEM WITH RFID & PASSWORD ( KEYPAD )

Membuat system keamanan penguncian pintu dengan Selenoid Door Lock


yang dikendalikan oleh RFID dan Password

A. Bahan dan Module yang dibutuhkan


No Bahan dan Module Jumlah
1 Arduino Uno 1 buah
2 Keypad 4 x 4 1 buah
3 Module RFID RC-522 + Kartu/key chain 1 buah
4 Selenoid Door Lock 12 Volt 1 buah
5 Driver Selenoid Door Lock (opsional) 1 buah
- Bisa menggunakan driver motor DC
L9110/L298
- Bisa menggunakan Relay module 5 V 1 chanel
- Bisa menggunakan transistor PNP (seri TIPxx)
6 LCD 1602 dengan i2C connection 1 buah
7 Passive Buzzer/minispeaker 1 buah
8 Kabel Jumper secukupnya
B. Wiring
1. Wiring Module RFID RC-522 ke Arduino Uno

Module RFID RC-522 Pin Arduino Uno


MOSI Pin D11
MISO Pin D12
SCK Pin D13
SS/SDA Pin D10
RST Pin D9
RQ Tidakdigunakan
GND Pin GND
3.3 V Pin 3.3V (Jangan salah masuk)

2. Wiring Module LCD 1602 dengan Module I2C ke Arduino uno

LCD 1602 + i2C Pin Arduino Uno


GND Pin GND
VCC Pin 5V
SDA Pin A4
SCL Pin A5
3. Wiring Keypad ke Arduino Uno

Keypad Pin Arduino Uno


Pin 1 Pin D6
Pin 2 Pin D5
Pin 3 Pin D4
Pin 4 Pin D3
Pin 5 Pin A3
Pin 6 Pin A2
Pin 7 Pin A1
Pin 8 Pin A0
4. Wiring Selenoid Door Lock dan motor driver L9110 + Passive Buzzer
atau dengan module relay

(a). Motor Driver L9110

(b). Module Relay


C. Library
Library yang digunakan adalah :
- Library LiquidCrystal_I2C
- Library RFID RC-522
- Library Matrix Keypad
- Library Password

D. Sourch Code
//Coding berikut dibuat oleh Dani untuk www.belajarduino.com
//Semoga bermanfaat bagi yang sedang belajar RFID system
//Support by RAJACELL - BEKASI
//Semua module yang dibutuhkan dapat dibeli di
www.tokopedia.com/rajacell
/*
Sambungan Module RFID RC-522 ke Arduino
* MOSI: Pin 11
* MISO: Pin 12
* SCK : Pin 13
* SS/SDA: Pin 10
* RST: Pin 9
* RQ: Tidak digunakan
*/

//#include <EEPROM.h>
#include <Wire.h> // i2C Conection Library
#include <LiquidCrystal_I2C.h> //Memanggil i2C LCD Library
#include <Password.h>
//http://www.arduino.cc/playground/uploads/Code/Password.zip
#include <Keypad.h>
//http://www.arduino.cc/playground/uploads/Code/Keypad.zip
#include <SPI.h>
#include <RFID.h>

#define SS_PIN 10
#define RST_PIN 9

RFID rfid(SS_PIN,RST_PIN);
int serNum[5]; //Variable buffer Scan Card
int cards[][5] = { //ID Kartu yang diperbolehkan masuk
{99,170,145,39,127}

};

bool access = false;

LiquidCrystal_I2C lcd(0x3F, 16, 2);


Password password = Password("1234"); //<-- TULIS PASSWORD
SISTEM ANDA DISINI
const byte ROWS = 4; // Four rows
const byte COLS = 4; // columns
// Define the Keymap
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};

byte rowPins[ROWS] = { 6,5,4,3 };// Connect keypad ROW0, ROW1,


ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { A3,A2,A1,A0, };// Connect keypad COL0, COL1
and COL2 to these Arduino pins.
// Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins,
ROWS, COLS );

const int buzzer = 7; //Passive buzzer ke Pin D7 dan GND


const int doorLock = 8; //Driver Selenoid Door Lock/Relay input ke pin
D8

int alarm = 0;
uint8_t alarmStat = 0;
uint8_t maxError = 5;

unsigned long previousMillis = 0;


const long interval = 1000;
uint8_t pwMode=0;
uint8_t pwPos=0;

void setup(){
Serial.begin(9600);
lcd.begin();
SPI.begin();
rfid.init();
keypad.addEventListener(keypadEvent); //add an event listener for
this keypad

pinMode(doorLock, OUTPUT);
digitalWrite(doorLock, HIGH);

tone (buzzer,1200);
lcd.setCursor (0,0);
lcd.print(F(" RFID System "));
lcd.setCursor (0,1);
lcd.print(F(" Control Access "));
delay (2000);
lcd.clear();
noTone (buzzer);
}

void loop(){
keypad.getKey(); //Reading Keypad

if (alarm >= maxError){


alarmStat = 1; }

if (alarmStat == 0 && pwMode == 0){


lcd.setCursor (0,0);
lcd.print(F(" -System Ready- "));
unsigned long currentMillis = millis();

//Membuat perubahan tulisan pada LCD tanpa menggunakan delay


//Pada sistem stanby sama sekali tidak boleh ada delay untuk
menghindari Keypad NGADAT
if (currentMillis - previousMillis >= interval) {
//previousMillis = currentMillis;
lcd.setCursor (0,1);
lcd.print(F(" Scan Your Card "));
}

if (currentMillis - previousMillis >= (2*interval)) {


previousMillis = currentMillis;
lcd.setCursor (0,1);
lcd.print(F(" Enter Password "));
}

if(rfid.isCard()){

if(rfid.readCardSerial()){
Serial.print(rfid.serNum[0]);
Serial.print(" ");
Serial.print(rfid.serNum[1]);
Serial.print(" ");
Serial.print(rfid.serNum[2]);
Serial.print(" ");
Serial.print(rfid.serNum[3]);
Serial.print(" ");
Serial.print(rfid.serNum[4]);
Serial.println("");

for(int x = 0; x < sizeof(cards); x++){


for(int i = 0; i < sizeof(rfid.serNum); i++ ){
if(rfid.serNum[i] != cards[x][i]) {
access = false;
break;
} else {
access = true;
}
}
if(access) break;
}
}

if(access){
Serial.println("Welcome!");
lcd.setCursor (0,0);
lcd.print(F(" Akses diterima "));
lcd.setCursor (0,1);
lcd.print("ID:");
lcd.print(rfid.serNum[0]); lcd.print(rfid.serNum[1]);
lcd.print(rfid.serNum[2]); lcd.print(rfid.serNum[3]);
lcd.print(rfid.serNum[4]);
ACCEPT ();
}

else {
alarm = alarm+1;
Serial.println("Not allowed!");
lcd.setCursor (0,0);
lcd.print(F(" Akses ditolak "));
lcd.setCursor (0,1);
lcd.print("ID:");
lcd.print(rfid.serNum[0]); lcd.print(rfid.serNum[1]);
lcd.print(rfid.serNum[2]); lcd.print(rfid.serNum[3]);
lcd.print(rfid.serNum[4]);
RIJECT ();
}
}
//Coding berikut dibuat oleh Dani untuk www.belajarduino.com
//Semoga bermanfaat bagi yang sedang belajar RFID system
//Support by RAJACELL - BEKASI
//Semua module yang dibutuhkan dapat dibeli di
www.tokopedia.com/rajacell
rfid.halt();
}
if (alarmStat == 1) {
lcd.setCursor (0,0);
lcd.print(F("-System LOCKED- "));
lcd.setCursor (0,1);
lcd.print(F(" Please Wait "));
for(int i=60; i>0; i--){
tone (buzzer,1800);
lcd.setCursor (13,1); lcd.print(i);
lcd.print(F(" "));delay (1000);}
noTone (buzzer);
alarmStat = 0;
alarm = 0;
}
}
//Coding berikut dibuat oleh Dani untuk www.belajarduino.com
//Semoga bermanfaat bagi yang sedang belajar RFID system
//Support by RAJACELL - BEKASI
//Semua module yang dibutuhkan dapat dibeli di
www.tokopedia.com/rajacell
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
Serial.print("Pressed: ");
Serial.println(eKey);

pwMode =1;
pwPos=pwPos+1;
if(pwPos==1){lcd.clear();}
lcd.setCursor (0,0);
lcd.print(F("Password Entered"));
if(pwPos<5){lcd.setCursor (5+pwPos,1);
lcd.print(F("*"));}
switch (eKey){
case '*': checkPassword(); break;
//case '#': password.reset(); break;

default: password.append(eKey);
}
}
}
//Coding berikut dibuat oleh Dani untuk www.belajarduino.com
//Semoga bermanfaat bagi yang sedang belajar RFID system
//Support by RAJACELL - BEKASI
//Semua module yang dibutuhkan dapat dibeli di
www.tokopedia.com/rajacell
void checkPassword(){
if (password.evaluate()){

Serial.println("Password OK");
lcd.setCursor (0,1);
lcd.print(F(" -Accepted- "));
ACCEPT ();
password.reset();
pwPos=0;
//Add code to run if it works

}else{
Serial.println("Password SALAH");
lcd.setCursor (0,1);
lcd.print(F(" -Rejected- "));
alarm = alarm+1;
RIJECT ();
password.reset();
pwPos=0;
//add code to run if it did not work
}
}
//Coding berikut dibuat oleh Dani untuk www.belajarduino.com
//Semoga bermanfaat bagi yang sedang belajar RFID system
//Support by RAJACELL - BEKASI
//Semua module yang dibutuhkan dapat dibeli di
www.tokopedia.com/rajacell
void ACCEPT () {
digitalWrite(doorLock, LOW);
tone (buzzer,900);
delay(100);
tone (buzzer,1200);
delay(100);
tone (buzzer,1800);
delay(200);
noTone(buzzer);
delay(600);
lcd.setCursor (0,0);
lcd.print(F(" Silahkan Masuk "));
lcd.setCursor (0,1);
lcd.print(F("AutoLock after "));
for(int i=5; i>0; i--){
lcd.setCursor (15,1); lcd.print(i);
delay (1000);
}
digitalWrite(doorLock, HIGH);
pwMode =0;
lcd.clear();}
//Coding berikut dibuat oleh Dani untuk www.belajarduino.com
//Semoga bermanfaat bagi yang sedang belajar RFID system
//Support by RAJACELL - BEKASI
//Semua module yang dibutuhkan dapat dibeli di
www.tokopedia.com/rajacell
void RIJECT () {
tone (buzzer,900);
delay(200);
noTone(buzzer);
delay(200);
tone (buzzer,900);
delay(200);
noTone (buzzer);
delay(500);
pwMode =0;
lcd.clear();
}

E. Trial dan Error


Pada sketch Coding diatas digunakan ID dari kartu RFID saya sebagai
acces dan pastinya tidak akan berfungsi pada kartu RFID anda.
Untuk mengetahui kode dari RFID anda, maka langkahnya upload aja
sketch diatas tanpa ada perubahan pada kode nomor RFID acces nya
Kemudian running program dan tempelkan kartu RFID atau Key chain
RFID anda ke RFID dan lihat angka yang Nampak pada Serial
Monitor pada program Arduino, catat kode yang tampil dan copikan
ke program tadi, kemudian upload kembali.