Disusun Oleh:
| Risqi Prasdika | (24051204008) |
| Rahmat Ari Setyarto | (24051204010) |
| Carmelio Sivandra A. | (24051204116) |
| Azzam Ghifari | (24051204178) |
| Rifqi Syawal | (24051204198) |
BAB I
PENDAHULUAN
1.1 Latar Belakang
Air merupakan kebutuhan vital bagi manusia yang harus tersedia secara berkelanjutan. Dalam kehidupan sehari-hari, penggunaan tandon air menjadi solusi untuk menyimpan cadangan air agar dapat digunakan sesuai kebutuhan rumah tangga maupun industri. Namun, pengelolaan tandon secara manual sering menimbulkan masalah, seperti pompa baru dinyalakan setelah air benar-benar habis atau dimatikan setelah air meluap. Kondisi ini tidak hanya menyulitkan pengguna, tetapi juga berpotensi menyebabkan pemborosan energi, kerusakan pompa, serta risiko kebocoran atau banjir kecil di sekitar tandon.
Perkembangan teknologi Internet of Things (IoT) memberikan peluang untuk mengatasi permasalahan tersebut. IoT memungkinkan perangkat fisik seperti sensor dan mikrokontroler terhubung ke jaringan, sehingga dapat mengirim data dan menerima perintah secara otomatis maupun jarak jauh. Dengan memanfaatkan mikrokontroler ESP32 yang memiliki Wi-Fi bawaan, sistem monitoring tandon dapat berjalan tanpa memerlukan modul tambahan. Data level air dikirim melalui protokol MQTT yang ringan dan efisien, kemudian ditampilkan pada dashboard web sehingga pengguna dapat memantau kondisi tandon secara real-time.
Selain itu, penggunaan sensor ultrasonik HC-SR04 memungkinkan pengukuran ketinggian air dengan akurasi yang memadai. Sensor ini membaca jarak permukaan air dari atas tandon, lalu hasilnya dikonversi menjadi persentase level air. Relay digunakan sebagai sakelar pompa, sementara buzzer berfungsi sebagai indikator alarm ketika air hampir habis atau penuh. Dengan sistem otomatisasi ini, pompa dapat menyala dan mati sesuai batas level air yang ditentukan, sehingga penggunaan air lebih efisien dan aman. Oleh karena itu, proyek Smart Water Level Monitoring & Automated Tank Control dirancang untuk memberikan solusi praktis dalam pengelolaan tandon air, meningkatkan kenyamanan pengguna, serta mendukung efisiensi energi dan keamanan.
1.2 Rumusan Masalah
1.Bagaimana cara merancang sistem monitoring level air pada tandon menggunakan sensor ultrasonik HC-SR04 yang terintegrasi dengan mikrokontroler ESP32?
2.Bagaimana mekanisme pengiriman dan penerimaan data level air melalui protokol MQTT agar dapat ditampilkan secara real-time pada dashboard web?
3.Bagaimana sistem otomatisasi pompa dapat bekerja dengan baik, yaitu menyala ketika level air berada di bawah batas minimum dan mati ketika level air mencapai batas maksimum, serta memberikan alarm peringatan melalui buzzer?
1.3 Tujuan Laporan
1.Merancang sistem monitoring tandon air berbasis IoT dengan memanfaatkan mikrokontroler ESP32, sensor ultrasonik HC-SR04, relay, buzzer, dan LCD sebagai komponen utama.
2.Mengimplementasikan protokol MQTT untuk mengirim dan menerima data level air secara real-time, sehingga pengguna dapat memantau kondisi tandon melalui dashboard web yang interaktif.
3.Mewujudkan sistem kontrol pompa otomatis yang mampu menyalakan pompa ketika level air berada di bawah batas minimum dan mematikannya saat mencapai batas maksimum, serta memberikan alarm peringatan untuk kondisi kritis.
4.Meningkatkan efisiensi dan keamanan penggunaan tandon air, dengan mengurangi risiko pemborosan energi, kerusakan pompa, maupun meluapnya air akibat keterlambatan kontrol manual.
1.4 Manfaat Penulisan
•Memberikan referensi akademis mengenai penerapan Internet of Things (IoT) pada sistem monitoring dan kontrol otomatis.
•Menjadi dokumentasi teknis yang dapat digunakan mahasiswa atau peneliti untuk memahami integrasi sensor, mikrokontroler, dan protokol komunikasi MQTT.
•Membantu masyarakat dalam mengelola tandon air secara efisien dan aman tanpa perlu pengecekan manual.
•Mengurangi risiko pemborosan energi, kerusakan pompa, serta meluapnya air akibat keterlambatan kontrol manual.
•Menjadi dasar pengembangan sistem IoT serupa dalam skala rumah tangga maupun industri.
•Memberikan peluang pengembangan fitur lanjutan, seperti notifikasi ke smartphone atau integrasi dengan smart home system.
•Mendukung efisiensi energi dan keamanan penggunaan air dalam kehidupan sehari-hari.
BAB II
TINJAUAN PUSTAKA
2.1 Dasar Teori
Internet of Things (IoT) menghubungkan perangkat fisik ke jaringan, sehingga perangkat itu bisa mengirim data dan menerima perintah dari jauh. Pada tandon air, cara ini menggantikan pengecekan manual. Dengan cara manual, pompa sering baru dinyalakan setelah air habis dan baru dimatikan setelah air meluap (Septyarno et al., 2026). Simulasi kami memakai alur yang sama: sensor membaca level air, mikrokontroler mengambil keputusan, dan dashboard web menampilkan hasilnya.
Mikrokontroler yang kami pakai adalah ESP32. Chip ini punya dua inti prosesor dan Wi-Fi bawaan, jadi satu papan cukup untuk membaca sensor dan mengirim data ke jaringan (Babiuch et al., 2019). Kami tidak perlu modul Wi-Fi tambahan.
Data dikirim lewat MQTT, protokol publish/subscribe yang ringan dan dirancang untuk perangkat dengan bandwidth serta sumber daya terbatas (Soni & Makwana, 2017). ESP32 mem-publish level air ke topik tandon/level. Dashboard men-subscribe topik itu dan mengirim perintah pompa lewat tandon/control. Broker HiveMQ meneruskan pesan di antara keduanya.
Untuk pengukuran, sensor HC-SR04 memancarkan gelombang ultrasonik lalu membaca pantulannya dari permukaan air. Sensor terpasang di atas tandon, jadi level air dihitung dari tinggi tandon dikurangi jarak yang terbaca (Hafni et al., 2025). Hasilnya diubah menjadi persentase dan tampil di LCD 16x2 I2C. Relay bekerja sebagai sakelar pompa: ESP32 mengirim sinyal ke relay, lalu relay menyambung atau memutus daya pompa. Pada mode otomatis, pompa menyala saat level turun ke batas bawah dan berhenti saat level mencapai batas atas, sementara buzzer berbunyi di kedua ujung rentang itu. Penelitian terdahulu dengan komponen serupa melaporkan simpangan sensor di bawah 2% (Hafni et al., 2025) dan selisih maksimum 1 cm (Septyarno et al., 2026), jadi akurasinya memadai untuk tandon.
2.2 Komponen
1.ESP 32
2.buzzer
3.HC-SR04 UltraSonic Distance Sensor
4.LCD 16x2 l2c
5.relay module
BAB III
PEMBAHASAN
3.1 Penjelasan simulasi
Sistem “Smart Water Monitoring & Automated Tank Control” dirancang melalui 2 tahapan yaitu konfigurasi komponen hardware di wokwi.com dan pembuatan kode html & javascript sebagai antarmuka program.
Langkah langkah penyusunan komponen simulasi di wokwi:
1.Siapkan komponen berikut: ESP 32, buzzer, HC-SR04 UltraSonic Distance Sensor, LCD 16x2 l2c, relay module.
2.Hubungkan pin masing masing komponen seperti ini:
| Komponen | Pin Komponen | Pin ESP32 | Keterangan |
|---|---|---|---|
| Sensor Ultrasonic | VCC | 5V | Power Supply |
| TRIG | GPIO 5 | Sinyal Triger Pembacaan Jarak | |
| ECHO | GPIO 18 | Sinyal Pantulan Jarak | |
| GND | GND | Power Ground | |
| LCD 16x2 I2C | GND | GND | Power Ground |
| VCC | 5V | Power Supply | |
| SDA | GPIO 21 | Jalur Data I2C | |
| SCL | GPIO 22 | Jalur Clock I2C | |
| Relay Module | GND | GND | Power Ground |
| VCC | 5V | Power Supply | |
| IN | GPIO 26 | Kontrol Sakelar Pompa | |
| Buzzer | Negative (1) | GND | Power Ground |
| Positive (2) | GPIO 12 | Output Nada Suara Alarm |
3.Buat file project seperti ini vs code:
4.Copy paste kode diagram.json dari wokwi ke vs code
5.Nama kode cpp harus sama dengan nama folder project
6.Copy paste kode yang sudah kami sediakan di laporan ini ke file project kalian
7.Install ekstensi wokwi simulator di vs code

