DC
Kelas Digital Creative
Robotika · IoT · Scratch · Canva · CapCut · AI
← kembali ke Home

Membuat Pengisi Tandon Air Otomatis dengan Sensor Ultrasonik dan Relay (Simulasi Arduino UNO di Wokwi)

⏱ 40 Menit Arduino August 2026 🔧 Arduino UNO, Sensor Ultrasonik HC-SR04, Relay Module, LED (indikator pompa), Resistor 220 Ohm, Breadboard, Kabel Jumper

Pada tutorial ini, kita akan membuat Smart Water Tank — sistem yang otomatis menyalakan dan mematikan pompa air berdasarkan ketinggian air di dalam tandon, tanpa perlu dipantau manual. Proyek ini memakai Arduino UNO, sensor jarak HC-SR04, dan modul Relay, semuanya disimulasikan di Wokwi.

Apa yang Akan Kita Pelajari?

Bagian Komponen Fungsi
Board Arduino UNO Pusat kendali sistem
Sensor HC-SR04 Mengukur jarak dari sensor ke permukaan air
Kontrol Relay Menyalakan/mematikan pompa (disimulasikan dengan LED)
Batas 80 / 20 cm Ambang batas kosong dan penuh

Inti Proyek

Sistem membaca jarak permukaan air dari sensor yang dipasang di bagian atas tandon. Saat jarak terbaca besar, artinya permukaan air rendah dan pompa perlu menyala. Saat jarak terbaca kecil, artinya air sudah naik mendekati sensor dan pompa perlu dimatikan.

LED pada simulasi dipakai sebagai indikator pompa. Pada alat nyata, beban pompa tidak boleh langsung dipasang ke pin Arduino — harus lewat relay/contactor yang sesuai.

Deskripsi Proyek

Proyek ini dibuat untuk mensimulasikan pengisian tandon air otomatis. Masalah yang ingin diselesaikan cukup nyata: pompa sering lupa dimatikan saat tandon penuh, atau lupa dinyalakan ketika air hampir habis. Dengan Arduino, sensor jarak, dan relay, sistem dapat mengambil keputusan sederhana berdasarkan tinggi permukaan air.

Sensor HC-SR04 diletakkan secara konsep di bagian atas tandon. Sensor tidak membaca kedalaman air secara langsung, melainkan membaca jarak antara sensor dan permukaan air. Semakin jauh jaraknya, semakin rendah permukaan air. Semakin dekat jaraknya, semakin penuh tandon.

Yang penting dari proyek ini bukan hanya relay menyala atau mati, tetapi cara sistem menjaga pompa agar tidak terlalu sering hidup-mati. Karena itu dipakai konsep hysteresis, yaitu dua batas berbeda: batas kosong untuk menyalakan pompa dan batas penuh untuk mematikan pompa.

Manfaat Praktik Ini

  • Memahami cara Arduino membaca jarak menggunakan sensor ultrasonik.
  • Melatih logika otomatis ON/OFF menggunakan relay.
  • Mengenal hysteresis agar sistem tidak cepat berpindah status.
  • Membaca hasil pengujian lewat Serial Monitor.

Batasan Realistis Simulasi

  • Di Wokwi, pompa diwakili oleh LED agar simulasi tetap aman.
  • Untuk pompa listrik nyata, relay dan instalasi harus sesuai arus, tegangan, isolasi, dan standar keselamatan.
  • Sensor ultrasonik bisa terganggu uap air, cipratan, busa, atau permukaan air yang terlalu bergelombang.

Tujuan Pembelajaran

  • Menentukan pin TRIG, ECHO, dan pin kontrol relay pada Arduino UNO.
  • Menjelaskan bahwa jarak besar berarti air rendah, sedangkan jarak kecil berarti air mendekati sensor.
  • Menerapkan variabel status pompaMenyala, supaya pompa mempertahankan kondisi terakhir saat level air berada di tengah.
  • Menguji tiga kondisi: tandon hampir kosong, sedang mengisi, dan penuh.
  • Membedakan simulasi edukasi dengan penerapan alat nyata yang memerlukan perhatian keselamatan listrik.

Langkah 1: Menyiapkan Komponen

Rangkaian ini tidak memerlukan library tambahan, karena program hanya memakai fungsi bawaan Arduino seperti digitalWrite, pulseIn, Serial, dan delay.

