Open Flow Meter

An Arduino powered flow-meter for use in geography river studies and environmental monitoring projects

Public Chat
Similar projects worth following
Update: 31/05/2024
I think the best kind of future flow meter for my use case is this project: Build this into a phone app and then get rid of the need for hardware.

Build a flow meter to measure water speed in rivers.The current build shows water speed in Km/h and costs about 60USD for all the parts (a typical off the shelf unit will cost about USD1000).

Flow meters are great tools for river surveys but are often prohibitively expensive, especially for secondary schools and field studies centres. LabQuest has somewhat of a monopoly on these sensors for use in schools and we think its high time there is an easy to make, low cost and hackable solution for these tools. Here I'm using an Auduino, plus touch screen shield and a 'flow volume sensor' designed for measuring flow volume in plumbing.

Field Test:
They are multiplying:

The build 20th of January 2021:

Improvements since the DN50 build: Internal battery housing, on/off switch, aviation connector, DN80 sensor, detachable sensor pole.

Here is one of the earlier designs using an DN50 sensor.

I have switched to using a DN80 sensor, I have created a new Arduino housing that now has an on/off switch, an aviation connector for the main cable and internal battery housing. I'm working to change the firmware to read MPS instead of Km/H.
After that I will do some tweaking comparing the readings with a purpose build flow meter to increase the accuracy. If all of these steps go as planned then I will complete the build instructions and finish this project.


Wiring diagram for the Arduino housing and battery box.

Adobe Portable Document Format - 468.35 kB - 09/23/2022 at 11:35



Parts list excluding 3D printed parts, wood screws and internal wires.

JPEG Image - 2.17 MB - 06/23/2021 at 09:02


Arduino hosing n battery 2.FCStd

FreeCAD Auduino Housing

fcstd - 6.96 MB - 12/17/2020 at 05:57


DN80 mount.FCStd

FreeCAD Sensor links

fcstd - 4.40 MB - 12/17/2020 at 05:56


  • 1 × DN80 water sensor 3"
  • 1 × Arduino Uno R3 (clones also work)
  • 1 × HiLetgo 2.4 Inch TFT LCD Display Shield Touch Panel ILI9341 240X320 for Arduino UNO MEGA
  • 1 × length of 3 strand wire (we used silicon copper wire as its really soft and flexible)
  • 1 × 9V battery

View all 19 components

  • Update wiring diagram

    Eben09/23/2022 at 11:37 0 comments

    Update wiring diagram after finding a few errors when building some new units this month.

  • I won the Hackaday Earth Day Challenge 2021

    Eben06/11/2021 at 02:04 0 comments

    Thanks Hackaday for awarding my project the winner of the Earth Day Challenge 2021

  • Added meters per second readout

    Eben03/29/2021 at 11:27 0 comments

    The new calibrated version of the skit file is ready for download under V5 from our Gitlab.
    We added meters per second to the display readout so now you can see both Kph and M/S.

  • Calibration

    Eben03/27/2021 at 15:32 0 comments

    Calibration with a commercially made flow meter:

    In the image above we have the commercial flow meter on the left, a m/s to km/h conversion in the centre and the open flow meter on the right.

    At first the open flow meter was providing a reading 4 times faster than the reading from the commercial unit, but after adjusting some settings both units give quite similar readings. Additional work needs to be done, however so far this will be more than good enough for GCSE, A Level and IB students usage.

  • Battery Lid

    Eben12/29/2020 at 08:31 0 comments

    The battery lid now fits better and the new version has been uploaded to: Make sure to print the new version as the old version did not fit!

  • 24 hour submersion test

    Eben12/25/2020 at 04:53 0 comments

    Here I leave the sensor in water for 24 hours to see if the silicon waterproofing of the electronics works.

    When I switched on the control box and turned the prop, it still worked as before, so I'm happy enough with this waterproofing technique for now.

  • First complete unit

    Eben12/24/2020 at 15:03 0 comments

    Here is the first fully assembled unit:

    It features an: on/off switch, aviation connector, rechargeable battery, configurable intervals for taking speed tests and has a quick detach system from the ranging poll (this means we can carry less on field trips by using the range poll to hold the flow meter).

  • Sensor testing

    Eben12/19/2020 at 03:50 0 comments

    I tested a range of different pipe sensors at the start of this project back in April 2019:

    I wanted to use the small clear sensor shown on the far right, however it could not measure slow moving water. The first sensor I built that was used for field work in a test was using the DN50 (the large black sensor, centre left of the image). But it still did not perform well in slow moving water.
    The current build is now using the DN80, the one on the far left of the above image.