8.Login atau buat akun di wokwi.com
9.Akses halaman ini https://wokwi.com/license dan klik get license:

10.Copy license key

11.Klik open vscode

12.Klik open

13.Akan muncul pesan seperti ini:

14.Install arduino-cli dan ikuti petunjuk instalasi di dokumentasinya
15.Jalankan perintah berikut di powershell/cmd di folder project wokwi
arduino-cli lib install "LiquidCrystal I2C"
arduino-cli compile --fqbn esp32:esp32:esp32 --output-dir ./build .
16.Akan muncul output seperti ini di terminal dan di folder project:


17.Copy paste kode index.html yang ada di laporan ini ke kode di folder project kalian
18.Install ekstensi live server di vscode untuk melihat tampilan kode index.html

19.Buka file diagram.json yang ada di vscode dan klik tombol hijau segitiga untuk start simulation:

20.Buka file index.html dan jalankan live server:

Penjelasan Simulasi Project:
1.Saat simulasi wokwi di vscode berjalan, lcd 16x2 l2c akan menunjukkan status pompa (on/off) dan presentase level ketinggian air yang ada di dalam tandon. HC-SR04 Ultrasonic Distance Sensor berfungsi untuk mengukur ketinggian air, Relay Module (Simulasi Sakelar Pompa Air), Buzzer (Indikator Alarm Air Penuh / Kering)