Komponen Fungsi
Arduino UNO Pusat kendali. Mengirim pulsa ke sensor, membaca pantulan lewat pin ECHO, menghitung jarak, lalu memberi sinyal ke relay.
HC-SR04 Sensor ultrasonik dengan pin VCC, GND, TRIG, dan ECHO. Dipakai sebagai pembaca jarak permukaan air.
Relay Module Bertindak sebagai saklar elektronik. Di simulasi, relay menghubungkan arus ke LED; pada dunia nyata, relay/contactor mengendalikan beban pompa dengan pengaman yang sesuai.
LED + Resistor LED jadi indikator bahwa pompa sedang menyala. Resistor 220 Ohm membatasi arus LED agar tidak berlebihan.
💡 Kenapa sensornya diletakkan di atas tandon, bukan di dalam air?

Sensor ultrasonik HC-SR04 bukan sensor yang tahan air (bukan sensor waterproof), jadi tidak bisa dicelupkan langsung ke dalam air. Karena itu, sensor diletakkan di bagian atas tandon, menghadap ke bawah, lalu mengukur jarak dari sensor ke permukaan air — bukan mengukur kedalaman air secara langsung. Dengan cara ini, sensor tetap kering dan aman, tapi tetap bisa “tahu” seberapa tinggi air di dalam tandon lewat perhitungan jarak.

Langkah 2: Merangkai Wiring (Jalur Kabel)

Komponen Tersambung ke
HC-SR04 VCC 5V (lewat breadboard)
HC-SR04 GND GND (lewat breadboard)
HC-SR04 TRIG Pin digital 3
HC-SR04 ECHO Pin digital 2
Relay VCC 5V (lewat breadboard)
Relay GND GND (lewat breadboard)
Relay IN Pin digital 8

Jalur LED indikator: COM relay mendapat jalur positif, NO relay menuju anoda LED, katoda LED menuju resistor, lalu ke GND.

Breadboard dipakai untuk membagi jalur 5V dan GND, agar sensor dan relay sama-sama mendapatkan catu daya yang stabil.

💡 Catatan membaca posisi kabel di gambar simulasi

Sensor HC-SR04 berada di sisi kiri bawah gambar rangkaian, sedangkan relay dan LED berada di sisi kanan. Pada penerapan nyata, posisi fisik tentu menyesuaikan bentuk tandon dan box panel yang dipakai. Kabel yang terlihat panjang di Wokwi hanya kebutuhan visual simulasi saja — pada alat nyata, kabel harus dirapikan, diberi isolasi yang baik, dan dijauhkan dari cipratan air.

Langkah 3: Memahami Konsep Kerja Sistem

  1. HC-SR04 mengukur jarak ke permukaan air.
  2. Arduino membandingkan hasilnya dengan batas 80/20 cm.
  3. Relay menyambung atau memutus arus.
  4. Pompa/LED indikator menyala sesuai keputusan tersebut.

Arduino memulai pembacaan dengan memberi pulsa singkat ke pin TRIG. Sensor memancarkan gelombang ultrasonik, lalu pin ECHO menerima pantulan dari permukaan air. Waktu pantulan ini dihitung menjadi jarak dalam satuan sentimeter.

Rumus pada program memakai duration * 0.034 / 2. Angka 0.034 adalah pendekatan kecepatan suara dalam cm per mikrodetik. Pembagian dengan 2 dilakukan karena gelombang menempuh perjalanan pergi dan pulang.

Setelah jarak didapat, Arduino membandingkan nilai tersebut dengan dua batas:

  • Jika jarak lebih besar atau sama dengan 80 cm, air dianggap hampir kosong dan pompa dinyalakan.
  • Jika jarak lebih kecil atau sama dengan 20 cm, air dianggap penuh dan pompa dimatikan.

Langkah 4: Memahami Logika Hysteresis

Grafik ambang batas: 0 cm (Pompa OFF) — 20 cm (batasPenuh) — 50 cm (zona memori status) — 80 cm (batasKosong) — 100 cm (Pompa ON).

Air rendah → jarak besar → relay ON. Air penuh → jarak kecil → relay OFF.

💡 Kenapa harus pakai Hysteresis? Kenapa tidak satu batas saja?

Tanpa hysteresis, sistem biasanya hanya memakai satu batas. Misalnya, pompa menyala saat jarak di atas 50 cm dan mati saat di bawah 50 cm. Masalahnya, permukaan air bisa bergoyang, sensor bisa membaca naik-turun sedikit, dan relay dapat cepat sekali hidup-mati berulang kali di sekitar angka batas itu — ini buruk untuk umur pompa dan relay, karena komponen listrik yang sering dinyalakan-dimatikan cepat akan lebih cepat rusak.

Hysteresis memakai dua batas agar keputusan lebih stabil. Pada program ini, pompa hanya dinyalakan saat jarak air mencapai 80 cm atau lebih. Setelah menyala, pompa tidak langsung mati ketika air sudah turun ke 79 cm, 60 cm, atau 50 cm. Pompa tetap mengikuti status terakhir sampai air benar-benar mencapai batas penuh 20 cm atau kurang.

