#define BLYNK_TEMPLATE_ID "TMPL68wTxtwpB"
#define BLYNK_TEMPLATE_NAME "Water Level Monitoring System"
#define BLYNK_AUTH_TOKEN "g_MFpUGvTJWzkA9IJBx-z_n5i7k4m5s2"
// Kredensial WiFi Anda
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Jarak Air dalam CM
int lowerDistance = 0; // Jarak ketika relay mati
int upperDistance = 200; // Jarak ketika relay menyala
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#define TRIGPIN 5 // D5
#define ECHOPIN 17 // D17
#define relayPin 16 // D16
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
float duration;
float distance;
int waterLevelPer;
bool relayStatus = false;
BlynkTimer timer;
void displayData(int value) {
display.clearDisplay();
display.setTextSize(4);
display.setCursor(8, 2);
display.print(value);
display.print(" ");
display.print("%");
display.display();
}
void measureDistance() {
digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(20);
digitalWrite(TRIGPIN, LOW);
duration = pulseIn(ECHOPIN, HIGH);
distance = ((duration / 2) * 0.343) / 10;
if (distance > 0 && distance < upperDistance) {
waterLevelPer = map((int)distance, lowerDistance, upperDistance, 100, 0);
displayData(waterLevelPer);
Blynk.virtualWrite(V0, waterLevelPer);
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
if (distance <= 30) {
// Jarak kurang dari atau sama dengan 30cm, matikan relay
digitalWrite(relayPin, LOW);
relayStatus = false;
}
if (distance > 30 && distance <= 200) {
// Jarak lebih dari atau sama dengan 30cm, nyalakan relay
digitalWrite(relayPin, HIGH);
relayStatus = true;
}
else {
digitalWrite(relayPin, LOW);
relayStatus = false;
}
Blynk.virtualWrite(V1, relayStatus ? 1 : 0);
}
delay(100);
}
void setup() {
Serial.begin(115200);
pinMode(ECHOPIN, INPUT);
pinMode(TRIGPIN, OUTPUT);
pinMode(relayPin, OUTPUT);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Gagal menginisialisasi OLED display"));
for (;;)
;
}
delay(1000);
display.setTextSize(1);
display.setTextColor(WHITE);
display.clearDisplay();
WiFi.begin(ssid, pass);
timer.setInterval(2000L, checkBlynkStatus);
Blynk.config(BLYNK_AUTH_TOKEN);
delay(1000);
}
void loop() {
measureDistance();
Blynk.run();
timer.run();
}
void checkBlynkStatus() {
bool isconnected = Blynk.connected();
if (isconnected == true) {
// Tambahkan aksi tambahan jika koneksi Blynk aktif
}
}