#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPLrXI1IhAY"
#define BLYNK_TEMPLATE_NAME "Sensor pendeteksi banjir"
#define BLYNK_AUTH_TOKEN "MvHLk_0GYlFQdGU1FZJWcxDlCZcR6pc1"
#define ECHO_PIN 15
#define TRIG_PIN 4
#define vibrator 5
#define buzzer 18
int indikator = 27;
#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
LiquidCrystal_I2C lcd(0x27, 20, 4);
Servo myservo;
BlynkTimer timer;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(vibrator, OUTPUT);
pinMode(indikator, OUTPUT);
lcd.init();
lcd.backlight();
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, sendSensor);
myservo.attach(2);
myservo.write(0);
}
void loop() {
sendSensor();
Blynk.run();
timer.run();
}
void sendSensor()
{
digitalWrite (indikator, HIGH);
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
if (distance >= 0 && distance < 30){
int cm = int(distance);
lcd.setCursor(0, 0);
lcd.print("Ketinggian ");
lcd.print(cm);
lcd.print(" CM");
lcd.setCursor(0, 1);
lcd.print("Normal");
Blynk.virtualWrite(V1, "");
Blynk.virtualWrite(V0, "Kondisi Normal");
}
if (distance > 30 && distance < 50){
int cm = int(distance);
lcd.setCursor(0, 0);
lcd.print("Ketinggian ");
lcd.print(cm);
lcd.print(" CM");
lcd.setCursor(0, 1);
lcd.print("Siaga 3");
Blynk.virtualWrite(V0, "Siaga 3");
Blynk.virtualWrite(V1, cm);
myservo.write(30);
}
if (distance > 50 && distance < 100){
digitalWrite(vibrator, HIGH);
int cm = int(distance);
lcd.setCursor(0, 0);
lcd.print("Ketinggian ");
lcd.print(cm);
lcd.print(" CM");
lcd.setCursor(0, 1);
lcd.print("Siaga 2");
Blynk.virtualWrite(V0, "Siaga 2");
Blynk.virtualWrite(V1, cm);
digitalWrite(vibrator, HIGH);
myservo.write(60);
tone (buzzer, 150);
delay(500);
noTone(buzzer);
}
if (distance > 100){
digitalWrite(vibrator, HIGH);
int cm = int(distance);
lcd.setCursor(0, 0);
lcd.print("Ketinggian ");
lcd.print(cm);
lcd.print(" CM");
lcd.setCursor(0, 1);
lcd.print("Siaga 1");
Blynk.virtualWrite(V0, "Siaga 1");
Blynk.virtualWrite(V1, cm);
digitalWrite(vibrator, HIGH);
myservo.write(90);
tone (buzzer, 200);
delay(300);
noTone(buzzer);
}
delay(100);
}