Summary of Water Level Indicator Using Arduino & Ultrasonic Sensor
Wireless Water Level Indicator Using Ultrasonic sensor & Arduino notifies tank water level as a percentage on a 16×2 LCD. A transmitter with an ultrasonic sensor measures distance to the water surface and sends data via RF to a receiver. The receiver converts distance to percentage, displays it on the LCD, and can sound a buzzer when full. Both transmitter and receiver use Arduino Nano and 9V battery power. The system is wireless up to ~100 meters and can be extended to automate pump control.
Parts used in the Water Level Indicator:
- Arduino Nano (transmitter)
- Arduino Nano (receiver)
- Ultrasonic sensor (HC-SR04 or similar)
- RF transmitter module
- RF receiver module
- 16×2 LCD module
- Preset (potentiometer) for LCD contrast
- Buzzer
- Antenna for RF transmitter
- 9V battery (for transmitter)
- 9V battery and switch (for receiver)
- Wires, breadboard or PCB/Zero PCB
Water Level Indicator Using Arduino
Wireless Water Level Indicator Using Ultrasonic sensor & Arduino is an amazing and very useful project. The objective of this project is to notify the user the amount of water that is present in the overhead water tank. This project can be further enhanced to control the water level in the tank by turning it ON, when the water level is LOW, and turning it OFF when the water level is HIGH. Thus, the Arduino water level indicator helps in preventing wastage of water in overhead tank. This project is wireless so, it is easy to install and it can work up to 100 meters.
In this project two circuits are used: a transmitter circuit and a receiver circuit. The transmitter circuit makes use of an ultrasonic sensor to measure the water level in terms of distance. This data is sent to the receiver circuit using RF communication. The water level is shown in terms of percentage on a 16×2 LCD module, which is connected to receiver circuit.
Working
In the project two circuits are used, First is the transmitter and second is the receiver. An Ultrasonic sensor is used in the transmitter circuit, which measures the distance of water level from the upper point of the bottle or Tank. The distance is measured in centimeters and sent to receiver circuit using RF communication.
Receiver circuit receives the data from transmitter circuit and converts it in terms of the percentage and shows on LCD.

Ultrasonic sensor has two openings, one is Trigger and the other is Echo. Trigger makes high frequency sound waves. These sound waves are passed through the tank from top to bottom. The sound waves hit the water and are reflected back in the form of Echo waves. The Echo opening receives the Echo waves. The water level sensor Arduino measures the time between Echo and Trigger. This traveled distance is directly proportional to the time.

Water Level Indicator Using Arduino – Video Demonstration
Arduino Water Level Indicator Circuit
In this project two circuits are used
- Transmitter Circuit – Transmitter circuit is shown in the figure below. Fig1, in this circuit an Ultrasonic sensor is connected to pin D9 and D10 pin of Arduino. Ultrasonic sensor is powered by Vcc and GND pin, these pins are connected to Vcc and GND pin of the Arduino. The measured data is transmitted by RF transmitter. RF transmitter’s data pin is connected to D4 pin of Arduino Nano. RF transmitter’s Vcc and GND pins are connected to Vcc and GND pins of the Arduino. In this transmitter circuit an Antenna is used which is connected to ANT pin of RF transmitter, whole circuit is powered by 9 volt battery. The battery is connected to Vin and GND pin of Arduino.
- Receiver Circuit – In the receiver Circuit, RF Receiver is used for receiving data from the transmitter. Data pin of RF Receiver is connected to D4 pin of Arduino. Water level is shown on LCD and LCD is connected to Arduino from pin D4 to D9. LCD is powered by Vcc and GND pin using the Arduino, the contrast of LCD is changed by moving the preset, which is connected to pin 3 of LCD. Receiver circuit is powered by a 9 Volt battery through a switch, which is connected between Vcc and GND pin of the Arduino. Circuit is shown in the figure below.
The above shown circuit diagrams of transmitter and receiver circuits are more than enough to make one by yourself on a breadboard or Zero PCB.
If you are good in PCB Etching, you can use the images given below.




