:
๐ง PRINSIP KERJA SENSOR WATER LEVEL
Sensor water level berfungsi untuk mendeteksi ketinggian air berdasarkan konduktivitas atau jarak (tergantung jenis sensornya). Ada beberapa jenis sensor water level, namun yang paling umum digunakan di Arduino dan ESP32 ada dua:
๐งช 1. Sensor Water Level Berbasis Konduktivitas (contoh: YL-69 / HL-69)
๐ Prinsip:
- Sensor ini memiliki dua probe (pin metal) yang dimasukkan ke dalam air.
- Air menghantarkan listrik karena mengandung mineral/ion.
- Semakin tinggi air yang menyentuh probe, maka:
- Semakin besar konduktivitas
- Semakin kecil hambatan (resistansi)
- Semakin tinggi tegangan output analog
๐ง Cara kerja:
- Tegangan dari VCC mengalir melalui probe.
- Modul analog membandingkan tegangan antara probe dan GND.
- Output nilai analog (0โ1023) untuk Arduino / 0โ4095 untuk ESP32.
- Nilai ini menunjukkan level air dari kering (nilai kecil) hingga penuh (nilai besar).
โ ๏ธ Catatan:
- Sensor ini tidak cocok untuk air murni (tidak konduktif).
- Tidak disarankan terendam terus-menerus karena mudah berkarat.
- Biasa digunakan untuk tanaman, kolam, ember, dsb.
Karakteristik Sensor Water Level Tipe B (Berbasis Konduktivitas)
Biasanya disebut juga sensor soil moisture, tapi dapat digunakan sebagai water level sensor sederhana. Berikut karakteristik utamanya:
โ๏ธ 1. Parameter Umum
Karakteristik | Nilai Umum |
---|---|
Tegangan Operasi | 3.3V โ 5V |
Tegangan Output | 0V โ 5V (analog) |
Arus Maksimal | Sekitar 20 mA |
Tipe Output | Analog (A0) dan Digital (D0, jika pakai modul komparator) |
Bahan Probe | Logam (biasanya aluminium atau tembaga) |
Panjang Probe | Sekitar 4 โ 5 cm |
Rentang Deteksi | ยฑ 0 โ 40 mm (tergantung air & posisi) |
๐ 2. Input dan Output
- A0 (analog output): Memberikan nilai antara 0โ1023 (Arduino) atau 0โ4095 (ESP32).
- D0 (digital output): Hanya HIGH atau LOW, berdasarkan batas (threshold) dari potensiometer di modul (jika ada).
- Modul komparator (pada versi lengkap): menggunakan IC LM393 untuk digital output otomatis.
๐ 3. Hubungan Nilai dengan Air
Kondisi Sensor | Output Analog (ยฑ) |
---|---|
Sensor kering | 0 โ 300 |
Terkena air sedikit | 300 โ 600 |
Terendam penuh | 600 โ 1023 |
(Catatan: Nilai ini bervariasi tergantung air dan panjang probe yang terendam)
โ ๏ธ 4. Kekurangan
- โ Mudah korosi / berkarat jika digunakan jangka panjang
- โ Tidak cocok untuk air murni atau air suling (tidak konduktif)
- โ Tidak bisa mendeteksi volume, hanya tinggi (dengan pendekatan kasar)
- โ Akurasi kurang untuk aplikasi industri
โ 5. Kelebihan
- โ Murah dan mudah digunakan
- โ Cocok untuk hobi, tanaman otomatis, deteksi air sederhana
- โ Bisa digunakan dengan Arduino, ESP32, dan mikrokontroler lainnya
- โ Dapat disambungkan ke LCD, relay, buzzer, dsb
contoh penerapan yang cocok untuk sensor water level dalam berbagai bidang:
๐ฟ 1. Pertanian (Agrikultur)
โ Penerapan:
- Pemantauan irigasi sawah dan ladang
- Sistem penyiraman otomatis pada green house
- Pengontrolan air pada hidroponik dan aquaponik
๐ Penjelasan:
Di bidang pertanian, sensor water level sangat penting untuk memastikan tanaman mendapatkan pasokan air yang cukup. Pada sistem irigasi otomatis, sensor dipasang di tangki penampungan air atau di saluran irigasi. Ketika air sudah berada di bawah level tertentu, pompa bisa diaktifkan secara otomatis. Sensor ini juga digunakan untuk menghindari kelebihan air pada sistem tanam seperti hidroponik.
๐ 2. Rumah Tangga / Smart Home
โ Penerapan:
- Level air di tandon / toren rumah
- Alarm air habis / penuh
- Pendeteksi kebocoran di kamar mandi atau dapur
๐ Penjelasan:
Di rumah tangga, sensor water level digunakan untuk memantau tandon air agar tidak kehabisan air tanpa diketahui. Sensor ini juga bisa digunakan untuk mematikan pompa otomatis ketika tandon sudah penuh, mencegah air luber. Selain itu, dapat digunakan untuk deteksi kebocoran air di dapur atau kamar mandi, memberikan peringatan dini melalui buzzer atau notifikasi IoT.
๐ญ 3. Industri & Pabrik
โ Penerapan:
- Kontrol proses kimia yang melibatkan cairan
- Pemantauan tangki air, oli, atau cairan kimia
- Sistem pendinginan mesin
๐ Penjelasan:
Industri yang mengandalkan cairan untuk proses produksi sangat membutuhkan sensor water level. Contohnya, pada pabrik makanan atau kimia, tingkat cairan harus dipantau terus-menerus untuk menjaga kestabilan proses produksi. Sensor level cairan digunakan dalam sistem SCADA, dan sering dikombinasikan dengan sensor suhu atau tekanan. Di mesin-mesin besar, sensor ini penting untuk memastikan pendinginan yang cukup, agar mesin tidak overheat.
๐ฐ 4. Instalasi Air Bersih dan Limbah (PDAM / WTP / WWTP)
โ Penerapan:
- Pemantauan bak penampungan air bersih
- Level air pada bak sedimentasi atau filtrasi
- Level air pada tangki limbah untuk pengolahan
๐ Penjelasan:
Pada PDAM dan instalasi pengolahan air, sensor water level digunakan untuk memantau tinggi permukaan air di berbagai tahap proses. Misalnya, saat air masuk ke bak penampung, saat filtrasi berlangsung, hingga saat air limbah dikumpulkan untuk dibuang. Sensor digunakan untuk menghindari kekeringan atau tumpahan yang bisa menyebabkan pencemaran lingkungan.
๐ 5. Otomotif dan Transportasi
โ Penerapan:
- Tangki air radiator
- Tangki air wiper
- Kapal laut: pemantauan level air di ruang bawah dek
๐ Penjelasan:
Dalam otomotif, terutama kendaraan berat dan laut, penting untuk memantau air pada sistem pendinginan dan fungsional lain. Sensor water level bisa memberi peringatan jika radiator hampir kering, yang bisa menyebabkan kerusakan mesin. Di kapal laut, digunakan untuk memantau infiltrasi air laut di bagian bawah kapal, agar segera dilakukan penanganan sebelum tenggelam.
๐ 6. Lingkungan dan Mitigasi Bencana
โ Penerapan:
- Pemantauan tinggi muka air sungai atau bendungan
- Sistem peringatan dini banjir
- Monitoring sumur atau embung air desa
๐ Penjelasan:
Sensor water level berperan penting dalam sistem mitigasi bencana seperti deteksi banjir. Sensor dipasang di jembatan atau pinggir sungai untuk mengukur kenaikan air secara real-time. Jika level melebihi batas tertentu, sistem bisa mengirim notifikasi ke pihak terkait atau bahkan membunyikan sirine otomatis di desa.
๐งช 7. Laboratorium dan Penelitian
โ Penerapan:
- Percobaan cairan dalam tabung atau bejana
- Sistem sirkulasi tertutup cairan
- Monitoring cairan reagen atau pelarut
๐ Penjelasan:
Dalam laboratorium, pengukuran presisi level cairan sangat penting, terutama pada eksperimen kimia atau biologi. Sensor digunakan untuk mengetahui ketinggian cairan dengan akurat dan juga sebagai sistem otomatis untuk refill atau pengurasan. Beberapa laboratorium juga menggabungkan sensor ini dengan kontrol suhu atau sistem mikrokontroler otomatis.
Cara penggunaan menggunakan arduino uno

