Summary of Microcontroller Projects: Sonar Water-Level Meter
Three-fourths of Earth is water but less than 0.01% is accessible fresh surface water, so managing it is vital. The article describes a low-cost (< Rs. 2500) contactless wireless sonar water-level indicator using an HC-SR04 ultrasonic sensor and 433 MHz RF link, with transmitter and receiver units built around ATmega328P MCUs (Arduino bootloader). It measures up to 4 m with ~5 mm accuracy, displays level on an LCD, and includes a signal-stall counter and optional pump control outputs. PCB layouts, source code, and libraries are provided for construction and testing.
Parts used in the Sonar Water-Level Meter:
- ATmega328P microcontroller (with Arduino Uno bootloader) — transmitter (IC1)
- ATmega328P microcontroller (with Arduino Uno bootloader) — receiver (IC3)
- HC-SR04 ultrasonic ranging module (CON1)
- 433 MHz transmitter module (TX1)
- 433 MHz receiver module (RX1)
- 7805 voltage regulators (IC2 and IC4)
- 4×16 alphanumeric LCD display (LCD1)
- LED (LED2) for signal indication
- Long spiral antenna (transmitter)
- Small spiral antennae (for best radiation orientation)
- PCB single-side boards for transmitter and receiver
- Relay and contactors (optional, connected to spare ATmega328P pins)
- Miscellaneous components: resistors, capacitors, connectors, headers, power supply components

Three-fourths of the earth is water, out of which 97 per cent is saline (in oceans, seas and groundwater). The remaining 2.5 per cent to 2.75 per cent is fresh water, out of which 1.75 per cent to two per cent is frozen in glaciers, ice and snow. Fresh groundwater and soil moisture constitutes only 0.7 per cent to 0.8 per cent. Less than 0.01 per cent, available as surface water in lakes, swamps and rivers, is available to us as drinking water. It is therefore imperative that systems are in place for managing this precious and scarce resource.
Water-level indicators for water-storage tanks are mostly mechanical contraptions. Steel wires, pulleys and rails get rusted as these are in continuous contact with water and air, resulting in unreliable operation. Contactless sonar-level metres are there but their high cost is a deterrent.

In this article, a sonar contactless, wireless water-level indicator, which can be fabricated for less than Rs. 2500, has been described. It is capable of measuring water levels up to four metres with an accuracy of less than 5mm.

Circuit and working
The water-level indicator has two units: transmitter unit and receiver unit. The circuit diagram of the transmitter unit is shown in Fig. 1. It is built around ATmega328P microcontroller (MCU) (IC1) with Arduino Uno bootloader, sonar sensor HC-SR04 connected at CON1, 433MHz transmitter (TX1), voltage regulator 7805 (IC2) and a few other components. a long spiral antenna is used for enhancement of its range.

Attach the contactless sonar sensor at a strategic location on the tank so that it can always get the reflected signal from the water surface. The best place would be at the centre of a circular tank’s lid on top, or at the intersection of the diagonals of a rectangular tank’s top. The calculated tank level will then be transmitted with a coded authorisation to the receiver unit.
An ultrasonic ranging module provides 20mm to 5000mm non-contact measurement facility. Ranging accuracy is 3mm and aperture angle is 15°. Since we are measuring the level in centimetres in the form of an integer, our accuracy level is maximum 5mm. Even a 1cm level change will be seen very clearly, as every second it takes eight readings, which are then averaged out to get better accuracy.
Circuit diagram of the receiver unit is shown in Fig. 2. It is built around ATmega328P MCU (IC3) with Arduino Uno bootloader, voltage regulator 7805 (IC4), 4×16 alphanumeric display (LCD1), 433MHz receiver (RX1) and a few other components. The receiver checks the code word sent by the transmitter unit and displays the tank level on the LCD.
If the transmitter stalls or its power supply gets interrupted, there is no way for the receiver to find out that the incoming signal is no longer valid. To circumvent this problem, a counter has been provided on the right side of the LCD display. If the counter does not move, or it stops, it means that the incoming signal has stalled. Blinking of LED2 connected on pin 19 will stop, too.
Control relay and contactors can be connected on spare pins of ATmega328P, which finally controls the running of the water pump. Since there is no physical contact used in the sensory system, it will be operational without any interruption.
Download PCB and component layout PDFs: click here
Software
Software comprises one remote_sonar_water_level_transmitter.ino file and one remote_sonar_water_level_receiver.ino file, besides some header files of Arduino. All are packed in the resource directory. Add these libraries to Arduino and upload the two files in the respective transmitter and receiver units.
Download source code: click here
Construction and testing
An actual-size, single-side PCB of the transmitter unit is shown in Fig. 3 and its component layout in Fig. 4. An actual-size, single-side PCB of the receiver unit is shown in Fig. 5 and its component layout in Fig. 6.
After assembling the two units, switch on the power supply of both the units. If the receiver receives the transmitted signal, LED2 will start blinking. The two small digit counters on the right top of the LCD will start changing and the water level (in centimetres) will show on the left-top position. Keep the small spiral antennae in vertical position to have the best radiation.
Source: Microcontroller Projects: Sonar Water-Level Meter
- What is the maximum measurable water level?
The device can measure water levels up to four metres (5000 mm). - How accurate is the sonar water-level indicator?
Ranging accuracy is 3 mm and practical measurement accuracy is up to 5 mm as described. - What components form the transmitter unit?
The transmitter uses an ATmega328P MCU, HC-SR04 sonar module, 433 MHz transmitter, 7805 regulator, antenna and supporting components. - What components form the receiver unit?
The receiver uses an ATmega328P MCU, 433 MHz receiver, 4×16 LCD display, 7805 regulator, LED indicator and supporting components. - How does the system indicate a stalled transmitter or lost signal?
A counter on the right side of the LCD stops updating and LED2 blinking will stop if the incoming signal stalls. - Can the system control a water pump?
Yes, control relay and contactors can be connected to spare ATmega328P pins to control the pump. - Where should the sonar sensor be mounted on the tank?
Mount at the centre of a circular tank lid or at the intersection of diagonals of a rectangular tank top for reliable reflections. - How often are level readings taken and processed?
The system takes eight readings every second and averages them to improve accuracy. - Is the system contactless and resistant to rust issues of mechanical indicators?
Yes, it is contactless (ultrasonic) so it avoids rust and mechanical wear of contact-based systems.
