Measuring Water Level With Ultrasonic Sensor





Introduction: Measuring Water Level With Ultrasonic Sensor

About: I am an engineer and a maker who loves technology challenges.

For my next big project (automated plant watering system) I was in need of having water level meter. I was choosing from contact and contactless methods of measuring fluid level in tank. Contact methods are resistive method, capacitive and inductive methods (magnetostriction). Most often contactless methods are optical method, radar and ultrasonic method. Because we didn’t want to affect the quality of water in tank we implement one of the contactless methods.

What method to choose? All contactless methods work on same principle: we send a signal and we measure time that send signal needs to come back. Optical method uses optical signals. Optical method can be very accurate, but sensors can get dirty over time and we are not able to make measurement at all. Radar method uses radar signals. Because of that (radar signals are high RF signals) it is not suitable for DIY. Ultrasonic method is similar to radar. Instead of radar wave we are sending ultrasonic wave. This procedure is ideal for our needs because ultrasonic sensors are accessible and low priced.

We made water level meter with Arduino platform (we used Arduino Mega2560, but any arduino will work).

For damage occurred during reproduction I am not hold responsible.

Step 1: Parts and Materials


- Arduino (Uno, Mega 2560,...)

- ultrasonic sensor HC SR04


- wires for connecting censor to Arduino

- acrylic glass for housing (optional)

Step 2: Theory Behind Ultrasonic Level Sensor

First, let us talk about some theory behind ultrasonic method of fluid lever measuring. The idea behind all contactless methods is to measure distance between transceiver and fluid. As said before, we transmit short ultrasonic pulse and we measure travel time of that pulse from transceiver to liquid and back to transceiver. Ultrasonic pulse will bounce from liquid level since because change of density of ultrasonic pulse travel medium (ultrasonic pulse first travel through air and bounce of liquid with higher density than air). Because water has higher density, majority of pulse will bounce off.

Two disadvantages exist with ultrasonic method:

- 1st: because of pulse length there is small window that we cannot receive pulse with transceiver because transceiver is transmitting. This problem is simple to solve: we placed our sensor higher from maximum water level for few centimeters allowing receiver to start receiving.

- 2nd: because of the beam width we are limited with tank diameter. If tank diameter is too small, signal could bounce of tank’s walls and could cause false readings.

Before installing sensor in tank we tested it for those two disadvantages. We established that we could have stable measurements from minimum distance of 5 cm from sensor. That means, we must install our sensor 5 cm higher then maximum water level. We also established that we didn’t have any problems with signal bouncing from tank’s walls with 7.5 cm diameter tank (tank’s length was 0.5 m). We complied these two results at construction of water tank and at the setting up of ultrasonic sensor.

Step 3: Water Tank

Watering system will use free fall for water feeding. Because of that, water tank needs to be lifted up from floor level. We made water tank from drainpipe 1m in length and 16 cm in diameter. We divided pipe into two sections. Lover section (first 50 cm) will house valves. Upper section will serve as water tank. On the upper section we are using pipe end cap as water tank cover. On end cap we mounted ultrasonic sensor. For larger stability we added wooden base, which will also house electronics and battery pack.

Here comes the mathematical specification of the tank. This part is essential, because we want to codify fluid height measurement in %. Starting point of codifying is measurement alone. Measurement can be between 6 and 56 cm (6 cm offset). This is codified into 0 to 100 %. It comes down to simple cross calculus.

We chose homogeneous tank because of easier calculations of volume (we are using pipe – cylindrical shape). Diameter of pipe is the same through the length of the pipe. We have also made equation whit which we can measure volume of water still in the tank. We didn’t implement this because there was no need for it. For now!

Step 4: Ultrasonic Sensor, Schematics

We soldered wires to ultrasonic sensor (we used FTP or UTP cable; it can be one of them). Then we installed sensor in small custom made housing from acrylic glass. Casing with sensor in it was sealed off and mounted on tank’s cover. Housing was a bit improvised and it is not essential. Because of that, there are no picture and no plans for it. You can figure it out somehow by yourself.

We connected sensor on Arduino board following schematic in picture.

Step 5: Program

We converted program for measuring distance to program for measuring water level. Program for measuring distance is not of our making but was found on internet in this tutorial we cannot find anymore.

First we transmit signal and then we wait and measure time between transmitted signal and received signal. This time is then converted to centimeter and centimeters are then converted to % and send via serial connection to computer. We could also calculate water volume that is still in the tank.

Step 6: Testing

Because in the future we wish to implement automatic watering system with two stages regulator, we must measure tank’s flow characteristic. Question is why we must do that? You see, outgoing flow in the tank depends on hydrostatic pressure inside of the tank. With basic knowledge of physics anybody see that hydrostatic pressure id decreasing with falling water level in tank. Because we want to feed plants every time with same amount of water, we must adjust valve opening time. With tank’s flow characteristic we can calculate how much water can flow out of tank at any time and with that we can determine how long valve must stay in open position.

