
Tutorial ESP32: Cara Membuat Sistem Pintu Air Otomatis & Kontrol Manual Berbasis Sensor Ultrasonik HC-SR04, Motor Servo, Layar LCD I2C, & Blynk IoT pada WOKWI
Pada bagian ini akan dibahas pembuatan sistem pengendali pintu air otomatis dan manual (Smart Flood Gate System) berbasis mikrokontroler ESP32, sensor jarak ultrasonik HC-SR04 untuk memantau ketinggian permukaan air, motor servo penggerak pintu air, tombol fisik darurat (hardware button), layar LCD 16×2 I2C, serta platform Blynk IoT pada software simulasi WOKWI. Skematik rangkaian ditunjukkan pada Gambar 1, program Arduino pada Kode 1, dan video pembuatan pada tautan Video 1. Sistem bekerja secara cerdas memantau ketinggian air secara real-time. Jika ketinggian air melewati ambang batas bahaya (tinggi >= 85 cm), sistem secara otomatis membuka pintu air (90 derajat), memicu status bahaya, dan mengirimkan push notification log ke aplikasi Blynk. Selain mode otomatis, pengguna dapat mengontrol buka-tutup pintu air secara manual melalui tombol fisik lokal maupun secara jarak jauh melalui dashboard aplikasi Blynk.

Gambar 1. Skematik rangkaian sistem
List Pin:
- Sensor Ultrasonik HC-SR04 (Pengukur Ketinggian Air)
Trig Pin => GPIO 5 (trigPin)
Echo Pin => GPIO 18 (echoPin)
VCC => 5V / 3.3V
GND => GND - Display LCD 16×2 I2C (Alamat: 0x27)
GND => GND
VCC => 5V / 3.3V
SDA => GPIO 21
SCL => GPIO 22 - Aktuator Motor Servo & Indikator/Tombol Lokal
Signal Servo (Pintu Air) => GPIO 12 (servoPin)
VCC Servo => 5V
GND Servo => GND
Buzzer Alarm => GPIO 13 (buzzerPin)
Tombol Fisik (Manual Button) => GPIO 14 (buttonPin – dengan internal pull-up)
List Virtual PIN:
- V0 => Status Bahaya Banjir (Integer 0/1) – Indikator Widget LED / Keadaan Darurat Banjir
- V1 => Tinggi Permukaan Air (Integer dalam cm) – Widget Gauge / Grafik Ketinggian Air Real-Time
- V2 => Status Pintu Air (String) – Menampilkan Kondisi Posisi Pintu (“TERBUKA” atau “TERTUTUP”)
- V3 => Status Sistem Keseluruhan (String) – Menampilkan Keterangan Kondisi (“AMAN” atau “BAHAYA!!”)
- V4 => Tombol Kontrol Manual & Sinkronisasi Pintu (Integer 0/1) – Sakelar Tombol Blynk untuk Membuka/Menutup Pintu Air Jarak Jauh
Kode Arduino 1. Kode Program
// =============================
// ALFIAN CENTER
// SUBSCRIBE
// Pintu Air Otomatis dengan Fitur Manual Control ESP32 & Blynk Menggunakan Servo dan LCD
// PROGRAM BAKAL AKU KIRIM DENGAN SYARAT DIBAWAH
// 50 LIKE, 20 KOMEN DAN *WAJIB SUBSCRIBE*
// PROGRAM DIKIRIM VIA KOMENTAR
// =============================
#define BLYNK_TEMPLATE_ID "TMPL6kPszu55o"
#define BLYNK_TEMPLATE_NAME "Pintu Air Otomatis dan Manual"
#define BLYNK_AUTH_TOKEN "PfKKFuXcKX6HkzS0cH57PWlN_bbqQd1k"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
// --- KONFIGURASI PIN ---
const int trigPin = 5;
const int echoPin = 18;
const int buzzerPin = 13;
const int servoPin = 12;
const int buttonPin = 14; // Pin Tombol Fisik
// --- PARAMETER ---
const int tinggiMaksimal = 100;
const int ambangBahaya = 85;
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// --- OBJEK ---
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo pintuAir;
BlynkTimer timer;
// --- VARIABEL KONTROL ---
bool sedangBanjir = false;
bool manualMode = false; // Status apakah sedang dikontrol manual
int statusPintu = 0; // 0 = Tutup, 1 = Buka
// Fungsi Kendali Pintu
void kendaliPintu(int perintah) {
if (perintah == 1) {
pintuAir.write(90);
statusPintu = 1;
Blynk.virtualWrite(V2, "TERBUKA");
} else {
pintuAir.write(0);
statusPintu = 0;
Blynk.virtualWrite(V2, "TERTUTUP");
}
}
// Handler Tombol dari Aplikasi Blynk (V4)
BLYNK_WRITE(V4) {
statusPintu = param.asInt();
manualMode = true; // Aktifkan mode manual saat tombol Blynk ditekan
kendaliPintu(statusPintu);
}
void monitoringSistem() {
// 1. Baca Sensor Ultrasonik
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long durasi = pulseIn(echoPin, HIGH);
int jarakSensor = durasi * 0.034 / 2;
int tinggiAir = tinggiMaksimal - jarakSensor;
if (tinggiAir < 0) tinggiAir = 0;
// 2. Cek Tombol Fisik (Hardware)
if (digitalRead(buttonPin) == LOW) { // Jika tombol ditekan
delay(200); // Debounce sederhana
statusPintu = !statusPintu; // Toggle status
manualMode = true;
kendaliPintu(statusPintu);
Blynk.virtualWrite(V4, statusPintu); // Sinkronisasi ke aplikasi
}
// 3. Logika Otomatis (Hanya jalan jika tidak sedang manual atau saat banjir parah)
if (tinggiAir >= ambangBahaya) {
if (!sedangBanjir) {
kendaliPintu(1); // Paksa buka saat banjir
Blynk.virtualWrite(V0, 1);
Blynk.virtualWrite(V3, "BAHAYA!!");
Blynk.virtualWrite(V4, 1);
Blynk.logEvent("peringatan_banjir", "WASPADA! Air kritis, pintu dibuka otomatis!");
sedangBanjir = true;
manualMode = false; // Reset ke auto jika kondisi kritis
}
} else {
if (sedangBanjir) {
Blynk.virtualWrite(V0, 0);
Blynk.virtualWrite(V3, "AMAN");
sedangBanjir = false;
}
// Jika tidak banjir dan tidak mode manual, pastikan pintu tertutup
if (!manualMode && statusPintu == 1) {
kendaliPintu(0);
Blynk.virtualWrite(V4, 0);
}
}
// 4. Update LCD & Blynk
lcd.setCursor(0, 0);
lcd.print("Air: "); lcd.print(tinggiAir); lcd.print("cm ");
lcd.setCursor(0, 1);
lcd.print(sedangBanjir ? "STAT: BAHAYA!!" : "STAT: AMAN ");
Blynk.virtualWrite(V1, tinggiAir);
}
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // Gunakan internal pull-up
pintuAir.attach(servoPin);
pintuAir.write(0);
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, monitoringSistem);
}
void loop() {
Blynk.run();
timer.run();
}

