Breaking

Wednesday, September 9, 2020

Alat Pengukur Ketinggian dan Aliran Air sebagai Pendeteksi Dini Banjir di Sungai Berbasis Arduino Uno

Indonesia merupakan daerah dengan 2 musim di setiap tahunnya. Musim tersebut adalah musim kemarau dan musim penghujan. Saat musim hujan tiba, biasanya akan banyak sungai yang meluap dan menyebabkan Banjir. Untuk melakukan mitigasi, maka kami mencoba membuat Alat Pengukur Ketinggian dan Aliran Air sebagai Pendeteksi Dini Banjir di Sungai Berbasis Arduino Uno


Alat ini mengukur Ketinggian dan Kecepatan Aliran Sungai yang kemudian apabila melebihi ambang batas tertentu akan mengirimkan notifikasi peringatan melalui SMS. Sehingga dapat menghindari kerugian dan korban jiwa, karena banjir bisa di deteksi secara Dini sebelum benar-benar meluap ke permukaan.


Baca Juga : Cara Program dan Akses Modul GSM SIM800L V.1 Menggunakan Arduino Nano/Uno .


Berikut ini adalah gambar Schematics Diagram Alat Pengukur Ketinggian dan Aliran Air sebagai Pendeteksi Dini Banjir di Sungai Berbasis Arduino Uno :


Berikut ini adalah Hardware yang dibutuhkan :

1. Arduino Uno R3 >>> BELI DISINI
2. Sensor Ultrasonic >>> BELI DISINI
3. Module SIM800L >>> BELI DISINI
4. Water Flow Sensor >>> BELI DISINI
5. Kabel Jumper Secukupnya >>> BELI DISINI
6. Dioda 1N4007 >>> BELI DISINI
7. Elco 470uF/16V >>> BELI DISINI


Berikut ini adalah Code Programnya :

/***************************

Alat Pengukur Ketinggian dan Aliran Air sebagai Pendeteksi Dini Banjir di Sungai Berbasis Arduino Uno

Oleh : Arduino Indonesia
Website : www.arduinoindonesia.id
Toko Online : www.workshopelectronics3in1.com
Blog : www.edukasielektronika.com

Copyright @2020

****************************/

//Declare GSM
#include "SIM900.h"
#include "sms.h"
SMSGSM sms;
char smsbuffer[160];
char n[20];
boolean started=false;
#include <SoftwareSerial.h>

//Declare Sensor Ultrasonic
#define triger 8 //mendefinisikan trigger pada pin 8
#define echo 9 //mendeklarasikan echo pada pin 9

//Declare Sensor Water Flow
byte sensorInt = 0;
byte flowSensor_pin = 5;
float konst = 4.5;
float debit_air;
volatile byte count;
unsigned int flow_mlt;
unsigned long total_volume;
unsigned long oldTime;
unsigned int frac;

void setup()
{
  Serial.begin(9600);
  pinMode (triger, OUTPUT); //trigger sebagai output
  pinMode (echo, INPUT); //echo sebagai input
 
  pinMode(flowSensor_pin, INPUT);
  digitalWrite(flowSensor_pin, HIGH);
 
  if (gsm.begin(9600))
  {
    Serial.println("\nstatus=READY");
    started=true;
  }
  else Serial.println("\nstatus=IDLE");
 
  if (started)
  {
    sms.SendSMS("0857xxxxxxxxxx", "Sistem Monitoring READY!!!");
  }

  count        = 0;
  debit_air    = 0.0;
  flow_mlt     = 0;
  total_volume = 0;
  oldTime      = 0;

  attachInterrupt(sensorInt, countPulse, FALLING);
  Serial.println("Menggunakan Water Flow Sensor");
}

void waterflow()
{
  if ((millis() - oldTime) > 1000)
  {
    detachInterrupt(sensorInt);
    debit_air = ((1000.0 / (millis() - oldTime)) * count) / konst;
    oldTime = millis();
    flow_mlt = (debit_air / 60) * 1000;
    total_volume += flow_mlt;

    frac;

    Serial.print("Debit air: ");
    Serial.print(int(debit_air));
    Serial.println(" L/min");

    Serial.print("Volume air: ");
    Serial.print(total_volume);
    Serial.println(" mL");

    count = 0;

    attachInterrupt(sensorInt, countPulse, FALLING);
  }
}

void loop()
{
  digitalWrite (triger, HIGH); //mengirim suara
  delayMicroseconds(10); //selama 10 mikro detik
  digitalWrite (triger, LOW); //berhenti mengirim suara

  float jarak = pulseIn(echo, HIGH); //membaca data dan di masukkan ke variabel jarak
  jarak=jarak/1000000; //konversi mikro detik ke detik
  jarak=jarak*330/2; //data mentah di ubah ke dalam meter
  jarak=jarak*100; //mengubah data ke dalam centi meter
  Serial.println(jarak); //menampilkan nilai jarak pada serial

  if(started)
  {
    sms.GetSMS(1,n,20,smsbuffer,100);
    if(jarak <= 10.00)
    {
      sms.SendSMS("Nomor HP Anda","Ketinggian Berbahaya");
    }
    if(jarak > 10.00 && jarak <=20.00)
    {
      sms.SendSMS("Nomor HP Anda","Ketinggian Waspada");
    }
    if(jarak > 20.00)
    {
      sms.SendSMS("Nomor HP Anda","Ketinggian Normal");
    }
  }
  delay(5000);
 
  waterflow();
  if(started)
  {
    if(debit_air <=1 ) //Liter/Jam
    {
      sms.SendSMS("Nomor HP Anda","Debit Normal");
    }
    if(debit_air > 1 && debit_air <= 3) //Liter/Jam
    {
      sms.SendSMS("Nomor HP Anda","Debit Waspada");
    }
    if(debit_air > 3) //Liter/Jam
    {
      sms.SendSMS("Nomor HP Anda","Debit Berbahaya");
    }
  }
  delay(5000);           
}

void countPulse()
{
  count++;
}


Selamat Mencoba !!!