#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6jSTXfalb"
#define BLYNK_TEMPLATE_NAME "Banjir"
#define BLYNK_AUTH_TOKEN "r4BFr7ZgCPrJrG1o9SkPCOgqgjE1O2jj"
#define ECHO_PIN 15
#define TRIG_PIN 2
#define indikator 27
#define buzzer 4
int pinValue;
int tombol;
int a = 0;
int duration ;
int distance;
#include <ESP32Servo.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
Servo myservo;
BlynkTimer timer;
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(indikator, OUTPUT);
lcd.init();
lcd.backlight();
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, sendSensor);
myservo.attach(13);
myservo.write(0);
Blynk.virtualWrite(V0, 0); // Buka tutu pintu air
Blynk.virtualWrite(V1, 0); //keadaan pintu air
Blynk.virtualWrite(V2, 0); //jarak sensor
Blynk.virtualWrite(V3, 0); // kondisi buzzer
Blynk.virtualWrite(V4, 0);// Siaga 1,2,3
Blynk.virtualWrite(V5, 0);// Tombol Operasi
lcd.setCursor(0, 0);
lcd.print(" PENDETEKSI BANJIR ");
}
void loop() {
sendSensor();
Blynk.run();
timer.run();
}
BLYNK_WRITE(V0){
myservo.write(param.asInt());
pinValue = param.asInt();
if (pinValue > 2) {
Blynk.virtualWrite(V1, "Terbuka "+String(pinValue)+" Derajat");
}else{
Blynk.virtualWrite(V1, "Terutup "+String(pinValue)+" Derajat");
}
}
BLYNK_WRITE(V5){
tombol = (param.asInt());
if (tombol == 1) {
a = 1;
myservo.write(0);
delay(1000);
Blynk.virtualWrite(V0, 0);
pinValue = 0;
}else{
a = 0;
Blynk.virtualWrite(V0, 0);
pinValue = 0;
}
}
void sendSensor() {
digitalWrite (indikator, HIGH);
Blynk.virtualWrite(V2, "Ketinggian Air " +String(distance)+" CM");
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = (duration * 0.034 / 2)+1;
if (a == 0){
Blynk.virtualWrite(V0, 0);
if (distance >= 0 && distance <= 30){
Blynk.virtualWrite(V1, "Pintu Tertutup 0 Djt");
Blynk.virtualWrite(V4, "Kondisi Ketinggian Air Normal");
Blynk.virtualWrite(V3, "Buzzer OFF");
lcd.setCursor(0, 1);
lcd.print("Tinggi Air: ");
lcd.print(distance);
lcd.print(" cm");
lcd.setCursor(0, 2);
lcd.print("Pintu Air Tertutup ");
lcd.setCursor(0, 3);
lcd.print("Tinggi Air Normal ");
myservo.write(0);
delay(100);
}
if (distance > 30 && distance <= 60){
Blynk.virtualWrite(V1, "Pintu Air Terbuka 30 Derajat");
Blynk.virtualWrite(V4, "Siaga 3, Berpotensi Terjadi Banjir");
Blynk.virtualWrite(V3, "Buzzer OFF");
lcd.setCursor(0, 1);
lcd.print("Tinggi Air: ");
lcd.print(distance);
lcd.print(" cm");
lcd.setCursor(0, 2);
lcd.print("Pintu Air Terbuka ");
lcd.setCursor(0, 3);
lcd.print("Kondisi Siaga 3 ");
myservo.write(30);
delay(15);
}
if (distance > 60 && distance <= 100){
Blynk.virtualWrite(V1, "Pintu Air Terbuka 60 Derajat");
Blynk.virtualWrite(V4, "Siaga 2, Segera Lakukan Mitigasi");
Blynk.virtualWrite(V3, "Buzzer ON");
lcd.setCursor(0, 1);
lcd.print("Tinggi Air: ");
lcd.print(distance);
lcd.print(" cm");
lcd.setCursor(0, 2);
lcd.print("Pintu Air Terbuka ");
lcd.setCursor(0, 3);
lcd.print("Kondisi Siaga 2 ");
myservo.write(60);
tone (buzzer, 120);
delay(1000);
noTone(buzzer);
}
if (distance >100){
Blynk.virtualWrite(V1, "Pintu Air Terbuka 90 Derajat");
Blynk.virtualWrite(V4, "Siaga 1, Silahkan Mengungsi");
Blynk.virtualWrite(V3, "Buzzer ON");
lcd.setCursor(0, 1);
lcd.print("Tinggi Air: ");
lcd.print(distance);
lcd.print(" cm");
lcd.setCursor(0, 2);
lcd.print("Pintu Air Terbuka ");
lcd.setCursor(0, 3);
lcd.print("Kondisi Siaga 1 ");
myservo.write(90);
tone (buzzer, 300);
delay(300);
noTone(buzzer);
}
}else{
Blynk.virtualWrite(V1, "Pintu Air "+String(pinValue)+" Derajat");
Blynk.virtualWrite(V3, 0);
Blynk.virtualWrite(V4, 0);
noTone(buzzer);
lcd.setCursor(0, 1);
lcd.print("Operasi Manual ");
lcd.setCursor(0, 2);
lcd.print("Tinggi Air: ");
lcd.print(distance);
lcd.print(" cm ");
lcd.setCursor(0, 3);
lcd.print("Pintu Air : ");
lcd.print(pinValue);
lcd.print(" Djt ");
}
}