Program/Code
Download – Program for Water Level Controller (Transmitter)
Download – Program for Water Level Controller (Receiver)
In this project two circuits are used, both are powered by Arduino Nano. RF module is used for the communication between the Transmitter and the Receiver circuits.
How to Attach Library
- Download the library file from the link https://github.com/sui77/rc-switch.
- Extract the file rc-switch-master.
- Copy the folder inside rc-switch-master folder.
- Paste the folder at location Documents> Arduino> library.
- Close the Arduino IDE software (if opend).
- Open the Arduino IDE.
- Click on file >Example
- If library is attached, you can see the rc-switch-master in Example list.
Transmitter
In the coding of the transmitter side, two header files are used. First is RCSwitch.h, which is used for RF transmitter and the second is Ultrasonic.h, which is used for the ultrasonic sensor.
Now pins of ultrasonic sensor is declared by the name ultrasonic in line 4, pin11 is Trig and pin10 is Echo. In the line 5 RCSwitch is declared for the transmitter by name “mySwitch”. In the line 7 an integer is declared by the name “i”.
In the void setup Transmitter is enabled by function “mySwitch.enableTransmit(4)”, where transmitter’s data pin is connected to pin D4 of the Arduino.
In the void loop, the distance is measured by function “ultrasonic.Ranging(CM)” and it is assigned in integer “I”, this distance is measured in centimeters.
In the line 15, the measured distance is transmitted by function “mySwitch.send(i, 24)”, where “i” is the distance and 24 is the bit format. After all “delay” of 100 milliseconds are used, which means Arduino sends the data after every 100 milliseconds.
Receiver
In the receiver side, two header files are used, The first is “RCSwitch.h” which is used for RF communication between the Transmitter and the Receiver and the second is “LiquidCrystal.h”, which is used for LCD display.
In the line 4, Arduino pins are declared, which are connected to LCD. Total 6 pins are connected to Arduino that are D4, D5, D6, D7, D8, D9. In the line 5, “RCSwitch” is declared by the name “mySwitch”.
In the line 7, a float is declared by the name “level”, which shows the water level and in the line 9 and 10 two integers are declared by name “Hval” and “Lval” where, “Hval” is the upper value of water level (distance from ultrasonic sensor) and “Lval” is the Lower value of water level (distance from ultrasonic sensor). After all pin of buzzer is declared by integer “BUZZER” where, 10 is the D10 PIN of Arduino.
In the void setup RF Receiver is enabled by function “mySwitch.enableReceiver(0)”, where 0 is the interrupt pin (INT0) which is D2 pin of Arduino.
In the line 16, LCD begins by function “lcd.begin(16, 2)”, and in line 17, “lcd.print” is used for showing “WATER LEVEL INDI” in the first row of LCD.
In the line 19, “pinMode(BUZZER, OUTPUT)” declares the BUZZER pin as OUTPUT.
In the “void loop()” in the begening “if (mySwitch.available())” is used, that means if any data is received from RF Receiver, the program come in the loop. In the line 25, data coming from RF Receiver is decoded by function “mySwitch.getRecivedValue” and saved in a float “level”.
In the line 27 and 28 the “level” is processed and converted into the percentage, by using some mathematical expression. In line 30, “If” condition is used for limitation of percentage.
In the line 32, 33, 34, 35 the level is print on the LCD and in the line 37 “mySwitch.reset.Available()” function is used for resetting the RF module.
In the end of the code, “If” condition is used for switching on the buzzer, if level become more then 99 percentage.
Source: Water Level Indicator Using Arduino & Ultrasonic Sensor
- How does the transmitter measure water level?
The ultrasonic sensor measures distance from the sensor to the water by timing Trigger and Echo pulses and reports distance in centimeters. - How is data sent from transmitter to receiver?
Measured distance is sent wirelessly using an RF transmitter module connected to the Arduino. - What does the receiver do with received data?
The receiver decodes RF data, converts distance to percentage, displays it on the 16×2 LCD, and can trigger a buzzer when full. - Which Arduino pins are used for the ultrasonic sensor on transmitter?
The ultrasonic sensor uses D9 and D10 pins on the Arduino as described. - Which pin is used for RF transmission and reception?
The RF transmitter data pin is on D4 of the transmitter Arduino; the RF receiver data pin connects to D4 of the receiver Arduino and receiver is enabled on interrupt pin D2. - How is the LCD connected on the receiver?
The 16×2 LCD is connected to Arduino pins D4 through D9 and its contrast is adjusted by a preset on pin 3 of the LCD. - What power sources are used for the circuits?
Both transmitter and receiver circuits are powered by 9V batteries connected to Vin and GND of the Arduino; the receiver battery is switched via a switch. - What libraries are required for the project?
The project uses the rc-switch library for RF communication and Ultrasonic.h for the ultrasonic sensor on the transmitter; the receiver uses LiquidCrystal.h and rc-switch. - How often is distance data transmitted?
The transmitter sends the measured distance approximately every 100 milliseconds (delay 100 ms between sends). - When does the buzzer activate?
The buzzer is switched on when the calculated water level percentage becomes more than 99 percent.



