Rabu, 05 Oktober 2016

RFID RC-522 : Smart System Selenoid Door Lock with Arduino

Membuat Sistem Pengunci Pintu Cerdas dengan RFID RC-522 dan Arduino

 

A.Bahan dan Module yang dibutuhkan

-1Unit Arduino Uno
-1Unit Module RFID RC-522 + kartu/key chain
-1Unit Selenoid Door Lock (12V)
-1Unit Driver Selenoid Door Lock (
     *bisa menggunakan driver motor DC L9110/L298
     *bisa menggunakan Relay Module 5V 1 channel
     *bisa menggunakan Transistor PNP (seri TIPxx)
  (pada tutorial kali ini saya menggunakan Driver Motor DC L9110)
-1Unit LCD 1602 dengan i2C connection
-1 Unit Passive Buzzer/mini speaker
-Kabel Jumper secukupnya

Note : klik www.tokopedia.com/rajacell untuk mendapatkan semua kebutuhan module dalam project ini

B.Wiring  

1.Wiring Module RFID RC-522 ke Arduino Uno
* MOSI   : Pin D11
* MISO   : Pin D12
* SCK     : Pin D13
* SS/SDA: Pin 10
* RST     : Pin 9
* RQ       : Tidak digunakan
* GND     : Pin GND
* 3.3V      : Pin 3.3V (awas jangan di sambung ke Pin 5V)

2.Wiring Module LCD 1602 i2C ke Arduino
* GND   : Pin GND
* VCC    : Pin 5V
* SDA    : Pin A4
* SCL     : Pin A5

3.Wiring Selenoid Door Lock & Motor Driver L9110 + Passive Buzzer
   perhatikan gambar dibawah ini :




 

 

 

 

 

 

 Dalam tes ini saya menggunakan Power dari USB PC/laptop sebagai Power Arduino Board.
Apabila anda ingin menggabung Power Selenoid dan Power Arduino Board maka Anda dapat menghubingkan kabel (+) dari Adaptor 12V ke Jack DC IN Arduino atau melalui pin Vin yang ada di sebelah Pin GND GND.

 

C.Library

-Library LiquidCrystal_I2C silahkan download disini.
-Library RFID RC-522 silahkan download disini.

 Setelah melakukan download semua library yang dibutuhkan kemudian ekstract menggunakan aplikasi Winrar/Winzip dan copy master folder yang ada di dalamnya ke dalam folder 'libraries' yang ada pada directory installer Arduino IDE.
Secara default ada di lokasi :
Windows 64bit = C:\Program Files (x86)\Arduino\libraries
Windows 32bit = C:\Program Files \Arduino\libraries

D.Sourch Code

Copy paste coding dibawah ini ke dalam Arduino IDE anda dan Upload ke Board Arduino Anda 


//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
#include <RFID.h>
#include <Wire.h>  // i2C Conection Library
#include <LiquidCrystal_I2C.h>  //Memanggil i2C LCD Library
LiquidCrystal_I2C lcd(0x3F, 16, 2);
/*
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 <SPI.h>
#include <RFID.h>
#define SS_PIN 10
#define RST_PIN 9

RFID rfid(SS_PIN,RST_PIN);

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 serNum[5];          //Variable buffer Scan Card

int cards[][5] = {      //ID Kartu yang diperbolehkan masuk
  {141,125,2,197,55}
  
};

bool access = false;

int alarm = 0;
uint8_t alarmStat = 0;
uint8_t maxError = 5;
//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 setup(){
    Serial.begin(9600);
    lcd.begin();
    SPI.begin();
    rfid.init();

    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(){
  if (alarm >= maxError){
    alarmStat = 1;    }
  
  if (alarmStat == 0){
  lcd.setCursor (0,0);
  lcd.print(F(" -System Ready- "));
  lcd.setCursor (0,1);
  lcd.print(F(" Scan Your Card "));

    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]);
           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);
           lcd.clear();
      } 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]);
           tone (buzzer,900);
           delay(200);
           noTone(buzzer);
           delay(200);
           tone (buzzer,900);
           delay(200);
           noTone (buzzer);  
           delay(500);
           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 
    rfid.halt();
}
else {
  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;
  }
}


E.Trial & Error

Pada Sketch Coding di atas saya menggunakan ID dari Kartu RFID saya sebagai Acces dan pastinya tidak akan berfungsi pada kartu chain RFID milik anda.

Untuk awal apabila anda belum tahu urutan nomor kode dari kartu RFID anda maka Upload saja sketch diatas tanpa ada perubahan pada kode nomor RFID access nya.

Kemudian Running program dan tempelkan kartu RFID atau Key Chain RFID anda ke RFID Reader dan lihat angka yang nampak pada Serial Monitor atau LCD.

Catat nomor tersebut, kemudian Update nomor kode Access yang ada pada Sketch Coding diatas dengan nomor kartu RFID anda.Gunakan tanda koma (,) sebagai pemisah setian group angka.

Upload ulang sourch codenya ke dalam Arduino anda..

Terimakasih dan selamat mencoba.

Salam Dani Ardianto - Rajacell

6 komentar:

  1. power.untuk solenoidnya kl pakai accu gmn om?

    BalasHapus
  2. Mas klo tampilan lcd di ganti lcd tft nextion bisa ga?

    BalasHapus
  3. Mas klo tampilan lcd di ganti lcd tft nextion bisa ga?

    BalasHapus
  4. Ilmu yg bermanfaat.
    Mau tanya untuk menambah kode kartu gimana pak.misal mau pakai 3 kartu yg dijinkan untuk membuka.
    Bagaimana membuka pintu dari dalamnya.

    Terima kasih sebelumnya

    BalasHapus

Copyright © 2014 Belajar Arduino | Designed With By Blogger Templates | Distributed By Gooyaabi Templates
Scroll To Top