Advertisement
arduino water flow sensor project

Working with Water Flow Sensors & Arduino

arduino water flow sensor project

Effective water management involves supplying water according to the real requirement, and thus measuring water is very essential step in water management systems. There are many water flow measurement techniques as well as different types of water flow meters used to measure the volume of water flow in pipelines but these all are too costly. This article describes ideas for design and development of low cost automatic water flow meters, with the help of readily-available and low-cost water flow sensors.

YF-S201 Hall-Effect Water Flow Sensor

Accurate flow measurement is an essential step both in the terms of qualitative and economic points of view. Flow meters have proven excellent devices for measuring water flow, and now it is very easy to build a water management system using the renowned water flow sensor YF-S201. This sensor sits in line with the water line and contains a pinwheel sensor to measure how much water has moved through it. There is an integrated magnetic Hall-Effect sensor that outputs an electrical pulse with every revolution. The “YFS201 Hall Effect Water Flow Sensor” comes with three wires: Red/VCC (5-24V DC Input), Black/GND (0V) and Yellow/OUT (Pulse Output). By counting the pulses from the output of the sensor, we can easily calculate the water flow rate (in litre/hour – L/hr) using a suitable conversion formula.

yf-s201

yf-s201 water flow sensor

Hardware Hook Up

Connecting the water flow sensor to arduino requires minimal interconnection. Connect the VCC (Red) and GND (Black) wires of the water flow Sensor to the 5v and Gnd of Arduino, and link Pulse Output (Yellow) wire of the water flow sensor to Arduino’s digital pin 2. Note that the water flow sensor is not a power-hungry type; it draws a maximum of 15-20mA at 5V DC input!

yf-s201 arduino connection

Software Preparation

