#include <LiquidCrystal_I2C.h>
#include <DHT.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define DHT_TYPE DHT22
#define DHT_PIN 8
#define buzz 13
#define potentiometer A3
#define pushButton1 5
#define pushButton2 6
#define pushButton3 7
#define sensorMIN 0
#define sensorMAX 512
#define Threshold 300
DHT dht(DHT_PIN,DHT_TYPE);
int curahHujan;
int value = 0 ;
int level = 0 ;
#define echo 4
#define trig 3
unsigned int jarak, ketinggianAir, timer;
int sensorSekarang;
void cekSwitch();
void setup() {
pinMode(pushButton1, INPUT_PULLUP);
pinMode(pushButton2, INPUT_PULLUP);
pinMode(pushButton3, INPUT_PULLUP);
Serial.begin(9600);
pinMode(buzz, OUTPUT);
lcd.begin(16, 2);
dht.begin();
pinMode(potentiometer, INPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
}
void loop() {
//Mengecek dari switch button
cekSwitch();
//DHT22 - Sensor Deteksi Hujan Melalui Temperatur dan Kelembaban
if(sensorSekarang == 1){
noTone(buzz);
Serial.println("Deteksi Hujan");
value = analogRead(DHT_PIN);
digitalWrite(DHT_PIN, LOW);
delay(2000);
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (temperature >= 20 && temperature <= 32 && humidity >= 70 && humidity <= 90) {
tone(buzz,300,345);
delay (700);
tone(buzz,300,345);
delay (700);
tone(buzz,300,345);
delay (700);
tone(buzz,300,345);
Serial.println("Kelembaban naik dan suhu turun. Potensi hujan.");
lcd.setCursor(0,0);
lcd.println("Akan Hujan!");
}
else{
noTone(buzz);
Serial.println("Suhu dan kelembaban normal. Tidak berpotensi hujan");
lcd.setCursor(0,0);
lcd.println("Tidak Berpotensi");
lcd.setCursor(0,1);
lcd.println("Hujan");
delay(1000);
lcd.clear();
}
}
//Raindrop Level (Curah Hujan) - Potensiometer
else if(sensorSekarang == 2) {
int curahHujan = map(analogRead(potentiometer), 0, 1023, 0, 100);
Serial.println("Deteksi Curah Hujan");
if(curahHujan > 80){
Serial.println("Tidak Hujan");
lcd.setCursor(0,0);
lcd.println("Tidak");
lcd.setCursor(0,1);
lcd.println("Hujan");
delay(1000);
lcd.clear();
}
else if(curahHujan <= 80 && curahHujan > 60){
Serial.println("Hujan Gerimis");
lcd.setCursor(0,0);
lcd.println("Hujan");
lcd.setCursor(0,1);
lcd.println("Gerimis");
delay(1000);
lcd.clear();
}
else if(curahHujan <= 60 && curahHujan > 40){
Serial.println("Hujan Sedang");
lcd.setCursor(0,0);
lcd.println("Hujan");
lcd.setCursor(0,1);
lcd.println("Sedang");
delay(1000);
lcd.clear();
}
else{
Serial.println("Hujan Lebat");
lcd.setCursor(0,0);
lcd.println("Hujan");
lcd.setCursor(0,1);
lcd.println("Lebat");
delay(1000);
lcd.clear();
}
}
//HC-SR04 - Ketinggian Genangan Air
else if (sensorSekarang == 3) {
Serial.println("Deteksi Genangan");
float ketinggianAir = cekGenangan();
if (ketinggianAir >= 45) {
tone(buzz, 1000);
delay(500);
tone(buzz, 500);
delay(500);
noTone(buzz);
delay(500);
Serial.println("Terjadi genangan tinggi. Cari tempat yang lebih tinggi sekarang juga!");
lcd.setCursor(0, 0);
lcd.println("Siaga 4 Banjir");
} else if (ketinggianAir >= 35) {
tone(buzz, 840);
delay(500);
tone(buzz, 420);
delay(500);
noTone(buzz);
delay(500);
Serial.println("Terjadi genangan cukup tinggi. Mulai mengungsi!");
lcd.setCursor(0, 0);
lcd.println("Siaga 3 Banjir");
} else if (ketinggianAir >= 25) {
tone(buzz, 720);
delay(500);
tone(buzz, 360);
delay(500);
noTone(buzz);
delay(500);
Serial.println("Terjadi genangan sedang. Harap bersiap untuk mengungsi");
lcd.setCursor(0, 0);
lcd.println("Siaga 2 Banjir");
} else if (ketinggianAir >= 15) {
tone(buzz, 400);
delay(500);
tone(buzz, 200);
delay(500);
noTone(buzz);
delay(500);
Serial.println("Terjadi genangan kecil. Harap waspada banjir");
lcd.setCursor(0, 0);
lcd.println("Siaga 1 Banjir");
} else if (ketinggianAir < 15) {
Serial.println("Tidak ada genangan. Tidak perlu siaga banjir");
lcd.setCursor(0, 0);
lcd.println("Tidak Ada Banjir");
}
}
}
void cekSwitch() {
// Periksa input dari tombol switch dan lakukan perpindahan sensor sesuai dengan tombol yang ditekan
if (digitalRead(pushButton1) == LOW && digitalRead(pushButton2) == HIGH && digitalRead(pushButton3) == HIGH) {
sensorSekarang = 1;
} else if (digitalRead(pushButton1) == HIGH && digitalRead(pushButton2) == LOW && digitalRead(pushButton3) == HIGH) {
sensorSekarang = 2;
} else if (digitalRead(pushButton1) == HIGH && digitalRead(pushButton2) == HIGH && digitalRead(pushButton3) == LOW) {
sensorSekarang = 3;
}
}
float cekGenangan() {
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
long timer = pulseIn(echo, HIGH);
float jarak = timer / 58.0;
float ketinggianAir = 60 - jarak;
return ketinggianAir;
}