Deteksi Banjir
Latar Belakang
Pendeteksi banjir sebagai deteksi level ketinggian debet sungai sangat di perlukan sebagai tindakan preventive ke pada warga yang akan kena imbas banjir. Tindakan preventif ini akan mengurangi resiko kerugian yang lebih besar. Karena warga dengan cepat tahu akan ada banjir yang akan menimpa mereka.
bisa download konten ini dalam bentuk ebook, cukup klik tombol merah di bawah ini,
Pendeteksi banjir ini sering kali harus di tempatkan pada tempat yang terpencil dan jauh dar kota. Sehingga koneksi internet mungkin bukan solusi yang tepat. dengan itu, interface adalah SMS adalah solusi yang tepat.
Modul GSM yang kita gunakan di sini adalah SIM800v1, sebuah modul gsm yang murah dan mudah di dapat. Modul GSM yang sangat mudah di hubungkan dengan Arduino uno custome kita nanti nya.
Pendeteksi Banjir berbasis Arduino dan interaksi GSM ini harapanya dapat membantu tempat-tempat perkampungan warga sebagai solusi dari tindakan preventive banjir. yuk sekarang kita buat alat nya.
Rangkaian Modul
Rangkaian modul ini menggunakan mikrokontroller atmega328 yang akan kita burn dengan arduino uno dan rangkaian power supply dengan LM2596 +5v. Sengaja menggunakan power supply ini agar kita mendapat kan Ampere yang cukup. Yaitu 3A.
Rangkaian Mikrokontroller
Untuk lebih mudah memahami nya, berikut rangkaian mikrokontroller nya.
Rangkaian Sensor Level
Rangkaian sensor level ini cukup sederhana, hanya menggunakan plat besi yang mana satu terhubung ke ground controller dan yang lain nya terhubung ke pin input arduino. Rangkaian nya sebagai berikut.
pin Miso di gunakan sebagai sensor level1, pin mosi di gunakan sebagai level dua dan pin sck sebagai level terakhir. Rangkaian dan PCB nya bisa teman-teman download di link berikut ini
Konstruksi Desain
untuk construksi nya bisa di lihat pada gambar teknik di bawah ini.
Cara kerja.
Plat hitam pada pipa kita hubungkan ke ground controller. nah ketika plat warna hijau terkena air maka plat hijau akan terhubung ke ground. Terhubung nya ke ground mengakibabkan pin ini akan menjadi logika 0. ketika air surut dan plat hitam dan hijau tidak terkena air maka pin akan logika 1.
Hal ini terjadi karena pin arduino pada controller kita set sebagai INPUT_PULLUP , artinya adalah ketika pin tidak terhubung ke apa apa maka kondisi nya HIGH, dan sebalik nya, ketika pin terhubung ke ground maka kondisi pin nya LOW.
Karena kondisi ini maka ada tabel sederhana sebagai berikut.
Pin Arduino | 12 | 11 | 13 |
Level 1 | 0 | 1 | 1 |
Level 2 | 0 | 0 | 1 |
Level 3 | 0 | 0 | 0 |
Pemrograman
Agar program dapat berjalan dengan baik, teman-teman bisa download library nya di link berikut ini. cukup klik aja link nya.
- https://github.com/cristiansteib/Sim800l
- https://github.com/jimmisitepu88/autoSetAddress_i2c_LCD/tree/master/Arduino-LiquidCrystal-I2C-library-master
Nah setelah ini, teman-teman pastikan semua library di atas sudah di add library arduino ide nya. Selanjut nya adalah merubah konfigurasi pin sim800 ke arduino di library sim800.h
#define RX_PIN A0 #define TX_PIN A1 #define RESET_PIN A2 // pin to the reset pin sim800l #define LED true // used for indicator led, in case that you don want set to false . #define LED_PIN 13 //pin to indicate states.
Perhatikan di baris #define RX_PIN A0, #define RX_PIN A1, #define RESET_PIN A2, patikan pin ini sudah di ganti. jika tidak sampe tahun jemput program dan hardware tidak akan terhubung dan jalan
tidak sampe tahun jemput program dan hardware tidak akan terhubung dan bekerja
Setelah semua step di atas sudah berjalan dengan baik. selanjut nya adalah program final, Berikut program Akhir nya
#include <Sim800l.h> #include <SoftwareSerial.h> //is necesary for the library!! bool error; #include <Wire.h> #include <LiquidCrystal_I2C.h> Sim800l Sim800l; //to declare the library LiquidCrystal_I2C lcd(16, 2); bool error; const byte s_alarm1 = 12; const byte s_alarm2 = 11; const byte s_alarm3 = 13; byte dt1, dt2, dt3; bool hold1, hold2, hold3, hold4; int data_sensor; char* sms_people; char* sms; char* n_rx = "082165062273";// ganti dengan no mu char* number1 = "082233008222";// ganti dengan no mu char* number2 = "";// isi no lain char* number3 = "";// isi no lain char* number4 = "";// isi no lain String line2; void setup() { // put your setup code here, to run once: pinMode(s_alarm1, INPUT_PULLUP); pinMode(s_alarm2, INPUT_PULLUP); pinMode(s_alarm3, INPUT_PULLUP); lcd.autoAddress(); lcd.begin(); Sim800l.begin(); lcd.setCursor(0,0); lcd.print("wait sms init"); delay(2000); delay(2000); delay(2000); lcd.clear(); } void loop() { // put your main code here, to run repeatedly: control(); delay(250); } void read_sensor(){ dt1 = digitalRead(s_alarm1); dt2 = digitalRead(s_alarm2); dt3 = digitalRead(s_alarm3); data_sensor = dt1 + dt2 + dt3; } void control(){ read_sensor(); switch(data_sensor){ case 0: if(hold1 == 0){ sms = "alarm3"; line2 = String(data_sensor) + (" /") + sms; sms_people = "Kondisi Banjir level 3, SANGAT BERBAHAYA"; lcd.setCursor(0,0); lcd.print(line2); lcd.setCursor(0,1); lcd.print("send sms..."); Sim800l.sendSms(n_rx,sms); Sim800l.sendSms(number1,sms_people); //Sim800l.sendSms(number2,sms_people); //Sim800l.sendSms(number3,sms_people); //Sim800l.sendSms(number4,sms_people); hold1 = 1; hold2 = 0; hold3 = 0; hold4 = 0; } lcd.setCursor(0,1); lcd.print("sms sukses."); break; case 1: if (hold2 == 0){ sms = "alarm2"; sms_people = "Kondisi Banjir level 2, AWAS..."; line2 = String(data_sensor) + (" /") + sms; lcd.setCursor(0,0); lcd.print(line2); lcd.setCursor(0,1); lcd.print("send sms..."); Sim800l.sendSms(n_rx,sms); Sim800l.sendSms(number1,sms_people); //Sim800l.sendSms(number2,sms_people); //Sim800l.sendSms(number3,sms_people); //Sim800l.sendSms(number4,sms_people); hold1 = 0; hold2 = 1; hold3 = 0; hold4 = 0; } lcd.setCursor(0,1); lcd.print("sms sukses."); break; case 2: if(hold3 == 0){ sms = "alarm1"; sms_people = "Kondisi Banjir level 1, WASPADA"; line2 = String(data_sensor) + (" /") + sms; lcd.setCursor(0,0); lcd.print(line2); lcd.setCursor(0,1); lcd.print("send sms..."); Sim800l.sendSms(n_rx,sms); Sim800l.sendSms(number1,sms_people); //Sim800l.sendSms(number2,sms_people); //Sim800l.sendSms(number3,sms_people); //Sim800l.sendSms(number4,sms_people); hold1 = 0; hold2 = 0; hold3 = 1; hold4 = 0; } lcd.setCursor(0,1); lcd.print("sms sukses."); break; case 3: if(hold4 == 0){ sms = "alarm0"; sms_people = "Kondisi AIR aman..."; line2 = String(data_sensor) + (" /") + sms; lcd.setCursor(0,0); lcd.print(line2); lcd.setCursor(0,1); lcd.print("send sms..."); Sim800l.sendSms(n_rx,sms); Sim800l.sendSms(number1,sms_people); //Sim800l.sendSms(number2,sms_people); //Sim800l.sendSms(number3,sms_people); //Sim800l.sendSms(number4,sms_people); hold1 = 0; hold2 = 0; hold3 = 0; hold4 = 1; } lcd.setCursor(0,1); lcd.print("sms sukses."); break; } }
Program di atas sudah di uji dan di coba, alhamdulillah berhasil.
Pengembangan
Pada rangkaian di atas sudah sisipkan modul bluetooth, jadi board di atas bisa di buat lebih flexible jika ingin di jadi kan sebuah product. Modul bluetooth ini fungsi nya untuk mengganti no telpon yang ingin di tuju sebagai penerima sms notifikasi.
nah, semua nya sudah lengkap, desain PCB, rangkain, program, tinggal teman-teman, apakah mau mencoba atau tidak.
Selamat mencoba, thanks
#mikroavr
#learningAndSharing