1. Komponen yang Digunakan
Komponen | Keterangan |
---|---|
Arduino Uno | Mikrokontroler utama |
Sensor Air Analog | Output ke pin A0 (0โ1023) |
LCD 16×2 I2C | Tampilan level air |
LED Merah | Indikator air rendah |
LED Kuning | Indikator air sedang |
LED Hijau | Indikator air penuh |
Buzzer | Alarm level sedang/tinggi |
Resistor 220ฮฉ | Untuk masing-masing LED |
๐งท 2. Wiring LCD 16×2 I2C
LCD I2C Pin | Arduino Pin |
---|---|
GND | GND |
VCC | 5V |
SDA | A4 |
SCL | A5 |
Untuk Arduino Uno. (Kalau pakai board lain bisa berbeda: misalnya ESP8266: SDA=D2, SCL=D1)
๐ 3. Wiring Sensor Air Analog
Sensor Pin | Arduino Pin |
---|---|
VCC | 5V |
GND | GND |
AOUT | A0 |
๐ก 4. Wiring LED + Resistor
LED Warna | Arduino Pin | Resistor | GND |
---|---|---|---|
Merah | D2 | 220ฮฉ | Ya |
Kuning | D3 | 220ฮฉ | Ya |
Hijau | D8 | 220ฮฉ | Ya |
Skema:
LED Anoda (+) โ Resistor 220ฮฉ โ Pin Arduino
LED Katoda (โ) โ GND
๐ 5. Wiring Buzzer
Buzzer Pin | Arduino Pin |
---|---|
(+) | D5 |
(โ) | GND |
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// === LCD I2C Setup ===
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C biasa: 0x27 atau 0x3F
// === Definisi Pin ===
const int redLED = 2;
const int yellowLED = 3;
const int greenLED = 8;
const int Buzzer = 5;
const int sensorPin = A0;
// === Batasan Level Air ===
const int lowerThreshold = 300; // Batas air rendah
const int upperThreshold = 600; // Batas air sedang
const int upp = 700; // Batas air tinggi
// === Nada Buzzer ===
int tones[] = {100, 200, 300, 400, 500, 600, 700, 800};
#define TONE_MEDIUM tones[4]
#define TONE_HIGH tones[7]
void setup() {
Serial.begin(9600);
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(Buzzer, OUTPUT);
lcd.begin();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(" Monitoring Air ");
lcd.setCursor(0, 1);
lcd.print(" Siap Digunakan ");
delay(2000);
lcd.clear();
}
void loop() {
int level = readSensor();
noTone(Buzzer);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Level: ");
lcd.print(level);
if (level == 0) {
Serial.println("Water Level: Empty");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
lcd.setCursor(0, 1);
lcd.print("Status: Kosong ");
}
else if (level <= lowerThreshold) {
Serial.println("Water Level: Low");
digitalWrite(redLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
lcd.setCursor(0, 1);
lcd.print("Status: Rendah ");
}
else if (level <= upperThreshold) {
Serial.println("Water Level: Medium");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(greenLED, LOW);
tone(Buzzer, TONE_MEDIUM);
lcd.setCursor(0, 1);
lcd.print("Status: Sedang ");
}
else if (level <= upp) {
Serial.println("Water Level: High");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, HIGH);
tone(Buzzer, TONE_HIGH);
lcd.setCursor(0, 1);
lcd.print("Status: Tinggi ");
}
delay(1000);
}
int readSensor() {
return analogRead(sensorPin);
}
Cara Penggunaan dengan ESP32
ESP32 adalah mikrokontroler yang lebih canggih dengan konektivitas Wi-Fi dan Bluetooth. Dengan ESP32, Anda dapat mengirimkan data ke server atau aplikasi web melalui jaringan

