Earth Day: Reading Liquid Flow Rate Using a Water Flow Meter and Arduino.April 10, 2012

water flow

This is part of my Arduino Controlled PC Liquid Cooling Information Center I have been working on and I thought I would share it here since there have been a few threads on and on how to read water flow rate in liters per hour using the Water Flow Sensor . It uses a simple rotating wheel that pulses a hall effect sensor. By reading these pulses and implementing a little math, we can read the liquids flow rate accurate to within 3%. The threads are simple G1/2 so finding barbed ends will not be that hard.

You will need

Wiring up the Water Flow Sensor is pretty simple. There are 3 wires: Black, Red, and Yellow.

  • Black to the Seeeduino's ground pin
  • Red to Seeeduino's 5v pin
  • The yellow wire will need to be connected to a 10k pull up resistor.and then to pin 2 on the Seeeduino.

Here is a fritzing diagram I made to show you how to wire it all up.

Once you have it wired up you will need to upload the following code to your Seeeduino. Once it is uploaded and you have some fluid flowing through the Water Flow Sensor, you can open the serial monitor and it will display the flow rate, refreshing every second.

// reading liquid flow rate using Seeeduino and Water Flow Sensor from
// Code adapted by Charles Gantt from PC Fan RPM code written by Crenn
// http:/

volatile int NbTopsFan; //measuring the rising edges of the signal
int Calc;                               
int hallsensor = 2;    //The pin location of the sensor

void rpm ()     //This is the function that the interupt calls 
  NbTopsFan++;  //This function measures the rising and falling edge of the 

hall effect sensors signal
// The setup() method runs once, when the sketch starts
void setup() //
  pinMode(hallsensor, INPUT); //initializes digital pin 2 as an input
  Serial.begin(9600); //This is the setup function where the serial port is 

  attachInterrupt(0, rpm, RISING); //and the interrupt is attached
// the loop() method runs over and over again,
// as long as the Arduino has power
void loop ()    
  NbTopsFan = 0;	//Set NbTops to 0 ready for calculations
  sei();		//Enables interrupts
  delay (1000);	//Wait 1 second
  cli();		//Disable interrupts
  Calc = (NbTopsFan * 60 / 7.5); //(Pulse frequency x 60) / 7.5Q, = flow rate 

in L/hour 
  Serial.print (Calc, DEC); //Prints the number calculated above
  Serial.print (" L/hour\r\n"); //Prints "L/hour" and returns a  new line

Via and Source: TheMakersWorkBench

8 thoughts on “Earth Day: Reading Liquid Flow Rate Using a Water Flow Meter and Arduino.”

  • Flow Meter

    You got so many points here, that's why i love reading your blog. Thank you so much!

  • Kellen K


    Thanks for sharing the code. I'm a newbie to arduino and i've tried out a few things already. This example doesn't work for me, it doesn't seem to be getting a signal from the flow sensor. Any pointers as to why?


    • Cooking Hacks

      There can be many causes about it. We can suggest to post in our forum to get technical support. Maybe a step was missed...


  • basak dogan

    Thank for sharing this.Which pump did you use.Can you write the model name of it.

  • Chuck Malloch

    I'm trying to figure out which flow sensor is appropriate for US garden-hose thread, which Wikipedia says is 1-1/16" diameter. But pipes are often measured by inside diameter. Are you in the US and does the 1/2" flow sensor fit US standard garden hose? Thanks!

    • Cooking Hacks

      There are several diameters to use in each application. I suggest you to know the exact pipe diameter before.


Leave a Reply