Membuat sistem keamanan rumah dengan Arduino dan SMS notification
Merupakan sebuah sistem keamanan yang menggunakan SMS sebagai kontrol dan feedback dari sistem. Dengan menggunakan 3 buah sensor, Sensor Api yang akan mendeteksi adanya api atau kebakaran, Sensor Gas yang akan mendeteksi adanya gas bocor atau lebih tepatnya LPG pada kompor, dan Sensor PIR yang berfungsi untuk mendeteksi adanya gerakan manusia. Ketika salah satu dari ketiga sensor mendeteksia adanya hal-hal tadi, maka secara otomatis Arduino diprogram untuk menyalakan buzzer dan mengirimkan pesan teks ke nomor tertentu yang berisikan bahwa ada sesuatu terdeteksi tergantung dari sensor apa yang mendeteksi. Selain untuk menerima feed back berupa pesan tersebut, sistem ini juga dikontrol menggunakan SMS untuk : menyalakan sistem, mematikan sistem, dan mematikan alarm ketika. Mematikan alarm digunakan untuk mematikan buzzer ketika sensor mendeksi adanya sesuatu. Sebuah LED digunakan sebagai indikator apakah sistem kemanan telah aktif atau tidak. Selain itu, sistem juga dilengkapi dengan sebuah LCD 20x4 yang terhubung menggunakan modul I2C pada arduino, setiap jalannya proses dan beberapa informasi akan ditampilkan pada LCD tersebut.
Schematic
Arduino - Output Component Wiring
Arduino - SIM900A Wiring
Kebutuhan Hardware
- Modem SMS Getway (SIM900A)
- Sensor Api (Flame Sensor)
- Sensor Gas (MQ2)
- Sensor PIR
- LED
- Buzzer
- PC / Laptop dengan Arduino IDE
- Modul LCD 20x4 (dengan koneksi i2c)
- Modul I2C
- Modul Arduino UNO
- Power supply +5Volt
Diagram Blok
Schematic
Wiring untuk SIM900A
Arduino - Sensors Wiring
Arduino - Output Component Wiring
Arduino - I2C Wiring
Selengkapnya tentang koneksi I2C --> Project V - 14
Source Code
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
SoftwareSerial mySerial(9, 8);
boolean stringComplete = false;
String inputString = "";
String fromGSM = "";
String my_number = "082322514735";
int pir = 10; //sensor gerak/orang
int mq = 11; //sensor gas
int api = 12; //sensor api
int buzzer = 13; //alarm
int led = 7; //led
unsigned long millisAwal, timeBuzz;
char str, f;
int i, j;
byte keluar = 1;
boolean sensorON = false;
void setup()
{
lcd.begin();
lcd.setCursor(0, 0);
lcd.print("Initialization Modem");
delay(1000);
pinMode(pir, INPUT);
pinMode(mq, INPUT);
pinMode(api, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
Serial.println("Serial Connected");
mySerial.begin(9600);
inputString.reserve(200);
fromGSM.reserve(200);
mySerial.print("ATE0");
mySerial.print("\r");
delay(300);
lcd.setCursor(0, 2);
lcd.print(" DONE ");
delay(1000);
lcd.clear();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Initial Sensor ");
delay(2000);
while (!digitalRead(mq));
lcd.setCursor(0, 2);
lcd.print(" DONE ");
delay(2000);
lcd.clear();
}
void sendSMS(String& phone_number, char message[] )
{
mySerial.print("AT+CMGF=1");
mySerial.print("\r");
delay(500);
mySerial.print("AT+CMGS=\"" + phone_number + "\"\r");
delay(700);
mySerial.print(message);
mySerial.write(0x1A);
delay(500);
}
void recSMS()
{
if (mySerial.available()) {
char inChar = mySerial.read();
if (inChar == '\n') {
//check the state
if (fromGSM == "OK\r") {
Serial.println("AT Command, Done !");
}
else if (fromGSM == "ON\r") {
Serial.println("sensorOn = true");
sensorON = true;
digitalWrite(led, HIGH);
}
else if (fromGSM == "OFF\r") {
Serial.println("sensorOff = false");
sensorON = false;
digitalWrite(buzzer, LOW);
digitalWrite(led, LOW);
}
else if (fromGSM == "ALARMOFF\r") {
Serial.println("sensorOff = false");
keluar = 0;
digitalWrite(buzzer, LOW);
}
else if (fromGSM == "ERROR\r") {
Serial.println("GSM Error");
}
// Serial.println(fromGSM);
fromGSM = "";
} else {
fromGSM += inChar;
}
delay(20);
}
if (stringComplete) {
mySerial.print(inputString);
inputString = "";
stringComplete = false;
}
}
void loop ()
{
lcd.setCursor(0, 0);
lcd.print("Home Security System");
lcd.setCursor(0, 1);
lcd.print(" SMS Based");
lcd.setCursor(0, 3);
bacaSensor();
recSMS();
if (sensorON == false) {
lcd.setCursor(0, 2);
lcd.print(" Sensor OFF ");
lcd.setCursor(0, 3);
lcd.print(" nonactive ");
}
else {
lcd.setCursor(0, 2);
lcd.print(" Sensor ON ");
lcd.setCursor(0, 3);
lcd.print(" Secure ");
}
}
void bacaSensor() {
//----------------------------------baca sensor gerak
if (digitalRead(pir) == HIGH && sensorON == true) {
digitalWrite(buzzer, HIGH);
lcd.setCursor(0, 2);
lcd.print(" There is Movement");
lcd.setCursor(0, 3);
lcd.print("Conditions of Danger");
char myMessage[] = "There is Movement";
sendSMS(my_number, myMessage);
millisAwal = millis();
do {
timeBuzz = millis() - millisAwal;
recSMS();
//-------waktu lama buzzer ON 5 menit / 300000 mili detik
if (timeBuzz > 300000) {
keluar = 0;
}
}
while (keluar);
keluar = 1;
digitalWrite(buzzer, LOW);
lcd.clear();
}
else if (sensorON == true) {
lcd.setCursor(0, 3);
lcd.print(" Secure ");
}
//----------------------------------baca sensor asap
if (digitalRead(mq) == LOW && sensorON == true) {
digitalWrite(buzzer, HIGH);
lcd.setCursor(0, 2);
lcd.print(" There is Gas");
lcd.setCursor(0, 3);
lcd.print("Conditions of Danger");
char myMessage[] = "There is Gas";
sendSMS(my_number, myMessage);
millisAwal = millis();
do {
timeBuzz = millis() - millisAwal;
recSMS();
//-------waktu lama buzzer ON 5 menit / 300000 mili detik
if (timeBuzz > 300000) {
keluar = 0;
}
}
while (keluar);
keluar = 1;
digitalWrite(buzzer, LOW);
lcd.clear();
}
else if (sensorON == true) {
lcd.setCursor(0, 3);
lcd.print(" Secure ");
}
//----------------------------------baca sensor api
if (digitalRead(api) == LOW && sensorON == true) {
digitalWrite(buzzer, HIGH);
lcd.setCursor(0, 2);
lcd.print(" There is Fire");
lcd.setCursor(0, 3);
lcd.print("Conditions of Danger");
char myMessage[] = "There is Fire";
sendSMS(my_number, myMessage);
millisAwal = millis();
do {
timeBuzz = millis() - millisAwal;
recSMS();
//-------waktu lama buzzer ON 5 menit / 300000 mili detik
if (timeBuzz > 300000) {
keluar = 0;
}
}
while (keluar);
keluar = 1;
digitalWrite(buzzer, LOW);
lcd.clear();
}
else if (sensorON == true) {
lcd.setCursor(0, 3);
lcd.print(" Secure ");
}
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') {
stringComplete = true;
}
}
}
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
SoftwareSerial mySerial(9, 8);
boolean stringComplete = false;
String inputString = "";
String fromGSM = "";
String my_number = "082322514735";
int pir = 10; //sensor gerak/orang
int mq = 11; //sensor gas
int api = 12; //sensor api
int buzzer = 13; //alarm
int led = 7; //led
unsigned long millisAwal, timeBuzz;
char str, f;
int i, j;
byte keluar = 1;
boolean sensorON = false;
void setup()
{
lcd.begin();
lcd.setCursor(0, 0);
lcd.print("Initialization Modem");
delay(1000);
pinMode(pir, INPUT);
pinMode(mq, INPUT);
pinMode(api, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
Serial.println("Serial Connected");
mySerial.begin(9600);
inputString.reserve(200);
fromGSM.reserve(200);
mySerial.print("ATE0");
mySerial.print("\r");
delay(300);
lcd.setCursor(0, 2);
lcd.print(" DONE ");
delay(1000);
lcd.clear();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Initial Sensor ");
delay(2000);
while (!digitalRead(mq));
lcd.setCursor(0, 2);
lcd.print(" DONE ");
delay(2000);
lcd.clear();
}
void sendSMS(String& phone_number, char message[] )
{
mySerial.print("AT+CMGF=1");
mySerial.print("\r");
delay(500);
mySerial.print("AT+CMGS=\"" + phone_number + "\"\r");
delay(700);
mySerial.print(message);
mySerial.write(0x1A);
delay(500);
}
void recSMS()
{
if (mySerial.available()) {
char inChar = mySerial.read();
if (inChar == '\n') {
//check the state
if (fromGSM == "OK\r") {
Serial.println("AT Command, Done !");
}
else if (fromGSM == "ON\r") {
Serial.println("sensorOn = true");
sensorON = true;
digitalWrite(led, HIGH);
}
else if (fromGSM == "OFF\r") {
Serial.println("sensorOff = false");
sensorON = false;
digitalWrite(buzzer, LOW);
digitalWrite(led, LOW);
}
else if (fromGSM == "ALARMOFF\r") {
Serial.println("sensorOff = false");
keluar = 0;
digitalWrite(buzzer, LOW);
}
else if (fromGSM == "ERROR\r") {
Serial.println("GSM Error");
}
// Serial.println(fromGSM);
fromGSM = "";
} else {
fromGSM += inChar;
}
delay(20);
}
if (stringComplete) {
mySerial.print(inputString);
inputString = "";
stringComplete = false;
}
}
void loop ()
{
lcd.setCursor(0, 0);
lcd.print("Home Security System");
lcd.setCursor(0, 1);
lcd.print(" SMS Based");
lcd.setCursor(0, 3);
bacaSensor();
recSMS();
if (sensorON == false) {
lcd.setCursor(0, 2);
lcd.print(" Sensor OFF ");
lcd.setCursor(0, 3);
lcd.print(" nonactive ");
}
else {
lcd.setCursor(0, 2);
lcd.print(" Sensor ON ");
lcd.setCursor(0, 3);
lcd.print(" Secure ");
}
}
void bacaSensor() {
//----------------------------------baca sensor gerak
if (digitalRead(pir) == HIGH && sensorON == true) {
digitalWrite(buzzer, HIGH);
lcd.setCursor(0, 2);
lcd.print(" There is Movement");
lcd.setCursor(0, 3);
lcd.print("Conditions of Danger");
char myMessage[] = "There is Movement";
sendSMS(my_number, myMessage);
millisAwal = millis();
do {
timeBuzz = millis() - millisAwal;
recSMS();
//-------waktu lama buzzer ON 5 menit / 300000 mili detik
if (timeBuzz > 300000) {
keluar = 0;
}
}
while (keluar);
keluar = 1;
digitalWrite(buzzer, LOW);
lcd.clear();
}
else if (sensorON == true) {
lcd.setCursor(0, 3);
lcd.print(" Secure ");
}
//----------------------------------baca sensor asap
if (digitalRead(mq) == LOW && sensorON == true) {
digitalWrite(buzzer, HIGH);
lcd.setCursor(0, 2);
lcd.print(" There is Gas");
lcd.setCursor(0, 3);
lcd.print("Conditions of Danger");
char myMessage[] = "There is Gas";
sendSMS(my_number, myMessage);
millisAwal = millis();
do {
timeBuzz = millis() - millisAwal;
recSMS();
//-------waktu lama buzzer ON 5 menit / 300000 mili detik
if (timeBuzz > 300000) {
keluar = 0;
}
}
while (keluar);
keluar = 1;
digitalWrite(buzzer, LOW);
lcd.clear();
}
else if (sensorON == true) {
lcd.setCursor(0, 3);
lcd.print(" Secure ");
}
//----------------------------------baca sensor api
if (digitalRead(api) == LOW && sensorON == true) {
digitalWrite(buzzer, HIGH);
lcd.setCursor(0, 2);
lcd.print(" There is Fire");
lcd.setCursor(0, 3);
lcd.print("Conditions of Danger");
char myMessage[] = "There is Fire";
sendSMS(my_number, myMessage);
millisAwal = millis();
do {
timeBuzz = millis() - millisAwal;
recSMS();
//-------waktu lama buzzer ON 5 menit / 300000 mili detik
if (timeBuzz > 300000) {
keluar = 0;
}
}
while (keluar);
keluar = 1;
digitalWrite(buzzer, LOW);
lcd.clear();
}
else if (sensorON == true) {
lcd.setCursor(0, 3);
lcd.print(" Secure ");
}
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') {
stringComplete = true;
}
}
}
Cara Kerja Alat
1. Koneksikan antara sistem Arduino dengan peripheral lain seperti pada rangkaian (skematik).
2. Pasang power supply (adaptor 5 V) dan hidupkan (colokkan ke sumber PLN 220V) sehingga
lampu LED indikator nyala, LCD juga nyala.
3. Ketika pertama kali dihidupkan.
4. LCD akan menunjukkan apakah sistem keamanan telah On atau Off.
5. Kirim SMS dengan format "ON" untuk menyalakan sistem keamanan, LED Indikator akan
menyala dan LCD akan menunjukkan informasi bahwa sistem keamanan telah ON.
6. Ketika salah satu sensor mendeteksi adanya sesuatu, misalkan sensor gas mendeteksi adanya gas,
maka LCD akan menunjukkan terdeteksi gas, buzzer akan berbunyi dan secara otomatis akan mengirimkan pesan ke nomor tertentu yang berisi bahwa telah terdeteksi gas.
7. Kirim SMS dengan format "ALARMOFF" untuk mematikan alarm yang selanjutnya akan mematikan
buzzer.
8. Kirim SMS dengan format "OFF" untuk mematikan sistem keamanan yang selanjutnya juga akan
mematikan LED Indikator.
Video untuk Project V - 9. Sistem Keamanan Rumah dengan 3 Sensor berbasis SMS menggunakan Arduino
File yang diperlukan
Sumber : Tutorial dasar Arduino
permisi bang kakalu rangkaian saya tdk menggunakan LCD yang dihapus pada coding programnya bagian mananya saja
ReplyDelete