View all 8 project logs

  • 1
    Print all the 3D printed parts

    Download the parts from here:

    After printing, clean up the prints and make sure everything fits together.

  • 2
    Asemble the sensor end with the DN80

    Unscrew the black box from the top of the sensor by removing the two fillips head screws.

    Use a knife blade to carefully pry open the small black box with the 3 wires coming out of it. There maybe some black silicon round the edge where the wires enter the box.

    Get the long 3 strand cable that your going to use to connect your sensor to the Arduino and prepare the ends for soldering.

    Take a photo of the sensor PCB before you unsolder the wires, now use a soldering ion to carefully unsolder the three wires leading from the small PCB and sensor.
    (My sensor had a black, red and yellow wires and my new cable also had black, red and yellow wires inside).

    Important: put the cable through the 3d printed plastic housing before soldering the PCB onto the wire and and add some layers of Shrink rap to the cable.

    Solder your new cable to the sensor PCB the same as the wires were soldered before: black to black, red to red and yellow to yellow. If your wires are a different colour then just make a note of the colour difference.

    Now cover the PCB in silicon and fill the black plastic box with silicon too. Then put the sensor back inside the box and squeeze it shut. Now screw it back onto the rest of the DN80.

    Pull the 3D printed cover down on top of the DN80 and zip-tie it in place, now leave it until the silicon is dry.

    Slide the shrink rap tubes down to cover the wire all the way down to the black sensor box and use hot air to shrink them in 3 layers on top of each other.

    Take the 2 M3 nuts and bolts and add the cable gripper, this stops the wire getting pulled out of the sensor and braking or braking the waterproofing.

    Solder the wire end of the aviation connector to the main cable. I put pin 1 as red, pin 2 as yellow and pin 3 as black. Put the connector back together.

  • 3
    Build the battery box & Aduino hosing

    Download the wiring diagram from the files section.

    Solder the power wires to the bottom of the Arduino first. Then put the TFT display onto the Arduino.

    Put the housing side of the aviation connector into the housing and lock it in place with the screw thread.

    Put the power switch into the housing as well (it will simply snap into place).

    Put the TFT display and Arduino into the lower housing being careful to find a good path for the power wires.

    Put the battery holder into the lower housing (it will be loose until you put the upper housing in place and screw it down).

    Now solder the wires together as shown in the wiring diagram.

    Check all your connections.

    Put the upper housing on top and move the battery holder in place so everything lines up.

    Screw the top down with 6 wood screws.

    Put in a battery.

    Link the sensor up and power on the unit.

View all 3 instructions

Enjoy this project?



alexoh wrote 05/29/2024 at 09:53 point

With regards and respect
and thanks for the good project that you posted,
I had a question. I would appreciate it if you could answer.
I uploaded the program on the required hardware and ran it well, but unfortunately, before connecting to the sensor, the Arduino got some numbers by shaking it. It is displayed on the flow rate without conecting to sensor!

It shows a very high current flowrate just by shaking the arduino board itself before connecting to the sensor which makes me a little worried for the accuracy of the work does it throw this error when connected to the sensor?

  Are you sure? yes | no

Eben wrote 05/29/2024 at 10:32 point

I have not seen this behaviour before. I have lots of these arduino's connected to shields, with no sensor they just show 0.00 for me.

  Are you sure? yes | no

rpahydro wrote 11/26/2023 at 15:04 point

Great design and appreciate you sharing the information. It appears from the sketch that you are taking 10 one second readings and then averaging them. Did you find a significant variation between the one second readings? Thanks.

  Are you sure? yes | no

Eben wrote 05/29/2024 at 10:34 point

Sorry I did not write the code. I just did the hardware design. I would like to change the code to show 3 decimal places instead of two. But have never managed to work out how to do it!

  Are you sure? yes | no

lefsky wrote 08/06/2021 at 20:33 point

I worked with the good folks at Colorado State University's Hydraulics Lab ( on the calibration of a series of flow velocity sensors including the DN-80 sensor used for this project. We ran their fume from near-still water conditions up to 0.4 m/s flow rate and hung a Marsh McBirney flow meter along with the DN80 for an open channel calibration. The lowest stream velocity the DN-80 could record using a 5 sec integration time was 0.025 m/s but above that limit, a linear regression between the DN80 and MM estimates had an r2 of 0.9955, with a bias of -0.004 m/s and RMSE (aka standard deviation of residuals) of 0.009 m/s. Will try to get larger range of observations in the future but this is a very good start, IMHO.  Photo of DN80 in the flume is at

  Are you sure? yes | no

Eben wrote 10/15/2021 at 04:34 point