Dengan cara ini, pompa bekerja dalam siklus yang lebih masuk akal: menyala saat tandon benar-benar rendah, terus mengisi saat air berada di zona tengah, lalu mati setelah tandon mendekati penuh.

Kondisi Penjelasan
Saat jarak ≥ 80 cm Permukaan air jauh dari sensor. Sistem menganggap tandon hampir kosong. Relay aktif dan indikator pompa menyala.
Saat jarak ≤ 20 cm Permukaan air dekat dengan sensor. Sistem menganggap tandon sudah penuh. Relay mati dan indikator pompa padam.
Zona 20–80 cm Bukan area keputusan baru, melainkan area mempertahankan status terakhir. Kalau sebelumnya pompa sudah menyala, ia tetap menyala. Kalau sebelumnya mati, tetap mati.

Langkah 5: Menulis Kode Program (sketch.ino)

Buka file sketch.ino di Wokwi, lalu salin kode berikut:

// Menyiapkan colokan komponen
int trigPin = 3;
int echoPin = 2;
int pinRelay = 8;

// Memori untuk menyimpan status pompa
bool pompaMenyala = false;

// Pengaturan Ukuran Toren Air (dalam centimeter)
// Semakin kosong airnya, semakin jauh jaraknya dari sensor di atap toren
int batasKosong = 80;  // Jika jarak air >= 80 cm, pompa harus nyala
int batasPenuh = 20;   // Jika jarak air <= 20 cm, pompa harus mati

void setup() {
  Serial.begin(9600);

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  pinMode(pinRelay, OUTPUT);
  digitalWrite(pinRelay, LOW);  // Pastikan pompa mati di awal

  Serial.println("=== SISTEM TOREN AIR OTOMATIS ===");
  Serial.println("Memantau kedalaman air...");
}

void loop() {
  // 1. Membaca Jarak Permukaan Air
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);
  int jarakAir = duration * 0.034 / 2;

  // Tampilkan kondisi air saat ini
  Serial.print("Jarak sensor ke permukaan air: ");
  Serial.print(jarakAir);
  Serial.println(" cm");

  // 2. Logika Hysteresis (Pengendali Pompa)
  if (jarakAir >= batasKosong) {
    // JIKA TOREN KOSONG (Permukaan air jauh di bawah)
    if (pompaMenyala == false) {
      digitalWrite(pinRelay, HIGH);  // Relay menyalakan pompa
      pompaMenyala = true;
      Serial.println("-> TOREN HAMPIR KOSONG! Pompa Air MENYALA [*CEKLEK*]");
    }

  } else if (jarakAir <= batasPenuh) {
    // JIKA TOREN PENUH (Permukaan air sudah naik mendekati sensor)
    if (pompaMenyala == true) {
      digitalWrite(pinRelay, LOW);  // Relay mematikan pompa
      pompaMenyala = false;
      Serial.println("-> TOREN SUDAH PENUH! Pompa Air MATI.");
    }
  }
  // Jika jarak air berada di tengah-tengah (misal 50 cm),
  // pompa akan mempertahankan status terakhirnya
  // (kalau lagi ngisi ya lanjut ngisi, kalau lagi mati ya biarin mati).

  Serial.println("----------------------------------");
  delay(1500); // Jeda 1,5 detik sebelum mengecek lagi
}

Langkah 6: Memahami Setiap Bagian Kode

Klik masing-masing bagian di bawah ini untuk memahami fungsinya satu per satu:

📦 Bagian Variabel Pin, Status, dan Batas Air
  • int trigPin = 3; dan int echoPin = 2; — menyimpan nomor pin TRIG dan ECHO sensor.
  • int pinRelay = 8; — menyimpan nomor pin kontrol relay.
  • bool pompaMenyala = false; — variabel bertipe boolean (hanya bisa true atau false) yang menyimpan status pompa saat ini. Nilai awalnya false (mati). Variabel inilah “ingatan” sistem, yang membuat pompa bisa mempertahankan statusnya di zona tengah (20–80 cm).
  • int batasKosong = 80; — jarak minimal supaya pompa dianggap perlu dinyalakan.
  • int batasPenuh = 20; — jarak maksimal supaya pompa dianggap perlu dimatikan.

Catatan: angka 80 dan 20 ini tidak wajib sama pada alat nyata — nilainya harus disesuaikan dengan tinggi tandon, posisi sensor, dan titik aman yang diinginkan.