2.Kalian bisa memasang video kalia sebagai alarm air
3.Terdapat tombol “Nyalakan Pompa” untuk menyalakan pompa air jika ditekan maka status pompa akan berubah ON.
terdapat tombol “Matikan Pompa” jika ditekan maka status pompa akan berubah OFF.
terdapat tombol “Mode Otomaris” jika ditekan:
1.Jika level air berada di kisaran 0% hingga 10%, maka pompa akan otomatis ON dan akan muncul alarm dari buzzer
2.Jika level air mencapai level 95-100% maka akan muncul alarm bahwa level air akan segera penuh.
3.Jika level air mencapai 100% maka pompa akan mati dengan sendirinya
3.2 Program
diagram.json
"version": 1,
"author": "008_Risqi Prasdika TIA",
"editor": "wokwi",
"parts": [
{ "type": "board-esp32-devkit-c-v4", "id": "esp", "top": 0, "left": 0, "attrs": {} },
{ "type": "wokwi-hc-sr04", "id": "ultrasonic1", "top": -17.7, "left": 139.9, "attrs": {} },
{ "type": "wokwi-relay-module", "id": "relay1", "top": -28.6, "left": -172.8, "attrs": {} },
{
"type": "wokwi-buzzer",
"id": "bz1",
"top": 79.2,
"left": -132.6,
"attrs": { "volume": "0.1" }
},
{
"type": "wokwi-lcd1602",
"id": "lcd1",
"top": 236.8,
"left": -71.2,
"attrs": { "pins": "i2c" }
}
],
"connections": [
[ "esp:TX", "$serialMonitor:RX", "", [] ],
[ "esp:RX", "$serialMonitor:TX", "", [] ],
[ "ultrasonic1:VCC", "esp:5V", "red", [ "v0" ] ],
[ "ultrasonic1:TRIG", "esp:15", "green", [ "v0" ] ],
[ "ultrasonic1:ECHO", "esp:18", "green", [ "v0" ] ],
[ "ultrasonic1:GND", "esp:GND.2", "black", [ "v0" ] ],
[ "lcd1:GND", "esp:GND.1", "black", [ "h0" ] ],
[ "lcd1:VCC", "esp:5V", "red", [ "h0" ] ],
[ "lcd1:SDA", "esp:21", "green", [ "h0" ] ],
[ "lcd1:SCL", "esp:22", "green", [ "h0" ] ],
[ "relay1:GND", "esp:GND.3", "black", [ "h0" ] ],
[ "relay1:VCC", "esp:5V", "red", [ "h0" ] ],
[ "relay1:IN", "esp:26", "green", [ "h0" ] ],
[ "bz1:1", "esp:GND.1", "green", [ "v0" ] ],
[ "bz1:2", "esp:12", "green", [ "v0" ] ]
],
"dependencies": {}
}
File cpp:
#include <PubSubClient.h>
#include <LiquidCrystal_I2C.h>
#define TRIG_PIN 15
#define ECHO_PIN 18
#define RELAY_PIN 26
#define BUZZER_PIN 12
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
// Topik MQTT Tanpa Kata "unesa"
const char* topic_level = "tandon/level";
const char* topic_status = "tandon/status";
const char* topic_control = "tandon/control";
const char* topic_sim_level = "tandon/sim_level";
WiFiClient espClient;
PubSubClient client(espClient);
LiquidCrystal_I2C lcd(0x27, 16, 2);
bool isManualMode = false;
bool manualPumpState = false;
int currentWaterLevel = 50;
unsigned long lastPublishTime = 0;
void updatePumpLogic() {
bool pumpState = false;
if (isManualMode) {
pumpState = manualPumpState;
} else {
// Mode Otomatis
if (currentWaterLevel <= 20) {
pumpState = true;
} else if (currentWaterLevel >= 90) {
pumpState = false;
} else {
pumpState = digitalRead(RELAY_PIN);
}
}
digitalWrite(RELAY_PIN, pumpState ? HIGH : LOW);
// Publish status ON / OFF
client.publish(topic_status, pumpState ? "ON" : "OFF");
// Update Tampilan LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Air: ");
lcd.print(currentWaterLevel);
lcd.print("% ");
lcd.print(isManualMode ? "[M]" : "[A]");
lcd.setCursor(0, 1);
lcd.print("Pompa: ");
lcd.print(pumpState ? "ON " : "OFF");
}
void callback(char* topic, byte* payload, unsigned int length) {
String message = "";
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
String topicStr = String(topic);
if (topicStr == topic_control) {
if (message == "PUMP_ON") {
isManualMode = true;
manualPumpState = true;
} else if (message == "PUMP_OFF") {
isManualMode = true;
manualPumpState = false;
} else if (message == "MODE_AUTO") {
isManualMode = false;
}
updatePumpLogic();
} else if (topicStr == topic_sim_level) {
currentWaterLevel = message.toInt();
updatePumpLogic();
}
}
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RELAY_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Water Level Mon");
lcd.setCursor(0, 1);
lcd.print("Connecting..");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
lcd.clear();
lcd.print("WiFi Connected!");
delay(1000);
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
void reconnectMQTT() {
while (!client.connected()) {
String clientId = "ESP32WaterTank-";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
client.subscribe(topic_control);
client.subscribe(topic_sim_level);
} else {
delay(2000);
}
}
}
void loop() {
if (!client.connected()) {
reconnectMQTT();
}
client.loop();
if (millis() - lastPublishTime > 1000) {
lastPublishTime = millis();
// Alarm Buzzer
if (currentWaterLevel >= 95 || currentWaterLevel <= 10) {
tone(BUZZER_PIN, 2000, 100);
} else {
noTone(BUZZER_PIN);
}
client.publish(topic_level, String(currentWaterLevel).c_str());
updatePumpLogic();
}
}
wokwi.toml
version = 1
firmware = 'build/esp32.esp32.esp32/IOT_tugas_6.ino.bin'
elf = 'build/esp32.esp32.esp32/IOT_tugas_6.ino.elf'
index.html
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Smart Water Tank Dashboard</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js"></script>
<style>
body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f0f2f5; text-align: center; padding: 20px; }
.card { background: white; max-width: 450px; margin: 0 auto; padding: 25px; border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.1); }
h2 { color: #007bff; margin-bottom: 5px; }
.status-badge { display: inline-block; padding: 6px 12px; border-radius: 20px; font-weight: bold; font-size: 0.9em; margin-bottom: 20px; }
.connected { background-color: #d4edda; color: #155724; }
.disconnected { background-color: #f8d7da; color: #721c24; }
.water-gauge { width: 100%; background-color: #e9ecef; border-radius: 10px; overflow: hidden; height: 30px; margin: 10px 0; border: 1px solid #ccc; }
.water-level { height: 100%; width: 50%; background-color: #007bff; transition: width 0.3s ease; text-align: center; color: white; font-weight: bold; line-height: 30px; }
.btn { padding: 10px 16px; font-size: 0.9rem; border: none; border-radius: 6px; cursor: pointer; margin: 5px; font-weight: bold; }
.btn-on { background-color: #28a745; color: white; }
.btn-off { background-color: #dc3545; color: white; }
.btn-auto { background-color: #17a2b8; color: white; }
.slider { width: 100%; margin: 10px 0; }
.video-box { background: #f8f9fa; border: 1px dashed #007bff; padding: 10px; border-radius: 8px; margin-top: 15px; }
#customVideo { width: 100%; max-height: 250px; border-radius: 8px; margin-top: 10px; display: none; object-fit: cover; }
</style>
</head>
<body>
<div class="card">
<h2>Water Tank Dashboard</h2>
<p style="color: #6c757d;">Sistem Monitoring Tandon Cerdas</p>
<div id="statusBadge" class="status-badge disconnected">Disconnected</div>
<!-- Tampilan Level Air -->
<div style="text-align: left;">
<label><b>Level Air Tandon:</b> <span id="levelText">50</span>%</label>
<div class="water-gauge">
<div id="waterLevelBar" class="water-level">50%</div>
</div>
</div>
<!-- Simulasi Atur Level Air -->
<div style="text-align: left;">
<label><b>Atur Level Air (Simulasi):</b></label>
<input type="range" min="0" max="100" value="50" class="slider" id="waterSlider" oninput="updateSimLevel(this.value)">
</div>
<div style="text-align: left;">
<label><b>Status Pompa:</b> <span id="pumpStatus" style="color: #6c757d;">OFF</span></label>
</div>
<hr style="border: 0.5px solid #eee;">
<!-- Fitur Custom Video Alarm -->
<div class="video-box">
<label style="color: #333;font-size: 0.9em;">Pilih Custom File Video Alarm (MP4/WebM):</label><br>
<input type="file" id="videoFile" accept="video/*" style="font-size: 0.8em;">
<video id="customVideo" loop playsinline></video>
</div>
<h3>Kontrol Manual / Otomatis</h3>
<div>
<button class="btn btn-on" onclick="sendControl('PUMP_ON')">Nyalakan Pompa</button>
<button class="btn btn-off" onclick="sendControl('PUMP_OFF')">Matikan Pompa</button>
</div>
<div>
<button class="btn btn-auto" onclick="sendControl('MODE_AUTO')">Mode Otomatis</button>
</div>
</div>
<script>
const client = new Paho.MQTT.Client("broker.hivemq.com", 8000, "web_client_" + Math.random().toString(16).substr(2, 8));
let customVideo = document.getElementById("customVideo");
document.getElementById('videoFile').addEventListener('change', function(e) {
const file = e.target.files[0];
if (file) {
customVideo.src = URL.createObjectURL(file);
alert("File video berhasil dimuat!");
}
});
client.onConnectionLost = () => {
document.getElementById("statusBadge").className = "status-badge disconnected";
document.getElementById("statusBadge").innerText = "Disconnected";
};
function handleVideoAlarm(level) {
if (!customVideo.src) return;
if (level <= 10 || level >= 95) {
customVideo.style.display = "block";
customVideo.muted = false; // Aktifkan suara
customVideo.volume = 1.0; // Atur volume maksimal
if (customVideo.paused) {
customVideo.currentTime = 0; // Reset durasi dari awal
// Putar video dengan penanganan kebijakan autoplay browser
let playPromise = customVideo.play();
if (playPromise !== undefined) {
playPromise.catch(err => {
console.log("Autoplay dengan suara diblokir browser. Mencoba play..");
// Jika diblokir, minta interaksi klik ringan pada halaman
});
}
}
} else {
if (!customVideo.paused || customVideo.style.display === "block") {
customVideo.pause();
customVideo.currentTime = 0;
customVideo.style.display = "none";
}
}
}
client.onMessageArrived = (message) => {
if (message.destinationName === "tandon/level") {
const level = parseInt(message.payloadString);
document.getElementById("levelText").innerText = level;
document.getElementById("waterLevelBar").style.width = level + "%";
document.getElementById("waterLevelBar").innerText = level + "%";
handleVideoAlarm(level);
}
else if (message.destinationName === "tandon/status") {
const status = message.payloadString.toUpperCase();
if (status === "ON" || status === "OFF") {
updatePumpStatusDisplay(status);
}
}
};
function updatePumpStatusDisplay(status) {
const statusText = document.getElementById("pumpStatus");
statusText.innerText = status;
statusText.style.color = (status === "ON") ? "#28a745" : "#dc3545";
}
client.connect({
onSuccess: () => {
document.getElementById("statusBadge").className = "status-badge connected";
document.getElementById("statusBadge").innerText = "Connected to Broker";
client.subscribe("tandon/level");
client.subscribe("tandon/status");
}
});
function sendControl(command) {
if (client.isConnected()) {
const msg = new Paho.MQTT.Message(command);
msg.destinationName = "tandon/control";
client.send(msg);
}
}
function updateSimLevel(val) {
const levelNum = parseInt(val);
document.getElementById("levelText").innerText = levelNum;
document.getElementById("waterLevelBar").style.width = levelNum + "%";
document.getElementById("waterLevelBar").innerText = levelNum + "%";
handleVideoAlarm(levelNum);
if (client.isConnected()) {
const msg = new Paho.MQTT.Message(val.toString());
msg.destinationName = "tandon/sim_level";
client.send(msg);
}
}
</script>
</body>
</html>
BAB IV
PENUTUP
4.1 Kesimpulan
Berdasarkan hasil perancangan dan simulasi, sistem Smart Water Level Monitoring & Automated Tank Control menunjukkan alur pemantauan dan pengendalian tandon berbasis Internet of Things (IoT). ESP32 bertukar data dengan dashboard web melalui broker HiveMQ menggunakan protokol MQTT. Dashboard menampilkan persentase level air dan status pompa, sedangkan LCD menampilkan informasi level air, mode operasi, dan status pompa. Pengguna juga dapat mengirim perintah untuk menyalakan pompa, mematikan pompa, atau mengaktifkan kembali mode otomatis.
Pada mode otomatis, kode program menyalakan pompa ketika level air mencapai 20% atau lebih rendah dan mematikannya ketika level mencapai 90% atau lebih tinggi. Di antara kedua batas tersebut, status pompa dipertahankan agar tidak terus berganti saat level air berubah. Buzzer memberikan peringatan pada level 10% atau lebih rendah dan 95% atau lebih tinggi. Mekanisme ini memperlihatkan bahwa batas kontrol pompa berbeda dari batas alarm, sementara mode manual memungkinkan pengguna mengubah status pompa melalui dashboard.
Namun, pada kode yang digunakan, nilai level air masih berasal dari slider dashboard yang dikirim melalui MQTT, bukan dari pembacaan sensor HC-SR04. Dengan demikian, hasil praktikum ini terbatas pada simulasi komunikasi, tampilan informasi, serta logika kontrol dan alarm. Sistem ini dapat menjadi dasar pengembangan pengelolaan tandon otomatis, tetapi akurasi pengukuran, penghematan air dan energi, serta keandalannya pada perangkat fisik masih memerlukan pengujian lebih lanjut.
4.2 Saran
•Pembacaan sensor HC-SR04 perlu diterapkan pada program agar level air dihitung dari jarak permukaan air dan tinggi tandon, bukan hanya dari slider simulasi. Hasil pembacaan perlu dibandingkan dengan pengukuran manual pada perangkat fisik.
•Batas kontrol pompa dan alarm perlu diselaraskan antara penjelasan simulasi dan kode program. Tabel sambungan pin juga perlu diperbaiki karena pin TRIG ditulis GPIO 5, sedangkan diagram dan kode menggunakan GPIO 15.
•Pengujian sebaiknya mencakup pergantian mode manual dan otomatis, perubahan level di sekitar batas kontrol, serta aktivasi dan penghentian alarm. Kondisi uji, hasil yang diharapkan, dan hasil aktual perlu dicatat agar perilaku sistem dapat diperiksa kembali.
•Keandalan komunikasi perlu ditingkatkan dengan penyambungan ulang pada dashboard, penanda waktu pembaruan data, serta penanganan pesan yang tidak valid atau level di luar rentang 0–100%. Status pompa yang ditampilkan harus mengikuti data balasan dari perangkat.
•Untuk penerapan nyata, komunikasi sebaiknya menggunakan broker dengan autentikasi, koneksi terenkripsi, dan topik khusus setiap perangkat agar pesan kontrol tidak bercampur dengan pengguna lain.
•Pengujian pompa fisik perlu memperhatikan kesesuaian relay dan perlindungan kelistrikan. Sistem juga perlu memiliki pengaman ketika sensor gagal, air sumber habis, atau pengisian melewati batas aman, termasuk saat mode manual digunakan.
•Pengembangan berikutnya dapat menambahkan riwayat level air dan notifikasi ke smartphone. Pengujian jangka panjang serta pencatatan penggunaan air dan energi diperlukan sebelum menyimpulkan bahwa sistem lebih hemat dan andal.
DAFTAR PUSTAKA
Babiuch, M., Foltýnek, P., & Smutný, P. (2019). Using the ESP32 microcontroller for data processing. 2019 20th International Carpathian Control Conference (ICCC), 1–6. https://doi.org/10.1109/CarpathianCC.2019.8765944
Hafni, Zen, M., & Irwan. (2025). Implementation of an Internet of Things (IoT) based water level monitoring system using ultrasonic sensors and the Blynk application. Proceedings of International Conference on Islamic Community Studies, 2488–2496. https://proceeding.pancabudi.ac.id/index.php/ICIE/article/view/825
Septyarno, A., Ma’ruf, J., Wicaksono, W. Y., & Pramono. (2026). Perancangan monitoring dan kendali level air berbasis ESP32 menggunakan protokol MQTT. Seminar Nasional Teknologi Informasi dan Bisnis (SENATIB) 2026, 1250–1257. Universitas Duta Bangsa Surakarta.
Soni, D., & Makwana, A. (2017). A survey on MQTT: A protocol of Internet of Things (IoT). International Conference on Telecommunication, Power Analysis and Computing Techniques (ICTPACT-2017).
LAMPIRAN
Link Youtube: https://youtu.be/AaMknPjq50k
Tidak ada komentar:
Posting Komentar