LCD 16×2 I2C
LCD I2C Pin | ESP32 Pin | Keterangan |
---|---|---|
GND | GND | Ground |
VCC | 3V3 | Gunakan 3.3V / 5V |
SDA | GPIO 21 | I2C data |
SCL | GPIO 22 | I2C clock |
Pastikan
Wire.begin(21, 22);
di dalam program
๐ง Sensor Air Analog
Sensor Pin | ESP32 Pin | Keterangan |
---|---|---|
VCC | 3V3 atau 5V | Gunakan sesuai sensor |
GND | GND | Ground |
AOUT | GPIO 34 | Input analog (ADC) |
Gunakan GPIO 34โ39 untuk input analog karena tidak bisa digunakan sebagai output.
๐ก LED (pakai resistor 220ฮฉ per LED)
LED Warna | Anoda (+) ke ESP32 | Katoda (โ) ke GND | Fungsi |
---|---|---|---|
Merah | GPIO 15 | GND via resistor | Air Rendah |
Kuning | GPIO 2 | GND via resistor | Air Sedang |
Hijau | GPIO 4 | GND via resistor | Air Tinggi |
๐ Buzzer
Buzzer Pin | ESP32 Pin | Keterangan |
---|---|---|
(+) | GPIO 5 | Tone buzzer |
(โ) | GND | Ground |
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// === LCD I2C Setup (ESP32 I2C bisa bebas) ===
#define I2C_SDA 21
#define I2C_SCL 22
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C umum: 0x27 atau 0x3F
// === Definisi Pin ESP32 ===
const int redLED = 15;
const int yellowLED = 2;
const int greenLED = 4;
const int Buzzer = 5;
const int sensorPin = 34; // Hanya gunakan pin ADC (GPIO 32~39)
// === Batasan Level Air ===
const int lowerThreshold = 800; // Sesuaikan kalibrasi sensor untuk ESP32 (12-bit ADC)
const int upperThreshold = 2000;
const int upp = 3000;
// === Nada Buzzer ===
int tones[] = {100, 200, 300, 400, 500, 600, 700, 800};
#define TONE_MEDIUM tones[4]
#define TONE_HIGH tones[7]
void setup() {
Serial.begin(115200);
// Inisialisasi pin
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(Buzzer, OUTPUT);
// Inisialisasi I2C dan LCD
Wire.begin(I2C_SDA, I2C_SCL);
lcd.begin();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(" Monitoring Air ");
lcd.setCursor(0, 1);
lcd.print(" Siap Digunakan ");
delay(2000);
lcd.clear();
}
void loop() {
int level = readSensor();
noTone(Buzzer);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Level: ");
lcd.print(level);
if (level < 100) {
Serial.println("Water Level: Kosong");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
lcd.setCursor(0, 1);
lcd.print("Status: Kosong ");
}
else if (level <= lowerThreshold) {
Serial.println("Water Level: Rendah");
digitalWrite(redLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
lcd.setCursor(0, 1);
lcd.print("Status: Rendah ");
}
else if (level <= upperThreshold) {
Serial.println("Water Level: Sedang");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(greenLED, LOW);
tone(Buzzer, TONE_MEDIUM);
lcd.setCursor(0, 1);
lcd.print("Status: Sedang ");
}
else if (level <= upp) {
Serial.println("Water Level: Tinggi");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, HIGH);
tone(Buzzer, TONE_HIGH);
lcd.setCursor(0, 1);
lcd.print("Status: Tinggi ");
}
delay(1000);
}
// Fungsi pembacaan sensor analog
int readSensor() {
return analogRead(sensorPin); // ESP32 = 12-bit (0 - 4095)
}
Cara Penggunaan dengan Arduino Mega
Arduino Mega memiliki lebih banyak pin dan lebih banyak port serial dibandingkan dengan Arduino Uno, yang membuatnya lebih fleksibel