Also we wanted to test our level meter. We filled up water tank to maximum height. Then we opened a valve and let all the water run out. Because drain pipe is mounted to prevent sucking out sediments, tank was emptied to 2%. In picture is presented response to step function. From this response we can approximate function on which water level is changing (with Excel, Matlab, or other powerful mathematical tool).

We can conclude that sensor works in accordance with expectations.

Step 7: What's Next?

Implemented water level meter serves as a concept of principle. If we would want to use this meter in DIY project and in semi industrial or other applications we would have to make test of sensor endurance and resistance to water splattering. After that test we would be able to see if sensor is appropriate for use in DIY projects or any other environments. Right now I can only say that sensor is working fine within this short period of time.

Because sensor is measuring water level with contactless method water can stay unspoiled. Implemented meter is also cheap and accessible and because of this it is very suitable for DIY.

Please feel free to comment and let me know if I made any grammar mistakes (english is not my first language).

3 People Made This Project!


  • Clocks Contest

    Clocks Contest
  • Water Contest

    Water Contest
  • Oil Contest

    Oil Contest

52 Discussions

What is the maximum depth that we can measure using this sensor ?


Question 4 months ago

Using Port : COM17

Using Programmer : arduino

Overriding Baud Rate : 115200

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x68

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x68

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x68

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x68

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x68

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x68

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x68

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x68

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x68

avrdude: stk500_recv(): programmer is not responding

avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x68

avrdude done.

I facing this kinda error. Help me. Thanks.

Excellent idea! I suspect the sensors could be covered with food-wrap film to splash proof them without interfering too much with their operation.
I'll be trying it!

7 replies

Hmm... Food foil could work but I am a bit skeptical! Ultrasonic (or ultrasound) wave are same as sound just frequency is to high for you to hear it. Ultrasonic waves are mechanical waves of presure. Because of that, foil can interupt with measurment! This is why radar method is better in industry because it use high frequency electromagnetic waves which can penetrate some materials and waterproofing a transceiver is not so hard.

I was thinking of the thin plastic film ("cling film" in the UK).
It's very thin and flexible, and I think it would vibrate with the ultrasound to transmit the vibrations if it was stretched over the sensors.
The calibration may need some adjustment, but I think it might work.
I'll try it and report back. :)

Let me know about the results! I am very curious if this foil you are talking about will work! =)

It does. :)
I tried it.... You need stretch the film over each sensor individually to avoid vibration transfer between the two, but otherwise it seems fine.
I just stretched film across the front of the sensors, folded it back along the sensor bodies and held it in place with rubber bands.
I couldn't see any difference in readings between the sensor with or without the film.
I suspect it would work with thin polythene as well, but I haven't tried that yet.

Waw thats nice.. That was something I was also looking for. Since you already tried it, I have no worries. Out of a curiosity can you find any difference in result after wrapping it in film.

I made a similar one at my home water tank. but at summer when water getting vaporized and it getting on the sensor.

Very nice instructable...

If the cling wrap method makes the sensors waterproof of sorts. Will definitely implement it in the water storage tank at my home. But I don't think it is a possibility..


1 year ago

I want to measure the fluid level of sewage in a tank. Will the sensor work if glued to the outside of the top of the tank? If it will, does the thickness of the tank wall make a difference? The tank is 9mm thick plastic.


1 reply

BoydG1 it wont work, plastic being much more dense material than air, the sound signal will bounce right back at the sensor, and then the readings will be always 0, for this to work, you would need to cut a hole in the sewage tank (on the top) and install the sensor there. And further more, you got to check the specs of your sensor for the max distance it reads.

What will be the max depth this sensor can measure??

1 reply

Can you suggest any sensor which can measure a depth 6m and another sensor for 100m


1 year ago

Wow real nice instructable, thanks for sharing and keep up the good work! :)


If I talk about Level sensing application, what is the minimum resolution (in cm) of water level difference ,we can measure

2 replies

That would depend in part on the frequency of the ultrasound. It's hard to get really clipped edges with the chirps, so accuracy closer than 1 lamda (wavelength) is tough. Probably 3 lamda is easily achievable. So at 60,000 Hz and if speed of sound is 300m/s you should be able to get accuracy of around a cm.

Two other factors come into play: Speed of sound is temperture dependent being roughly linear with kelvin temperature. So 1% increase for every 3 degrees C increase. Speed of sound is also dependent on the molecular weight of the gas, being higher in lighter gasses. Since warm air can hold more moisture than cold air, and water has a molecular weight of 18 compared to air's ~30, this will increase the earlier effect.

This may also have an effect if you are working in an environment that generates methane (monitoring fluid level in bio-reactor) or CO2 (compost monitoring) However if you are measuring differences, then most of these effects will largely cancel out.


I built a similar hydroponics system with an HC-SR04 to measure the fluid level of the tank that housed the plant roots. It worked great other the level seemed to rise and fall with varying temperature. Even at a constant temp, them measurements were sometimes +/- 1 of the actual level. I tried using an averaging algorithm to even out the numbers but still saw these non-linear values. Anyone have any experience with getting stable and accurate fluid level readings?

1 reply

Use a temperature sensor to detect the temperature and add this variable to your algorithm to prevent fluctuations in water level