tutorial lengkap penggunaan sensor water level dengan Arduino Uno, Arduino Mega, dan ESP32, mulai dari wiring, penjelasan kerja sensor, hingga contoh program dan tampilan LCD

:


๐Ÿ’ง 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

KarakteristikNilai Umum
Tegangan Operasi3.3V โ€“ 5V
Tegangan Output0V โ€“ 5V (analog)
Arus MaksimalSekitar 20 mA
Tipe OutputAnalog (A0) dan Digital (D0, jika pakai modul komparator)
Bahan ProbeLogam (biasanya aluminium atau tembaga)
Panjang ProbeSekitar 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 SensorOutput Analog (ยฑ)
Sensor kering0 โ€“ 300
Terkena air sedikit300 โ€“ 600
Terendam penuh600 โ€“ 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

KomponenKeterangan
Arduino UnoMikrokontroler utama
Sensor Air AnalogOutput ke pin A0 (0โ€“1023)
LCD 16×2 I2CTampilan level air
LED MerahIndikator air rendah
LED KuningIndikator air sedang
LED HijauIndikator air penuh
BuzzerAlarm level sedang/tinggi
Resistor 220ฮฉUntuk masing-masing LED

๐Ÿงท 2. Wiring LCD 16×2 I2C

LCD I2C PinArduino Pin
GNDGND
VCC5V
SDAA4
SCLA5

Untuk Arduino Uno. (Kalau pakai board lain bisa berbeda: misalnya ESP8266: SDA=D2, SCL=D1)


๐Ÿ”Œ 3. Wiring Sensor Air Analog

Sensor PinArduino Pin
VCC5V
GNDGND
AOUTA0

๐Ÿ’ก 4. Wiring LED + Resistor

LED WarnaArduino PinResistorGND
MerahD2220ฮฉYa
KuningD3220ฮฉYa
HijauD8220ฮฉYa

Skema:
LED Anoda (+) โ†’ Resistor 220ฮฉ โ†’ Pin Arduino
LED Katoda (โ€“) โ†’ GND


๐Ÿ”Š 5. Wiring Buzzer

Buzzer PinArduino 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 PinESP32 PinKeterangan
GNDGNDGround
VCC3V3Gunakan 3.3V / 5V
SDAGPIO 21I2C data
SCLGPIO 22I2C clock

Pastikan Wire.begin(21, 22); di dalam program


๐Ÿ’ง Sensor Air Analog

Sensor PinESP32 PinKeterangan
VCC3V3 atau 5VGunakan sesuai sensor
GNDGNDGround
AOUTGPIO 34Input analog (ADC)

Gunakan GPIO 34โ€“39 untuk input analog karena tidak bisa digunakan sebagai output.


๐Ÿ’ก LED (pakai resistor 220ฮฉ per LED)

LED WarnaAnoda (+) ke ESP32Katoda (โ€“) ke GNDFungsi
MerahGPIO 15GND via resistorAir Rendah
KuningGPIO 2GND via resistorAir Sedang
HijauGPIO 4GND via resistorAir Tinggi

๐Ÿ”Š Buzzer

Buzzer PinESP32 PinKeterangan
(+)GPIO 5Tone buzzer
(โ€“)GNDGround
#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 PinArduino Mega
GNDGND
VCC5V
SDAPin 20
SCLPin 21

๐Ÿ’ง Sensor Air Analog

Sensor PinArduino Mega
VCC5V
GNDGND
AOUTA0

๐Ÿ’ก LED

LED WarnaArduino MegaFungsi
MerahPin 2Air Rendah
KuningPin 3Air Sedang
HijauPin 4Air Tinggi

Anoda (+) LED ke pin, Katoda (โ€“) ke GND lewat resistor 220ฮฉ


๐Ÿ”Š Buzzer

Buzzer PinArduino 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);
}

Leave a Reply

Your email address will not be published. Required fields are marked *