LCD 16×2 I2C
LCD I2C Pin | Arduino Mega |
---|---|
GND | GND |
VCC | 5V |
SDA | Pin 20 |
SCL | Pin 21 |
๐ง Sensor Air Analog
Sensor Pin | Arduino Mega |
---|---|
VCC | 5V |
GND | GND |
AOUT | A0 |
๐ก LED
LED Warna | Arduino Mega | Fungsi |
---|---|---|
Merah | Pin 2 | Air Rendah |
Kuning | Pin 3 | Air Sedang |
Hijau | Pin 4 | Air Tinggi |
Anoda (+) LED ke pin, Katoda (โ) ke GND lewat resistor 220ฮฉ
๐ Buzzer
Buzzer Pin | Arduino Mega |
---|---|
(+) | Pin 5 |
(โ) | GND |
include
include
// === LCD I2C Setup ===
LiquidCrystal_I2C lcd(0x27, 16, 2); // Ganti 0x27 ke 0x3F jika tidak tampil
// === Definisi Pin ===
const int redLED = 2;
const int yellowLED = 3;
const int greenLED = 4;
const int Buzzer = 5;
const int sensorPin = A0; // Input analog sensor
// === Batasan Level Air ===
const int lowerThreshold = 300; // Rendah
const int upperThreshold = 600; // Sedang
const int upp = 700; // Tinggi
// === Nada Buzzer ===
int tones[] = {100, 200, 300, 400, 500, 600, 700, 800};
define TONE_MEDIUM tones[4]
define TONE_HIGH tones[7]
void setup() {
Serial.begin(9600);
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(Buzzer, OUTPUT);
// Inisialisasi LCD
lcd.begin();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(” Monitoring Air “);
lcd.setCursor(0, 1);
lcd.print(” Siap Digunakan “);
delay(2000);
lcd.clear();
}
void loop() {
int level = readSensor();
noTone(Buzzer);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“Level: “);
lcd.print(level);
if (level == 0) {
Serial.println(“Water Level: Kosong”);
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
lcd.setCursor(0, 1);
lcd.print(“Status: Kosong “);
}
else if (level <= lowerThreshold) {
Serial.println(“Water Level: Rendah”);
digitalWrite(redLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
lcd.setCursor(0, 1);
lcd.print(“Status: Rendah “);
}
else if (level <= upperThreshold) {
Serial.println(“Water Level: Sedang”);
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(greenLED, LOW);
tone(Buzzer, TONE_MEDIUM);
lcd.setCursor(0, 1);
lcd.print(“Status: Sedang “);
}
else if (level <= upp) {
Serial.println(“Water Level: Tinggi”);
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, HIGH);
tone(Buzzer, TONE_HIGH);
lcd.setCursor(0, 1);
lcd.print(“Status: Tinggi “);
}
delay(1000);
}
int readSensor() {
return analogRead(sensorPin);
}