🚀 Bagian setup() — Dijalankan Sekali di Awal
  • Serial.begin(9600); — mengaktifkan komunikasi Serial Monitor.
  • pinMode(trigPin, OUTPUT); dan pinMode(echoPin, INPUT); — mengatur pin TRIG sebagai output (pengirim sinyal) dan ECHO sebagai input (penerima pantulan).
  • pinMode(pinRelay, OUTPUT); — mengatur pin relay sebagai output.
  • digitalWrite(pinRelay, LOW); — memastikan relay (dan pompa) dalam kondisi mati di awal program, sebelum ada pembacaan sensor sama sekali.
  • Serial.println(...) dua baris — menampilkan pesan pembuka ke Serial Monitor.
📏 Bagian loop() — Membaca Jarak Sensor
  • digitalWrite(trigPin, LOW); delayMicroseconds(2); — memastikan TRIG mati sesaat sebagai ancang-ancang.
  • digitalWrite(trigPin, HIGH); delayMicroseconds(10); — menyalakan TRIG selama 10 mikrodetik untuk memancarkan gelombang ultrasonik.
  • digitalWrite(trigPin, LOW); — mematikan TRIG lagi.
  • long duration = pulseIn(echoPin, HIGH); — mengukur berapa lama pin ECHO menerima sinyal HIGH, yaitu waktu tempuh gelombang pergi-pulang.
  • int jarakAir = duration * 0.034 / 2; — mengubah waktu tempuh menjadi jarak dalam sentimeter, dengan rumus yang sudah dijelaskan di Langkah 3.
  • Serial.print(...) beberapa baris — menampilkan jarak yang baru dibaca ke Serial Monitor.
🚦 Bagian loop() — Logika Hysteresis (Inti Program)
  • if (jarakAir >= batasKosong) { ... } — mengecek apakah jarak sudah mencapai atau melebihi 80 cm (tandon hampir kosong).
  • if (pompaMenyala == false) { ... } — di dalam blok tadi, ada pengecekan tambahan: apakah pompa sedang mati? Ini penting supaya pesan “Pompa MENYALA” dan perintah digitalWrite tidak diulang-ulang terus-menerus setiap 1,5 detik selama kondisi kosong bertahan — cukup dijalankan sekali saja tepat saat status berubah dari mati menjadi menyala.
  • digitalWrite(pinRelay, HIGH); pompaMenyala = true; — menyalakan relay, dan memperbarui “ingatan” status pompa menjadi menyala.
  • } else if (jarakAir <= batasPenuh) { ... }else if berarti "kalau kondisi pertama tadi salah, coba cek kondisi ini". Blok ini mengecek apakah jarak sudah mencapai 20 cm atau kurang (tandon penuh), dengan logika yang mirip: hanya mematikan relay dan mengubah pompaMenyala menjadi false jika sebelumnya statusnya memang sedang menyala.
  • Perhatikan: tidak ada blok else terakhir untuk kondisi "di antara 20 dan 80 cm" — dan memang sengaja tidak ada. Itulah yang membuat status pompa tidak berubah sama sekali saat berada di zona tengah; program hanya "diam" dan mempertahankan nilai pompaMenyala serta kondisi relay yang sudah ada sebelumnya.
  • delay(1500); — jeda 1,5 detik sebelum membaca jarak lagi.

Langkah 7: Menjalankan dan Menguji Simulasi

Pengujian di Wokwi sebaiknya dilakukan bertahap. Jangan langsung menganggap rangkaian salah bila LED belum berubah, karena sistem hysteresis memang sengaja mempertahankan status di zona tengah.

  1. Tekan tombol Play untuk menjalankan simulasi.
  2. Buka Serial Monitor agar nilai jarak dan pesan status terlihat.
  3. Klik sensor HC-SR04, lalu geser objek simulasi menjauh sampai jarak melewati 80 cm.
  4. Perhatikan relay dan LED indikator — pada kondisi ini pompa dianggap menyala.
  5. Geser jarak ke sekitar 50 cm. Pompa tetap mengikuti status terakhir, bukan langsung mati.
  6. Geser jarak mendekati sensor sampai 20 cm atau kurang. Relay memutus dan indikator pompa mati.
  7. Ulangi dari kondisi jauh ke dekat, untuk memastikan alurnya konsisten.

Hasil yang Diharapkan

Kondisi Jarak Hasil
≥ 80 cm Muncul pesan tandon hampir kosong, relay aktif, LED menyala.
20–80 cm Status mengikuti keadaan sebelumnya (tidak berubah).
≤ 20 cm Muncul pesan tandon penuh, relay mati, LED padam.

Kesalahan Uji yang Umum Terjadi

  • Menggeser sensor langsung ke 50 cm dari posisi awal, lalu mengira sistem

    Coba Simulasi di Wokwi

    🔒 Simulasi ini dikunci. Minta passcode ke gurumu untuk membuka.