Summary
Water tank overflow is a common problem in homes, apartments, schools, and industrial facilities. Leaving a water pump running for too long not only wastes water but also increases electricity consumption and may damage pumping equipment over time. A simple water level indicator can eliminate this problem by continuously monitoring the water level and notifying the user when the tank is nearing full capacity. This project is an excellent introduction to Arduino because it combines digital sensing, GPIO control, LEDs, and simple decision-making into a practical application. It also lays the foundation for more advanced automation projects, such as automatic water pump controllers and IoT-based tank monitoring systems. In this tutorial, we'll build a multi-level water level indicator using an Arduino Uno, conductive probes, LEDs, and a buzzer. By the end of this project, you'll understand how water conductivity can be used for level detection and how Arduino processes sensor inputs to monitor real-world conditions.

How Does a Water Level Indicator Work?
Unlike float switches that use moving mechanical parts, this project uses the natural conductivity of water.
Several metal probes are placed at different heights inside the water tank.
One probe acts as the common reference, while the remaining probes correspond to different water levels.
As the water level rises, it touches each probe sequentially, creating an electrical path between the common probe and the sensing probe.
The Arduino detects this change and turns on the corresponding LED.
The working sequence is straightforward:
-
If only the first probe touches water, the tank is nearly empty.
-
As the water reaches higher probes, additional LEDs illuminate.
-
When the highest probe detects water, the Arduino activates the buzzer to indicate that the tank is full.
This simple principle makes the system reliable, inexpensive, and easy to build.
Components and Supplies
Components Required
You'll need the following components.
Electronics
-
4 × LEDs (Green, Green, Yellow, Red)
-
4 × 220Ω Resistors
-
Active Buzzer
-
Connecting Wires or Stainless Steel Probes
-
USB Cable
-
Small Water Container for Testing
Optional Components
-
Relay Module
-
Mini Water Pump
-
16×2 LCD Display
-
Wi-Fi Module
-
Battery Pack
Understanding the Components
Arduino Uno
The Arduino Uno acts as the controller of the project.
It continuously reads the status of the water sensing probes and determines which LEDs should remain ON.
When the highest level is detected, it also activates the buzzer.
Water Level Probes
The sensing probes are simply conductive metal wires placed at different heights.
Since ordinary tap water contains dissolved minerals, it conducts a small amount of electricity.
Whenever water touches a probe, a conductive path forms between the common probe and the sensing probe.
The Arduino interprets this as a HIGH digital input.
LEDs
Each LED represents a different water level inside the tank.
For example:
-
Green LED → Low Level
-
Green LED → Medium Level
-
Yellow LED → High Level
-
Red LED → Full Tank
This provides an instant visual indication of the tank status.
Active Buzzer
The buzzer provides an audible alert once the water reaches the maximum level.
An active buzzer is recommended because it only requires a HIGH signal from the Arduino to generate sound.
Circuit Connections
Water Level Probes
| Probe | Arduino Pin |
|---|---|
| Common Probe | 5V |
| Level 1 Probe | Pin 2 |
| Level 2 Probe | Pin 3 |
| Level 3 Probe | Pin 4 |
| Level 4 Probe | Pin 5 |
LED Connections
| LED | Arduino Pin |
|---|---|
| Low Level | Pin 8 |
| Medium Level | Pin 9 |
| High Level | Pin 10 |
| Full Level | Pin 11 |
Each LED should be connected through a 220Ω resistor to limit current.
Buzzer Connection
| Device | Arduino Pin |
|---|---|
| Active Buzzer |
Pin 12 |
Building the Connections
Step 1: Prepare the Water Tank
Choose a small plastic container for testing.
Insert five metal probes vertically into the container.
One probe should remain at the bottom as the common reference.
Position the remaining probes at equal intervals to represent different water levels.
Ensure that none of the probes touch each other.
Step 2: Assemble the Circuit
Mount the Arduino Uno on the breadboard area.
Connect the LEDs using current-limiting resistors.
Connect the buzzer.
Finally, wire each sensing probe to its respective Arduino pin.
Double-check every connection before powering the circuit.
Step 3: Connect the Water Probes
Strip only a small portion of insulation from the ends of the sensing wires.
Only the exposed section should come into contact with water.
Using stainless steel wires instead of bare copper improves long-term durability and reduces corrosion.
Step 4: Power the Arduino
Connect the Arduino to the computer using the USB cable.
Once powered, all LEDs should remain OFF until water reaches the first sensing probe.
Code for the Project
The Arduino repeatedly executes four simple operations.
// Water Level Indicator Using Arduino
// Water level sensor pins
const int level1Pin = 2;
const int level2Pin = 3;
const int level3Pin = 4;
const int level4Pin = 5;
// LED pins
const int led1 = 8;
const int led2 = 9;
const int led3 = 10;
const int led4 = 11;
// Buzzer pin
const int buzzer = 12;
void setup() {
// Configure sensor pins
pinMode(level1Pin, INPUT);
pinMode(level2Pin, INPUT);
pinMode(level3Pin, INPUT);
pinMode(level4Pin, INPUT);
// Configure LED pins
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
// Configure buzzer
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Read sensor states
bool level1 = digitalRead(level1Pin);
bool level2 = digitalRead(level2Pin);
bool level3 = digitalRead(level3Pin);
bool level4 = digitalRead(level4Pin);
// Turn everything OFF first
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(buzzer, LOW);
// Water Level 25%
if(level1){
digitalWrite(led1, HIGH);
Serial.println("Water Level: 25%");
}
// Water Level 50%
if(level2){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
Serial.println("Water Level: 50%");
}
// Water Level 75%
if(level3){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
Serial.println("Water Level: 75%");
}
// Water Tank Full
if(level4){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(buzzer, HIGH);
Serial.println("Water Tank FULL!");
}
delay(200);
}
How the Code Works
The program continuously monitors the four water-level sensing probes connected to Arduino's digital input pins.
First, it reads the status of each probe using the digitalRead() function. If a probe comes in contact with water, the corresponding input pin goes HIGH.
Based on the detected water level:
-
Level 1 → Turns ON the first LED to indicate approximately 25% water level.
-
Level 2 → Turns ON the first two LEDs to indicate 50% water level.
-
Level 3 → Turns ON the first three LEDs to indicate 75% water level.
-
Level 4 → Turns ON all four LEDs and activates the buzzer to indicate that the tank is 100% full.
The Arduino also prints the detected water level to the Serial Monitor for debugging and testing.
After a short delay of 200 ms, the process repeats continuously, allowing the system to monitor changes in the water level in real time.
Testing the Project
Once the circuit is assembled and programmed, test it using a small container of water.
Gradually pour water into the container while observing the LEDs.
Water Below First Probe
Expected result:
-
All LEDs remain OFF.
Water Reaches First Probe
Expected result:
-
First LED turns ON.
Water Reaches Middle Probe
Expected result:
-
The first two or three LEDs remain illuminated, depending on the water level.
Water Reaches Maximum Level
Expected result:
-
All LEDs turn ON.
-
The buzzer sounds continuously until the water level drops below the highest probe.
Common Problems
LEDs Flicker Randomly
Possible causes include:
-
Loose jumper wires
-
Dirty sensing probes
-
Poor water conductivity
-
Electrical noise
Ensure all connections are secure and clean the probes if necessary.
Incorrect Water Level Indication
Check:
-
Probe heights
-
Wiring sequence
-
Arduino pin assignments
An incorrectly connected probe can cause the LEDs to illuminate in the wrong order.
Buzzer Does Not Sound
Verify:
-
Buzzer polarity
-
Arduino output pin
-
Program logic
-
Wiring continuity
Testing the buzzer independently can help isolate the issue.
Probes Corrode Quickly
Bare copper oxidizes after prolonged exposure to water.
For permanent installations, use:
-
Stainless steel rods
-
Stainless steel screws
-
Corrosion-resistant electrodes
These materials significantly improve reliability.
Final Thoughts
A water level indicator is one of the most practical Arduino projects for beginners because it demonstrates how a microcontroller can monitor real-world conditions and respond instantly. Despite its simple design, the project introduces key concepts such as digital sensing, GPIO control, and embedded decision-making, all of which form the foundation of larger automation systems.
For anyone looking to build a water level indicator project India, this tutorial provides a solid starting point. Once the basic system is working reliably, it can be expanded with automatic pump control, LCD displays, or IoT connectivity to create a complete smart water management solution.