Video 1. Video tutorial pembuatan
TAG:
pintu air otomatis esp32, smart flood gate iot, pengendali banjir otomatis blynk, sensor ultrasonik hc-sr04 esp32, motor servo pintu air, monitoring ketinggian air blynk, tutorial esp32 blynk, iot mitigasi bencana banjir, pintu air cerdas esp32, koding pintu air otomatis, tombol fisik manual override, ultrasonik ukur tinggi air, status banjir bahaya blynk, virtual pin blynk flood gate, datastream blynk tinggi air, tutorial blynk iot esp32, library esp32servo, gpio 5 18 ultrasonik air, gpio 12 servo pintu air, gpio 14 tombol fisik, proyek iot esp32 mitigasi, tutorial wokwi indonesia, simulasi iot pintu air, pemantauan air jarak jauh, blynk app flood gate, smart city iot esp32, proyek teknik elektro iot, mekatronika sistem kendali air, tugas akhir iot pintu air, skripsi iot flood control, ide proyek esp32 iot, skematik pintu air esp32, diagram rangkaian ultrasonik servo lcd, source code pintu air esp32, program arduino blynk flood, simulasi iot tanpa hardware, platform simulasi wokwi, wokwi esp32 flood gate, blynk auth token esp32, pengendali banjir berbasis iot, telemetry data ultrasonik air, proyek sains iot elektro, portofolio iot esp32, praktikum mikrokontroler esp32, modul esp32 wroom 32, pinout esp32 ultrasonik servo, gpio esp32 sensor servo button, indikator tinggi air blynk, grafik banjir blynk, smart flood control esp32, efisiensi manajemen air, panduan iot pintu air esp32, belajar mikrokontroler online, simulator komponen elektronik, wokwi custom chip esp32, blynk iot platform disaster management, internet of things indonesia, iot smk teknik elektro, iot universitas teknik, prototipe pintu air esp32, alat pendeteksi banjir otomatis, iot smart environment, esp32 arduino ide blynk, tutorial iot pemula, proyek elektro smart environment, panduan lengkap wokwi blynk, sensor hc-sr04 jarak air akurat, sistem peringatan dini banjir, logika ambang batas bahaya air, notifikasi blynk logevent banjir, sistem manajemen air sungai, otomatisasi infrastruktur publik, proyek mekatronika elektro, simulasi hardware pintu air, sistem pintu air esp32, proyek iot populer, kodingan pintu air otomatis, sensor ultrasonik digital esp32, rangkaian hc-sr04 servo dan tombol, tutorial mikrokontroler iot, wawasan teknik elektro, aplikasi iot smart city, pintu air otomatis esp32, koding logika tinggi air 85cm, pemantauan ketinggian air real time, iot flood management system