That's really interesting, thanks for telling me about your work and do update on any further testing or developments.

Also Sorry! For some reason I did not receive the email I normally get when people comment, so my reply is months late!

  Are you sure? yes | no

Jules wrote 02/23/2024 at 19:57 point

This is really cool - Can the results of the rest of this project be found anywhere?

  Are you sure? yes | no

Eben wrote 05/29/2024 at 10:36 point

Rest of the project?

  Are you sure? yes | no

Jules wrote 05/29/2024 at 18:40 point

Sorry I'm new to this platform, I meant that in response to @lefsky 's post about using this sensor along with others at CSU's Hydraulics lab

  Are you sure? yes | no

flavio pardo wrote 03/09/2024 at 13:22 point

hi, is there any way we could get that calibration? It would be awesome! Thanks 

  Are you sure? yes | no

Eben wrote 05/29/2024 at 10:36 point

The calibration was hard coded into the skit already for the DN-80.

  Are you sure? yes | no

lefsky wrote 06/23/2021 at 17:09 point

Wow- this is great. So many issues I hadn't thought of! The one thing I could still use is any suggestions on soldering to the existing solder pads as I've never done this before. Is it done with a plain soldering iron or some other tool? What temperature did you use?

Thanks so much for the help.

  Are you sure? yes | no

Eben wrote 06/24/2021 at 01:48 point

You can look round YouTube for tutorials on soldering, there are many. Any soldering ion that is small enough to independently melt the solder on each pin will be ok. Better to practice on something else first but it's not that difficult. I used a pare of 'helping hands' to hold the wires and PCB of the sensor as that is very small.

  Are you sure? yes | no

lefsky wrote 06/20/2021 at 22:27 point

I'm assembling the flow meter now but I have a number of questions that I can't find the answer to. But one of those questions is: is there any documentation other than the youtube videos?

  Are you sure? yes | no

Eben wrote 06/21/2021 at 02:17 point

Um! I keep meaning to sit down and write instructions on assembly. But I have not done it yet!
Do you have all the printed parts?
I think they fit together quite easily, but I need to upload the wiring diagram, I'm sure without that it will be very hard to complete!

  Are you sure? yes | no

lefsky wrote 06/21/2021 at 20:25 point

I have completed the sensor assembly and have put together the Arduino/touch screen combination which is running the program fine. I just need to attach the two. The info I need is: 1) better information on the switch and aviation connector so I can purchase the correct ones, 2) the wiring diagram, 3) suggestions on how to best solder the wires from the aviator connector to the touchpad screen (like where to apply heat)

Edit: Also could use information on what the smallest piece (rectangular with two complete holes and a semicircle take out of it)

  Are you sure? yes | no

Eben wrote 06/22/2021 at 04:53 point

OK, I will see what I can do, I will get a full wiring diagram made in the next few days and upload it.
I will post the dimensions of the connectors, switch and battery mount I use along with photos.
That smallest pace is for the sensor end, it holds the wire in place with two 3mm bolts. Without this the wire would get pulled out of the sensor and or the movement may let water inside.

  Are you sure? yes | no

Eben wrote 06/23/2021 at 09:24 point

Have a look, I added some files, updated the components list and wrote some build instructions. Let me know how it goes and do send me a photo when you finished building it. Good luck.

  Are you sure? yes | no

Dan Maloney wrote 12/18/2020 at 22:16 point

Yes, my sensor is a smaller version made for 3/4" pipe, and I calibrated it while it was plumbed up to such pipe. In my case, the exact volume needs to be known, but it seems like the number needs to be more relative in your application.

  Are you sure? yes | no

Dan Maloney wrote 12/17/2020 at 17:55 point

I'm curious how you calibrated the flow sensor. I'm working on a similar project ( and managed to get my sensor calibrated gravimetrically. Wondering what method you used.

  Are you sure? yes | no

Eben wrote 12/18/2020 at 13:03 point

Thanks for sharing. Am I right that your system is to measure flow volume (litres of water pumped per unit of time)?

I'm working on a sensor that can be put on a poll to measure flow speed in a river. In your case it should be easier as the pipe sensor you have is designed for measuring volume. I brought quite a few different pipe sensors to test out but settled on the largest one I could find as that was able to give better readings in slow moving water.
I'm not aware of anything to calibrate on the sensor. It just pulses once for every rotation of the prop and you can use that combined with knowing the width of the pipe to measure how much water passes through.
I will update my project here once I get the hardware sorted out a bit more about the accuracy of the unit. However for my use case it dose not need to be very accurate, it's just for teaching children how to do data collection in the field (the data they collect is not going to be used for anything).

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates