Pada postingan kali ini kita akan belajar membuat sebuah sistem kemanan sebuah pintu dengan menggunakan RFID, Keypad dan GSM, pada postingan sebelumnya kita sudah membahas mengenai Keypad di mana kita sudah mengetahui cara kerja keypad dan mengujinya melalui LCD. Sekarang kita akan mengkombinasikan dengan menambahkan modul Sim800 untuk menjadikannya sistem kunci dan peringatan dini terhadap Pintu berbasis RFID dan Keypad menggunakan Arduino.
INTRODUCTION
Agar lebih mudah memahami cara kerja dari setiap masing masing komponen yang digunakan pada project ini, sebaiknya baca terlebih dahulu postingan berikut:
- Cara Mudah Mengakses RFID MFRC522 dengan Arduino
- Cara mudah Menggunakan Keypad dengan Arduino
- Cara Mengakses Modul GSM SIM800L
- Cara Mudah Program LCD I2C dengan Arduino Uno
- Cara Scan Alamat Modul I2C LCD
INSTRUCTIONS
Cara kerja dari sistem yang akan kita buat adalah sebagai berikut:
- Pada saat tag RFID yang digunakan untuk membuka pintu adalah tag RFID yang salah, maka sistem akan mengirimkan pesan notifikasi peringatan melalui SMS. Dan jika tag RFID yang digunakan untuk membuka pintu adalah tag RFID yang benar, namun pada saat mengetikkan kata sandi salah, maka sistem akan mengirimkan notifikasi peringatan melalui SMS.
- Pada saat memindai tag RFID yang benar dan memasukkan kata sandi yang benar, maka sistem akan mengirimkan pesan konfirmasi melalui SMS bahwa pintu telah terbuka.
- Sistem yang akan kita buat ini dapat kita hentikan hanya dengan mengirim pesan 'tutup' ke Arduino dan akan kembali ke mode normal ketika kita kirim pesan 'terbuka' ke Arduino melalu pesan SMS. Selama waktu penghentian, sistem tidak dapat memindai tag apa pun sebelum sistem mendapatkan pesan 'terbuka' melalui SMS oleh user.
- Kita dapat membuka pintu dan menutup pint dengan hanya mengirim pesan ke Arduino melalui pesan SMS.
1. Diagram Blok
Perhatikan alur diagram blok dibawah ini:
Berdasarkan blok diagram sistem diatas, dijelaskan bahwa :
- Pendeteksian RFID dan kombinasi angka pada Keypad pada system ini berfungsi sebagai keamanan pint ruangan yang di desain sebagai pengganti kunci.
- Arduino sebagai kontrol utama pada alat ini, yaitu yang menerima sinyal dari RFID dan sensor serta mengaktifkan Servo dan Alarm.
- Alarm/bell berbunyi ketika terjadi kondisi tertentu.
- Servo sebagai pengunci pintu ruangan.
- SMS gateway difungsikan mengirimkan data kondisi pintu ruangan jika ada yang membuka dengan tag, kode dan pin yang salah.
2. Flowchart
Agar lebih memahami dari sistem yang akn kita buat ini, maka dibuatlah sebuah flowchart yang merupakan alur kerja sistem yang akan kita buat:
Penjelasan flowchart diatas merupakan alur pemrograman dari keseluruhan alat yang akan dibuat. Diawali dari “mulai” kemudian menginisialkan pin pin komponen yang digunakan. Komponen dirangkai menggunakan papan PCB yang dibuat dengan software eagle, hal ini ditujukan untuk meminimalisasikan pengkabelan. Pada saat alat dihidupkan, system aka secara otomatis mengatur mode GSM SIM800L agar dapat berkomunikasi dengan Arduino. Jika mode yang disetting sesuai dengan program, maka system akan membaca RFID sebagai inputan pertama kali. Jika mode tidak sesuai/atau tidak dikenal, maka system akan membaca ulang pin yang terhubung dengan arduino.
Setelah mode dikenali, arduino akan memerintahkan LCD untuk menampilkan status ruangan. Barulah pengguna bias langsung menempelkan tag sesuai dengan program yang telah dimasukkan kedalam arduino. Jika tag dikenali/cocok, ditandai dengan LED hijau dan Buzer hidup maka proses selanjutnya bisa dilanjutkan yaitu memasukkan password pada keypad. Jika tag tidak dikenali, ditandai dengan LED merah dan buzzer hidup maka system akan langsung mengirimkan pesan SMS ke nomor yang telah deprogram. Selanjutnya adalah proses pengetikkan password. Jika password yang dimasukkan benar, maka LED hijau dan buzzer akan hidup dan LCD akan menampilakn status pintu ruangan sedang terbuka. Jika salah, LED Merah dan buzzer akan hidup. Selain itu juga status pintu ruangan akan dikirimkan melalui pesan SMS.
REQUIRED COMPONENTS
- Arduino Uno
- LCD & I2C
- MFRC522 RFID Reader
- Tag
- Modul SIM800l GSM
- Stepdown DC to DC, adaptor daya 2A
- SG90 Servo motor
- Keypad 4X3
- 3 X LED (Merah, Hijau, Biru)
- 3 X 220 ohm resistor
- Buzzer
- Sumber daya 6 - 12V
CIRCUIT DIAGRAM
1. RFID
RFID mempunyai 2 bagian komponen utama yang tak dapat dipisahkan, yaitu :
- RFID Tag, merupakan sebuah perangkat yang akan diidentifikasi oleh RFID reader yang dapat berupa perangkat pasif maupun aktif yang berisi suatu data atau informasi. Perangkat pasif tidak menggunakan catudaya, sedangkan perangkat aktif wajib menggunakan catudaya.
- RFID Reader, berfungsi untuk membaca data dari RFID Tag.
Berikut ini adalah Circuit Diagram dari RFID dengan Arduino.
Program Test RFID
Library:
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
Serial.println("Scan PICC to see UID and type...");
}
void loop() {
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
// Dump debug info about the card. PICC_HaltA() is automatically called.
mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}
Hasil Test RFID.
Setelah berhasil memasukkan program pada Arduino, kemudian buka serial monitor dan hasilnya adalah sebagai berikut:
Note: Catat alamat CARD UID nya, untuk dimasukkan kedalam program utama nanti.
2. LCD I2C
Inter Integrated Circuit atau sering disebut I2C adalah standar komunikasi serial dua arah menggunakan dua saluran yang didesain khusus untuk mengirim maupun menerima data. Sistem I2C terdiri dari saluran SCL (Serial Clock) dan SDA (Serial Data) yang membawa informasi data antara I2C dengan pengontrolnya. Piranti yang dihubungkan dengan sistem I2C Bus dapat dioperasikan sebagai Master dan Slave. Master adalah piranti yang memulai transfer data pada I2C sedangkan Slave adalah piranti yang dialamati oleh master.
Berikut ini adalah rangkaian LCD dengan komunikasi modul I2C:
Program Test LCD
Library:
// program LCD
// oleh : hestech.id
#include <Wire.h> // i2C Conection Library
#include <LiquidCrystal_I2C.h> //i2C LCD Library
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
// initialize the LCD
lcd.begin();
lcd.print("Hello, world!");
delay (1000);
lcd.setCursor(0,1);
lcd.print("Test Backlight ");
delay (1000);
for (int i=0; i<5; i++){
lcd.noBacklight();
delay(200);
lcd.backlight();
delay(200);}
lcd.setCursor(0,1);
lcd.print("Test noDisplay");
delay (1000);
for (int i=0; i<5; i++){
lcd.noDisplay();
delay(200);
lcd.display();
delay(200);}
lcd.setCursor(0,1);
lcd.print("Test UL Cursor ");
delay (1000);
for (int i=0; i<5; i++){
lcd.cursor();
delay(500);
lcd.noCursor();
delay(500);}
lcd.setCursor(0,1);
lcd.print("Test BL Cursor ");
delay (1000);
for (int i=0; i<5; i++){
lcd.blink();
delay(500);
lcd.noBlink();
delay(500);}
lcd.setCursor(0,1);
lcd.print("Test Text Scroll");
delay (1000);
lcd.setCursor(0,0);
lcd.print("Hello, world!");
for (int i=0; i<16; i++){
lcd.scrollDisplayRight();
delay(200);}
for (int i=0; i<16; i++){
lcd.scrollDisplayLeft();
delay(200);}
lcd.setCursor(0,1);
lcd.print("<- Right to Left");
delay (1000);
lcd.clear();
lcd.rightToLeft();
lcd.setCursor(15,0);
lcd.print("Hello, world!");
delay(3000);
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Left to Right ->");
delay (1000);
lcd.leftToRight();
lcd.setCursor(0,0);
lcd.print("hestech.id");
}
void loop()
{
// Do nothing here...
}
3. Keypad 4x4
Keypad adalah kumpulan tombol Numerik atau Alfanumerik dengan jumlah tombol yang terbatas. Keypad Numerik hanya berisi tombol karakter angka, dari 0 – 9, sedangkan Keypad Alfanumerik sama dengan Keypad Numeric dengan ditambahi karakter alphabet A – D. Kedua tipe keypad ini dilengkapi dengan spesial karakter ‘*’ dan ‘#’.
Berikut ini adalah rangkain Keypad 4x4 pada Arduino:
Program Test Keypad
Library:Keypad_library ( Download )
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 3;
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = {A0, A1, A2, A3};
byte colPins[COLS] = {2, 1, 0};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
}
}
Setelah berhasil upload program, buka serial monitor dan coba lakukan penekanan acak pada keypad. Maka, akan mendapatkan hasil sepertti berikut:
4. GSM SIM800L
Modul SIM800L merupakan jenis module GSM/GPRS Serial yang banyak digunakan dibidang elektronika sebagai aplikasi pengendalian jarak jauh via Handphone. Terdapat beberapa tipe dari Breakout Board, tetapi yang paling banyak dijual di Indonesia yaitu versi mini dengan kartu GSM jenis Micro SIM.
Berikut ini adalah rangkaian dari modul GSM SIM800L:
Program Test GSM SIM800L
Library:GSM-master.zip ( Download )
#include
SoftwareSerial SIM800L(2, 3); // RX | TX
// Hubungkan TXD untuk Arduino pin 3
// Hubungkan RXD untuk Arduino pin 4
char c = ' ';
void setup()
{
Serial.begin(9600); //Menggunakan komunikasi serial pada 9600bps
while(!Serial);
Serial.println("Arduino with Module GSM is ready");
// memulai komunikasi dengan
SIM800L.begin(9600);
Serial.println("Module GSM started at 9600");
delay(1000); //nilai tunda 1 second
Serial.println("Setup Complete! SIM800 is Ready!");
}
void loop()
{
// memastikan pembacaan dari SIM800 dan dikirim datanya ke Arduino(Serial Monitor)
if (SIM800L.available())
{ c = SIM800L.read();
Serial.write(c);}
// memastikan pembacaan dari SIM800 dan dikirim datanya ke Arduino(Serial Monitor)
if (Serial.available())
{ c = Serial.read();
SIM800L.write(c);
}
}
Setelah menuliskan program diatas, dan berhasil du opload (done Uploading), selanjutnya buka serial monitor. Maka, hasilnya seperti berikut: Circuit Diagram Keseluruhan
Circuit_diagram.fzz ( Download )
LIBRARIES
Library Arduino yang dibutuhkan sudah dicantumkan pada program test diatas, selanjutnya hanya tinggal memasukkan library Motor Servo dibawah ini:
- Servo-master.zip ( Download )
Unduh library diatas, kemudian masukkan kedalam folder instalasi Arduino pada C:\Program Files (x86)\Arduino\libraries.
Read more:
CODE
Setelah memasukkan library diatas, selanjutnya adalah menuliskan program berikut:
Program_Complete.ino ( Download )
/* Program Sistem Keamanan dan Peringatan pada Pintu Ruangan Berbasis RFID, Keypad dan GSM
Oleh : HESTECH.ID
update : 15 JANUARI 2021
*/
// Library yang dibutuhkan
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <SoftwareSerial.h>
#include <Servo.h>
#include <SPI.h>
SoftwareSerial SIM800L(3, 4); // SoftwareSerial SIM800(Rx, Tx)
MFRC522 mfrc522(10, 9); // MFRC522 mfrc522(SS_PIN, RST_PIN)
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo sg90;
// Inisialisasi Pin untuk led, servo dan buzzer
// Salah satu led yang dijadikan indikator duhubungkan ke 5V pada arduino
constexpr uint8_t greenLed = 6;
constexpr uint8_t redLed = 7;
constexpr uint8_t servoPin = 8;
constexpr uint8_t buzzerPin = 5;
char initial_password[4] = {'4', '4', '4', '4'}; // Variabel untuk menyimpan kata sandi awal
String tagUID = "19 D4 DF 2A"; // String untuk menyimpan UID tag.
char password[4]; // Variabel untuk menyimpan kata sandi pengguna
boolean RFIDMode = true; // boolean untuk mengganti mode
boolean NormalMode = true; // boolean untuk mengubah mode
char key_pressed = 0; // Variabel untuk menyimpan kunci masuk
uint8_t i = 0; // Variabel yang digunakan untuk penghitung
// menentukan berapa banyak baris dan kolom yang dimiliki keypad
const byte rows = 4;
const byte columns = 4;
// Keypad pin map
char hexaKeys[rows][columns] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
// Menginisialisasi pin untuk keypad
byte row_pins[rows] = {A0, A1, A2, A3};
byte column_pins[columns] = {2, 1, 0};
Keypad keypad_key = Keypad( makeKeymap(hexaKeys), row_pins, column_pins, rows, columns);
void setup() {
Serial.begin(9600);
while(!Serial);
Serial.println("Arduino dengan SIM800L sudah siap");
// konfigurasi pin pada arduino
pinMode(buzzerPin, OUTPUT);
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
sg90.attach(servoPin); //Pin 8 digunakan untuk servo
sg90.write(90); // Atur posisi awal pada 0 derajat
lcd.begin(); // LCD Display pada serial monitor
lcd.backlight();
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522
// Arduino berkomunikasi dengan baud rate 19200 pada serial monitor
SIM800L.begin(9600);
// AT perintah untuk mengatur SIM900 ke mode SMS
SIM800L.print("AT+CMGF=1\r");
delay(100);
// Atur modul untuk mengirim data SMS ke serial setelah diterima
SIM800L.print("AT+CNMI=2,2,0,0,0\r");
delay(100);
lcd.clear(); // Clear LCD screen
}
void loop() {
if (NormalMode == false) {
// Berfungsi untuk menerima pesan
receive_message();
}
else if (NormalMode == true) {
// Sistem akan mencari mode terlebih dahulu
if (RFIDMode == true) {
// Berfungsi untuk menerima pesan
receive_message();
lcd.setCursor(0, 0);
lcd.print("Ruangan Terkunci");
lcd.setCursor(0, 1);
lcd.print("Tempelkan Kartu ");
// Cari kartu baru
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Pilih salah satu kartu
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
//Membaca dari kartu
String tag = "";
for (byte j = 0; j < mfrc522.uid.size; j++)
{
tag.concat(String(mfrc522.uid.uidByte[j] < 0x10 ? " 0" : " "));
tag.concat(String(mfrc522.uid.uidByte[j], HEX));
}
tag.toUpperCase();
//Memeriksa kartu
if (tag.substring(1) == tagUID)
{
// Jika UID tag cocok.
lcd.clear();
lcd.print("Tag Cocok");
digitalWrite(greenLed, HIGH);
delay(3000);
digitalWrite(greenLed, LOW);
lcd.clear();
lcd.print("Masukan Password:");
lcd.setCursor(0, 1);
RFIDMode = false; // Jadikan mode RFID false
}
else
{
// Jika UID dari tag tidak cocok.
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tag/Kartu Salah");
lcd.setCursor(0, 1);
lcd.print("Akses ditolak");
digitalWrite(buzzerPin, HIGH);
digitalWrite(redLed, HIGH);
send_message("PERINGATAN...! Seseorang mencoba masuk dengan TAG yang salah, silahlkan periksa ruangan anda segera...! - Terimakasih.");
delay(3000);
digitalWrite(buzzerPin, LOW);
digitalWrite(redLed, LOW);
lcd.clear();
}
}
// Jika mode RFID salah, ia akan mencari tombol dari keypad
if (RFIDMode == false) {
key_pressed = keypad_key.getKey(); // Menyimpan kunci
if (key_pressed)
{
password[i++] = key_pressed; // Menyimpan dalam variabel kata sandi
lcd.print("*");
}
if (i == 4) // Jika 4 kunci selesai
{
delay(200);
if (!(strncmp(password, initial_password, 4))) // Jika kata sandi cocok
{
lcd.clear();
lcd.print("Password Cocok");
sg90.write(0); // Door Opened
digitalWrite(greenLed, HIGH);
send_message("PINTU TERBUKA...! jika ini bukan anda, silahkan periksa ruangan anda segera - Terimakasih.");
delay(3000);
digitalWrite(greenLed, LOW);
sg90.write(90); // Door Closed
lcd.clear();
i = 0;
RFIDMode = true; // Jika kata sandi cocok
}
else // Jika kata sandi tidak cocok
{
lcd.clear();
lcd.print("Password Salah");
digitalWrite(buzzerPin, HIGH);
digitalWrite(redLed, HIGH);
send_message("PERINGATAN...! Seseorang mencoba masuk ruangan dengan PASSWORD yang salah, silahlkan periksa ruangan anda segera...! - Terimakasih.");
delay(3000);
digitalWrite(buzzerPin, LOW);
digitalWrite(redLed, LOW);
lcd.clear();
i = 0;
RFIDMode = true; // Make RFID mode true
}
}
}
}
}
// Menerima pesan
void receive_message()
{
char incoming_char = 0; //Variabel untuk menyimpan karakter SMS yang masuk
String incomingData; // untuk menyimpan data serial yang masuk
if (SIM800L.available() > 0)
{
incomingData = SIM800L.readString(); // Dapatkan data yang masuk.
delay(10);
}
// jika menerima perintah adalah membuka pintu
if (incomingData.indexOf("BUKA") >= 0)
{
sg90.write(90);
NormalMode = true;
send_message("Pintu Terbuka");
delay(10000);
sg90.write(0);
}
// jika menerima perintah untuk menghentikan sistem
if (incomingData.indexOf("TUTUP") >= 1)
{
NormalMode = false;
send_message("Pintu Tertutup");
digitalWrite(buzzerPin, HIGH);
delay(100);
digitalWrite(buzzerPin, LOW);
}
incomingData = "";
}
// Void ini berfungsi untuk mengirim pesan
void send_message(String message)
{
SIM800L.println("AT+CMGF=1"); //Atur Modul GSM dalam Mode Teks
delay(100);
SIM800L.println("AT+CMGS=\"+62xxxxxxxxx\""); // Nomor tujuan sms
delay(100);
SIM800L.println(message); // Teks SMS yang akan kirim
delay(100);
SIM800L.println((char)26); // Kode ASCII dari CTRL + Z
delay(8000);
SIM800L.print("ATD+6282384987900;\r\n");// AT command untuk menelfon // no hp tujuan
delay(500);
SIM800L.println();
delay(1000);
Serial.println("sms terkirim");
}
Keterangan Program
Scan terlebih dahulu alamat RFID untuk mendapatkan alamat pada RFID yang digunakan, dan tuliskan pada program:
String tagUID = "19 D4 DF 2A"; //Alamat RFID- SCAN RFID untuk mendapatkan alamat modul RFID yang digunakan
Kemudian untuk mengganti pasword, dapat diganti pada bagian ini:
char initial_password[4] = {'4', '4', '4', '4'}; // Variabel untuk menyimpan kata sandi awal
Password yang tertulis pada program diatas adalah '4444'. Selanjutnya, mengganti Nomor SIM pada program bagian ini:
SIM800L.println("AT+CMGS=\"+62xxxxxxxxx\""); // Nomor tujuan sms
dan ini:
SIM800L.print("ATD+62xxxxxxxxx;\r\n");// AT command untuk menelfon // no hp tujuan
Jika belum memahami dari masing masing perintah pada program, anda dapat membaca artikel pada bagian Introduction
RESULTS
Berikut ini adalah hasil dari pembuatan Sistem Keamanan dan Peringatan pada Pintu Ruangan Berbasis RFID, Keypad dan GSM:
Gambar diatas merupakan prototipe Sistem keamanan pada Pintu Ruangan yang berhasil dibuat untuk Tugas Akhir Mahasiswa Jurusan Teknik Komputer yang bekerja sama dengan Admin Hestech Indonesia. Artikel ini ditulis guna untuk memberikan gambaran luas terhadap anda yang sedang mencari referensi Project berbasis Arduino.
LANGKAH PENGOPERASIAN
Berikut ini adalah tahap tahap bagaimana system dan handphone ini terhubung.
- Mendaftarkan Nomor Handphone di Sketch Arduino,
- Memasang Sim Card GSM Ke Modul GSM SIM800L:
- Selanjutnya adalah memastikan power supply terhubung dengan benar. pada saat pertama kali alat dihidupkan posisi pintu masih dalam keadaan tertutup, seperti pada gambar berikut:
- Selanjutnya pada LCD akan menampilkan kondisi pintu seperti pada gambar berikut:
- Kemudian langkah berikutnya adalah menempelkan kartu, yang pertama dilakukan adalah jika kartu tag yang ditempelkan pada RFID adalah kartu yang salah, maka akan tampil seperti pada gambar berikut:
- Jika kartu tag RFID tidak terdeteksi keabsahannya maka kartu tag akan ditolak aksesnya seperti pada tampak kartu diatas. Pendaftaran kartu tag RFID tersebut terdapat pada sketch arduino pada saat membuat program. Kemudian sistem akan mengirimkan pesan untuk memperingakan kepada pemilik ruangan bahwa ruangan tidak aman.
- Setalah pemilik ruangan mendapatkan SMS, beberapa saat kemudian system akan menelpon pemilik Ruangan,
- Selanjutnya jika kartu tag yang ditempelkan adalah kartu tag yang benar maka display LCD akan menampilkan text seperti berikut: Maka, display akan menampilkan text “masukkan password”,
- Setelah dimasukkan password yang benar, maka pintu akan terbuka dan dalam beberapa saat pintu akan menutup otomatis. Pesan yang masuk adalah seperti berikut:
SELESAI
Silahkan bertanya dikolom komentar atau hubungi admin hestech.id jika mengalami kendala pada saat pembuatan alat ini. Share jika articel ini bermanfaat.
Selamat Berkarya.
#BerbagiItuIndah.
comment 0 komentar
more_vert