Daftar Pusataka
Guntur Dharma Putra (2013). Pengembangan Gateway Berbasis Embedded Device
Untuk Interoperabilitas Jaringan Sensor Nirkabel Dan Protokol Internet,
Yogyakarta. Tugas Akhir. Teknik Elektro. Universitas Gadjah Mada.
Zudiono (2016). Alat Peringatan Keamanan Dini Rumah Secara Nirkabel Dengan
Teknologi Sms Gateway.
Yogyakarta. Tugas Akhir. D3 Elektronika Dan
Instrumentasi. Universitas Gadjah Mada.
Heranudin (2007).
Rancang Bangun Sisetm Keamnana Ruangan Menggunakan
Radio Frequency Identification (RFID) Berbasis Mikrokontroler AT89C51.
Skripsi . Teknik Elektro. Universitas Indonesia. Depok.
I Gusti Agung Putu Raka Agung, I Made Irwan Susanto (2012), Rancang Bangun
Prototipe Penghitung Jumlah Orang Dalam Ruangan Terpadu Berbasis
Mikrokontroler ATMEGA328P. Jimbaran Bali. Teknik Elektro. Universitas
Udayana.
Mustopa (2015). Sistem Keamanan Rumah Berbasis Rfid Terintegrasi Dengan Sms
Gateway Sebagai Peringatan Dini Kepada Pemilik Rumah.
Jakarta. Teknik
Elektro. Universitas Mercu Buana.
Jani Sujatmoko (2017).
Rancang Bangun Pemodelan Sistem Keamanan
Perumahan Berbasis Arduino Dengan Kontrol Modul GSM. Jakarta. Teknik
Elektro. Universitas Mercu Buana.
Hakim, R. A; Bramanto, A dan Syahri, R. (2010). “Aplikasi Monitoring Suhu
Ruangan Berbasis Komputer dan SMS Gateway”. Jurnal Informatika
Mulawarman. Vol. 5. No. (3). 32 – 38.
Eko Ihsanto. (2013) “Rancang Bangun Akses Pintu Keluar Masuk Menggunakan
PIN Berbasis Mikrokontroller AT89S52”. Jurnal Teknik Elektro, Universitas
Mercu Buana Vol.4 No.(1).
Budiharto, W. (2010). Robotika - Teori dan Implementasinya. Yogyakarta: ANDI.
Syahwil, M. (2013).
Panduan Mudah Simulasi dan Praktik Mikrokontroler
Arduino. Yogyakarta: ANDI.
A. B. bin Ladjamudin, Analisis dan Desain Sistem Informasi. Yogyakarta. Graha
Ilmu, 2005.
Rui Santos. Complete Guide for nRF24L01 – 2.4GHz RF Transceiver Module With
Arduino.
http://randomnerdtutorials.com/nrf24l01-2-4ghz-rf-transceiver-module-with-arduino
.
Mike
McCauley.
Library
nRF24l01
Module
for
Arduino.
http://www.airspayce.com/mikem/arduino/RadioHead
.
Cristian Steib. Library SIM800L Module for Arduino UNO.
https://github.com/cristiansteib/Sim800l/releases
.
Miguelbalboa and Community development. Library MFRC522 Module.
https://github.com/miguelbalboa/rfid/releases
.
[Online]
https://adafruit.com
Diakses (06/03/2017).
[Online]
http://playground.arduino.cc/Main/InterfacingWithHardware
. Diakses
(06/03/2017
LAMPIRAN KODE PROGRAM
###Central Node###
#include <SPI.h> //Library koneksi spi
#include <RH_NRF24.h> //Library modul radio transceiver #include <Sim800l.h> //Library modul GSM
#include <SoftwareSerial.h> //Library modul GSM
Sim800l Sim800l; //Deklarasi modul gsm
RH_NRF24 nrf24; //Deklarasi modul radio transceiver int peringatan = LOW;
int keamanan = LOW; char* text;
char* number; char* textz; char* nomor; char* nPengirimc;
bool error; //to catch the response of sendSms
String texts, gantinomor, nPengirim; // to almacenate the text of the sms
int bacaPesan = LOW;
long previousMillis = 0; // will store last time LED was updated
long OnTime = 60000; void setup()
{
Serial.begin(9600);
Sim800l.begin(); // initializate the library.
//pinMode(switch2, INPUT); pinMode(7, OUTPUT); digitalWrite(7, HIGH); Sim800l.delAllSms(); kotakmasuk(); nomor = "+6281291494507"; while (!Serial)
; // wait for serial port to connect. Needed for Leonardo only
if (!nrf24.init())
{
Serial.println("init failed");
for(int i = 0; i < 4; i++) { digitalWrite(7, LOW); delay(200); digitalWrite(7, HIGH); delay(200); } }
// Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm
if (!nrf24.setChannel(1))
{
Serial.println("setChannel failed");
for(int i = 0; i < 4; i++) {
delay(200); digitalWrite(7, HIGH); delay(200); } } if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm)) {
Serial.println("setRF failed");
for(int i = 0; i < 4; i++) { digitalWrite(7, LOW); delay(200); digitalWrite(7, HIGH); delay(200); } } } void loop() { //Serial.println(lastpress);
unsigned long currentMillis = millis(); //Membaca kotakmasuk setiap 60 detik
if((bacaPesan == HIGH) && (currentMillis - previousMillis >=
OnTime))
{
bacaPesan = LOW; // Turn it off
previousMillis = currentMillis; // Remember the time
kotakmasuk();
textz = strlwr(texts.c_str());
nPengirimc = strlwr(nPengirim.c_str());
Serial.print("Pengirim : ");
Serial.println(nPengirimc);
if (strstr (nPengirimc, nomor)) // Filter nomor
{
Serial.println("Pesan :");
Serial.println(textz);
if (strstr (textz, "securityon"))
{
Serial.println("Kemanan Dinyalakan.");
for(int i = 0; i < 2; i++) { digitalWrite(7, LOW); delay(200); digitalWrite(7, HIGH); delay(200); }
kirim("KEAMANAN DIAKTIFKAN!", nomor); keamanan = HIGH;
delay(1000); kotakmasuk(); //Sim800l.delAllSms();
}
else if (strstr (textz, "securityoff"))
{
for(int i = 0; i < 4; i++) { digitalWrite(7, LOW); delay(200); digitalWrite(7, HIGH); delay(200); }
kirim("KEAMANAN DINONAKTIFKAN!", nomor); keamanan = LOW;
delay(1000);
kotakmasuk(); //Sim800l.delAllSms();
}
else if (strstr (textz, "ganti"))
{
Serial.println("asdf");
gantinomor = strstr(textz, "ganti");
gantinomor.replace("ganti", "");
//gantinomor.replace("\"", "");
gantinomor.replace("ok", "");
gantinomor.replace("\n", "");
gantinomor.replace("\r", ""); nomor = gantinomor.c_str();
kirim("NOMOR TELAH DIGANTI!", nomor);
delay(1000); kotakmasuk(); } } } bacaPesan = HIGH; if (nrf24.available()) {
// Should be a message for us now
uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
if (nrf24.recv(buf, &len))
{
// NRF24::printBuffer("request: ", buf, len);
//Serial.print("got request: ");
Serial.println((char*)buf);
//Serial.println(textz);
if (keamanan == HIGH)
{
if (strcmp ("pintub",(char*)buf) == 0)
{ digitalWrite(7, LOW); //kotakmasuk(); //Sim800l.delAllSms(); // if (peringatan == LOW) {
kirim("PINTU TERBUKA!", nomor); peringatan = HIGH;
}
}
else if (strcmp ("jendelab",(char*)buf) == 0)
digitalWrite(7, LOW); //kotakmasuk(); //Sim800l.delAllSms(); // if (peringatan == LOW) {
kirim("JENDELA TERBUKA!", nomor); peringatan = HIGH;
}
}
else if (strcmp ("gerakh",(char*)buf) == 0)
{ digitalWrite(7, LOW); //kotakmasuk(); //Sim800l.delAllSms(); // if (peringatan == LOW) {
kirim("ADA PERGERAKAN DIDALAM KAMAR!", nomor); peringatan = HIGH;
}
}
else if (strcmp ("rfidt",(char*)buf) == 0)
{
if (peringatan == HIGH)
{
digitalWrite(7, HIGH); }
else if (peringatan == LOW)
{
Serial.println("AKSES DITERMA, SECURITY DINONAKTIFKAN!"); keamanan = LOW; peringatan = LOW; for(int i = 0; i < 4; i++) { digitalWrite(7, LOW); delay(200); digitalWrite(7, HIGH); delay(200); }
kirim("KEAMANAN DINONAKTIFKAN!", nomor);
}
} }
else if (keamanan == LOW)
{
if (strcmp ("rfidt",(char*)buf) == 0)
{
digitalWrite(7, HIGH);
Serial.println("AKSES DITERMA, SECURITY DIAKTIFKAN!"); keamanan = HIGH; peringatan = LOW; for(int i = 0; i < 2; i++) { digitalWrite(7, LOW); delay(200); digitalWrite(7, HIGH); delay(200); }
} //Serial.println("Kemanan Dimatikan."); //peringatan = LOW; //kotakmasuk(); //digitalWrite(7, HIGH); } } else {
Serial.println("recv failed");
} }
}
void kirim(char* text, char* number) {
//mengirim pesan
Sim800l.signalQuality();
error=Sim800l.sendSms(number,text);
Serial.println("Send sms");
//
//menyalakan kembali radio transceiver
while (!Serial)
; // wait for serial port to connect. Needed for Leonardo only
if (!nrf24.init())
Serial.println("init failed");
// Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm
if (!nrf24.setChannel(1))
Serial.println("setChannel failed");
if (!nrf24.setRF(RH_NRF24::DataRate2Mbps,
RH_NRF24::TransmitPower0dBm))
Serial.println("setRF failed"); //
}
void kotakmasuk() {
//membaca isi pesan yang diterima paling awal
nPengirim=Sim800l.getNumberSms(1);
texts=Sim800l.readSms(1); //Serial.println(texts);
Sim800l.delAllSms(); //
//menyalakan kembali radio transceiver
while (!Serial)
; // wait for serial port to connect. Needed for Leonardo only
if (!nrf24.init())
Serial.println("init failed");
// Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm
if (!nrf24.setChannel(1))
Serial.println("setChannel failed");
if (!nrf24.setRF(RH_NRF24::DataRate2Mbps,
RH_NRF24::TransmitPower0dBm))
Serial.println("setRF failed"); //
###RFID###
#include <SPI.h> #include <MFRC522.h> #include <RH_NRF24.h> #include <RHSoftwareSPI.h> #define SS_PIN 10 #define RST_PIN 9 RHSoftwareSPI spi; RH_NRF24 nrf24(8, 7, spi);MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
// Init array that will store new NUID
byte nuidPICC[4]; void setup() {
spi.setPins(4, 5, 6);
Serial.begin(9600);
SPI.begin(); // Init SPI bus
pinMode(3, OUTPUT);
rfid.PCD_Init(); // Init MFRC522
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
Serial.println(F("This code scan the MIFARE Classsic NUID."));
Serial.print(F("Using the following key:"));
printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
while (!Serial) if (!nrf24.init())
Serial.println("init failed");
if (!nrf24.setChannel(1))
Serial.println("setChannel failed");
if (!nrf24.setRF(RH_NRF24::DataRate2Mbps,
RH_NRF24::TransmitPower0dBm))
Serial.println("setRF failed");
}
void loop() {
// Look for new cards
if ( ! rfid.PICC_IsNewCardPresent())
return;
// Verify if the NUID has been readed
if ( ! rfid.PICC_ReadCardSerial())
return;
Serial.print(F("PICC type: "));
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
Serial.println(rfid.PICC_GetTypeName(piccType));
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F("Your tag is not of type MIFARE Classic."));
return;
}
if (rfid.uid.uidByte[0]==0xC6 && rfid.uid.uidByte[1]==0x8F &&
rfid.uid.uidByte[2]==0x26 && rfid.uid.uidByte[3]==0x07) {
Serial.println(F("Selamat Datang BOS!"));
uint8_t data[] = "rfidt";
nrf24.send(data, sizeof(data));
delay(400);
digitalWrite(3, HIGH); // Buzzer high
delay(500); // wait for 1/2 second
digitalWrite(3, LOW); // Buzzer low
delay(500); // wait for 1/2 second
digitalWrite(3, HIGH); // Buzzer high
delay(500); // wait for 1/2 second
digitalWrite(3, LOW); // Buzzer low
delay(500); // wait for 1/2 second
//Serial.println(F("The NUID tag is:"));
//Serial.print(F("In hex: "));
//printHex(rfid.uid.uidByte, rfid.uid.size);
//Serial.println();
}
else {
Serial.println(F("AKSES DITOLAK!"));
uint8_t data[] = "rfidf";
nrf24.send(data, sizeof(data));
delay(400);
digitalWrite(3, HIGH); // turn the LED on (HIGH is the voltage level)
delay(3000); // wait for a second
digitalWrite(3, LOW); // turn the LED off by making the voltage LOW } // Halt PICC rfid.PICC_HaltA(); // Stop encryption on PCD rfid.PCD_StopCrypto1(); }
void printHex(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
} }
###PINTU###
#include <SPI.h> #include <RH_NRF24.h> RH_NRF24 nrf24; int switch1; int switch2 = 2; int pintu = LOW; void setup(){
Serial.begin(9600);
pinMode(switch2, INPUT);
pinMode(9, OUTPUT);
while (!Serial)
; // wait for serial port to connect. Needed for Leonardo only
if (!nrf24.init())
Serial.println("init failed");
// Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm
if (!nrf24.setChannel(1))
Serial.println("setChannel failed");
if (!nrf24.setRF(RH_NRF24::DataRate2Mbps,
RH_NRF24::TransmitPower0dBm))
Serial.println("setRF failed");
for(int i = 0; i < 20; i++) {
if(i !=2)
Serial.println("Pintu Terbuka!");
}
attachInterrupt(0, digitalInterrupt, CHANGE); }
void loop() {
switch1 = digitalRead(switch2);
//Serial.println(switch1);
if (switch1 == HIGH)
{
for(int i = 0; i < 20; i++) {
switch1 = digitalRead(switch2);
if (switch1 == HIGH)
{
uint8_t data[] = "pintut"; nrf24.send(data, sizeof(data));
nrf24.waitPacketSent();
pintu = HIGH; delay(500);
Serial.println("TUTUP");
}
else {
uint8_t data[] = "pintub"; nrf24.send(data, sizeof(data));
nrf24.waitPacketSent();
Serial.println("BUKA"); } } } else { for(int i = 0; i < 20; i++) {
switch1 = digitalRead(switch2);
if (switch1 == LOW)
{
uint8_t data[] = "pintub"; nrf24.send(data, sizeof(data));
nrf24.waitPacketSent();
pintu = HIGH; delay(500);
Serial.println("BUKA");
}
else {
uint8_t data[] = "pintut"; nrf24.send(data, sizeof(data));
nrf24.waitPacketSent();
delay(500);
Serial.println("TUTUP");
} } } ADCSRA &= ~(1 << 7); //ENABLE SLEEP SMCR |= (1 << 2); SMCR |= 1; //BOD DISABLE MCUCR |= (3 << 5);
MCUCR = (MCUCR & ~(1 << 5)) | (1 <<6);
__asm__ __volatile__("sleep"); }
void digitalInterrupt(){ }
###JENDELA###
#include <SPI.h> #include <RH_NRF24.h> RH_NRF24 nrf24; int switch1; int switch2 = 2; int pintu = LOW; void setup(){
Serial.begin(9600);
pinMode(switch2, INPUT);
pinMode(9, OUTPUT);
while (!Serial)
; // wait for serial port to connect. Needed for Leonardo only
if (!nrf24.init())
Serial.println("init failed");
// Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm
if (!nrf24.setChannel(1))
Serial.println("setChannel failed");
if (!nrf24.setRF(RH_NRF24::DataRate2Mbps,
RH_NRF24::TransmitPower0dBm))
Serial.println("setRF failed");
for(int i = 0; i < 20; i++) {
if(i !=2)
Serial.println("Jendela Terbuka!");
}
attachInterrupt(0, digitalInterrupt, CHANGE); }
void loop() {
switch1 = digitalRead(switch2);
//Serial.println(switch1);
if (switch1 == HIGH)
{
for(int i = 0; i < 20; i++) {
switch1 = digitalRead(switch2);
if (switch1 == HIGH)
{
uint8_t data[] = "jendelat"; nrf24.send(data, sizeof(data));
nrf24.waitPacketSent();
pintu = HIGH; delay(500);
Serial.println("TUTUP");
}
else {
uint8_t data[] = "jendelab"; nrf24.send(data, sizeof(data));
nrf24.waitPacketSent();
Serial.println("BUKA"); } } } else { for(int i = 0; i < 20; i++) {
switch1 = digitalRead(switch2);
if (switch1 == LOW)
{
uint8_t data[] = "jendelab"; nrf24.send(data, sizeof(data));
nrf24.waitPacketSent();
pintu = HIGH; delay(500);
Serial.println("BUKA");
}
else {
uint8_t data[] = "jendelat"; nrf24.send(data, sizeof(data));
nrf24.waitPacketSent();
delay(500);
Serial.println("TUTUP");
} } } ADCSRA &= ~(1 << 7); //ENABLE SLEEP SMCR |= (1 << 2); SMCR |= 1; //BOD DISABLE MCUCR |= (3 << 5);
MCUCR = (MCUCR & ~(1 << 5)) | (1 <<6);
__asm__ __volatile__("sleep"); }
void digitalInterrupt(){ }