The Arduino Sketch (code) uses the external interrupt (int 0) on Arduino’s digital pin 2 (D2). This is used to read the output pulses coming from the water flow sensor. When Arduino detects the pulse, it immediately triggers the pulseCounter() function. This function then counts the total number of pulses detected (wanna know more about interrupts? http://playground.arduino.cc/Main/AVR).

/*
YF‐ S201 Water Flow Sensor
Water Flow Sensor output processed to read in litres/hour
Adaptation Courtesy: www.hobbytronics.co.uk
*/
volatile int flow_frequency; // Measures flow sensor pulses
unsigned int l_hour; // Calculated litres/hour
unsigned char flowsensor = 2; // Sensor Input
unsigned long currentTime;
unsigned long cloopTime;
void flow () // Interrupt function
{
   flow_frequency++;
}
void setup()
{
   pinMode(flowsensor, INPUT);
   digitalWrite(flowsensor, HIGH); // Optional Internal Pull-Up
   Serial.begin(9600);
   attachInterrupt(0, flow, RISING); // Setup Interrupt
   sei(); // Enable interrupts
   currentTime = millis();
   cloopTime = currentTime;
}
void loop ()
{
   currentTime = millis();
   // Every second, calculate and print litres/hour
   if(currentTime >= (cloopTime + 1000))
   {
      cloopTime = currentTime; // Updates cloopTime
      // Pulse frequency (Hz) = 7.5Q, Q is flow rate in L/min.
      l_hour = (flow_frequency * 60 / 7.5); // (Pulse frequency x 60 min) / 7.5Q = flowrate in L/hour
      flow_frequency = 0; // Reset Counter
      Serial.print(l_hour, DEC); // Print litres/hour
      Serial.println(" L/hour");
   }
}

Flow sensors typically output a series of pulses proportional to the instantaneous flow rate which means that to interpret them it is necessary to implement a simple frequency counter. Since this project uses a water flow sensor containing a Hall-Effect sensor that outputs a pulse rate proportional to flow rate, so not only is it a useful project in its own right but it also demonstrates a very useful technique that you can use in a wide range of projects that need to measure the rate at which something happens (an electronic wind instrument, for example).

Little Math Work

Now, have a look at the maths behind this Arduino Sketch. In our lab experiment, we used one YF-S201 water flow sensor bought from ebay (www.ebay.in ), and done the homework well with observed readings (±10 accuracy). In order to measure the quantity of water being passed in particular time through the water flow sensor it was first passed through the water flow sensor which was taken as input interface in the flow. Formulas are applied in order to measure the number of rotations/pulses in a minute of rotation.

Flow rate can be determined inferentially by different techniques like change in velocity or kinetic energy. Here we have determined flow rate by change in velocity of water. Velocity depends on the pressure that forces the through pipelines. As the pipe’s cross-sectional area is known and remains constant, the average velocity is an indication of the flow rate. The basis relationship for determining the liquid’s flow rate in such cases is Q=VxA, where Q is flow rate/total flow of water through the pipe, V is average velocity of the flow and A is the cross-sectional area of the pipe (viscosity, density and the friction of the liquid in contact with the pipe also influence the flow rate of water).

  • Pulse frequency (Hz) = 7.5Q, Q is flow rate in Litres/minute
  • Flow Rate (Litres/hour) = (Pulse frequency x 60 min) / 7.5Q

In other words:

  • Sensor Frequency (Hz) = 7.5 * Q (Liters/min)
  • Litres = Q * time elapsed (seconds) / 60 (seconds/minute)
  • Litres = (Frequency (Pulses/second) / 7.5) * time elapsed (seconds) / 60
  • Litres = Pulses / (7.5 * 60)

Behind The Curtain

WF-4

Really it was an awkward midnight experiment. We (me and my lab engineer diya missy) rolled up our sleeves and started the process with wet-hands. At first we made a simple construction comprised a rubber tube, plastic funnel, water flow sensor, and water bottles. Next we connected the water flow sensor’s output to the Arduino board (filled with the sketch) and allowed water flow through the water flow sensor at a steady rate of about 1 Litre/minute. Besides the Arduino’s serial monitor, we also used our DSO to measure pulse output from the water flow sensor. In that crude experiement, serial monitor displayed a rate of 56 Litre/hour (in lieu of the expected 60 Litre/hour rate)!

WF-5

Since this experiment is now at the halfway mark, you can expect inspiring updates in due time. Meanwhile, refer all related projects on pulse/frequency counting with microcontrollers, published in this website to keep your interest alive. An example link: http://www.electroschematics.com/10494/arduino-optical-position-rotary-encoder/

14 Comments

Join the conversation!

Error! Please fill all fields.
  • joy

    What is 7.5?

  • bobignatius

    I am new to Arduino and to the world of programming.

    I would really like to know what “Serial.begin(9600)” means.

    Thanks in advance 😀

  • gordonlowebtinternet-com

    please keep us updated on this

  • Athul S Nair

    this may be a dumb question but in your equation
    Pulse frequency (Hz) = 7.5Q, Q is flow rate in Litres/minute
    Flow Rate (Litres/hour) = (Pulse frequency x 60 min) / 7.5Q

    where Q is flow rate, So why there’s a Q in denominator

    • Athul S Nair

      I’m confused

      Pulse frequency (Hz) = 7.5Q, Q is flow rate in Litres/minute
      so,
      Q (liters/min) = pulse frequency/7.5

      Q(liters/ hour) = (pulse frequency * 60) / 7.5

      but your equn

      Pulse frequency (Hz) = 7.5Q, Q is flow rate in Litres/minute
      Flow Rate (Litres/min) = Pulse frequency / 7.5Q
      Flow Rate (Litres/hour) = (Pulse frequency x 60 min) / 7.5Q

      why Q in denominator?

    • T.K.Hareendran

      Refer the “Little Math Work” section again!

  • ralphubok

    this is a useful sensor for agriculture based projects, where can i get the sensor

  • Erkan Okman

    Thanks Mr. T.K.Hareendran

    a minor error code
    if(currentTime >= (cloopTime + 1000))

    if(currentTime = (cloopTime + 1000))

    • Diya Williams

      I think it is an issue with the visual editor. It changed angle brackets into their HTML entity equivalents when the post was saved.

  • nish

    thank you very much sir T.K.hareendran. I like to read all of your projects with theory and grasping my knowledge a lot.sir I want to know that may I use this flow measurement meter for commercial selling purpose.means may I manufacture and sell it commercially?? Need your needful advice here sir
    Thanks again

  • B S Murty

    Confirmed.

    • T.K.Hareendran

      To the best of my knowledge, a “linear”- type hall sensor is used in this water flow sensor. So, please google “linear hall sensors” to proceed.I will try to give a better technical explanation in due time!

  • B S Murty

    Excellent Product.
    Can we know the name of the Company producing the Hall sensor as a ready-made product, as indicated ?
    We are very much interested in producing this meter. We shall continue to be in touch.
    Regards.

    B S Murty

Looking for the latest from TI?