#define BLYNK_TEMPLATE_ID "TMPL6KoAp4pr3"
#define BLYNK_TEMPLATE_NAME "Deteksi Ketinggian Air"
#define BLYNK_AUTH_TOKEN "bplsLPRZsPMZAM17Z0iXzdwhBNGO2QmI"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#define BLYNK_PRINT Serial
#define LED_PIN 2
#define ECHO_PIN 4
#define TRIG_PIN 5
#define SOUND_PIN 12
unsigned long previousMillis = 0;
const long interval = 3000;
bool pompa_state = false;
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
pinMode(SOUND_PIN, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
Blynk.begin(auth, ssid, pass);
}
bool isFirstConnect = true;
BLYNK_CONNECTED(){
if(isFirstConnect){
Blynk.syncAll();
isFirstConnect = false;
}
}
BLYNK_WRITE(V1){
int LED_SWITCH=param.asInt();
digitalWrite(LED_PIN, LED_SWITCH);
if(LED_SWITCH == 1){
pompa_state = true;
}else{
pompa_state = false;
}
}
BLYNK_WRITE(V2){
int SOUND_SWITCH=param.asInt();
tone(SOUND_PIN, SOUND_SWITCH * 200);
}
void loop(){
Blynk.run();
// sinyal trigger ultrasonic sensor
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// mengukur durasi pulsa dan konversi ke jarak
float pulse_duration = pulseIn(ECHO_PIN, HIGH);
float distance_cm = 0.017 * pulse_duration;
// Misal jarak dari dasar sungai ke ultrasonic adalah 4 meter;
float ketinggian_cm = 400 - distance_cm;
Serial.print("Ketinggian air: ");
Serial.print(ketinggian_cm);
Serial.println("cm");
// Mengirim data ke blynk
Blynk.virtualWrite(V0, ketinggian_cm);
// If Else condition untuk level air
if(ketinggian_cm <= 100){
normal_level();
}else if(ketinggian_cm >= 300 && ketinggian_cm < 375){
warning_level();
}else if(ketinggian_cm >= 375){
bahaya_level();
}
delay(1000);
}
void normal_level(){
Serial.println("Level air normal!");
tone(SOUND_PIN, 0);
digitalWrite(LED_PIN, LOW);
}
void warning_level(){
Serial.println("Level air warning!");
if(pompa_state == false){
digitalWrite(LED_PIN, LOW);
}
tone(SOUND_PIN, 200);
delay(1000);
tone(SOUND_PIN, 0);
delay(3000);
}
void bahaya_level(){
Serial.println("Level air berbahaya!");
if(pompa_state == false){
digitalWrite(LED_PIN, LOW);
}
tone(SOUND_PIN, 200);
digitalWrite(LED_PIN, HIGH);
}