Introduction: Measuring Water Flow Rate Using Arduino and Flow Sensor

About: hIOTron is an IoT Based company that offers IoT Platforms, IoT Solutions, IoT Training.

Flow sensor helps you to calculate the flow rate and volume of liquid that has passed through the pipe.

Supplies

Hardware Components

Arduino Uno

Water Flow Sensor

LCD 16 X 2

Connecting wires

Pipe

Software Components

Arduino IDE

Step 1: About Project

YFS201 Water Flow Sensor

The Water Flow sensor has 3 different wires RED, YELLOW, and BLACK as shown in the figure below. The red wire is generally utilized for supply voltage which ranges from 5V to 18V and the black wire is attached to GND. The yellow wire is utilized for the output, which can be read by an MCU.

YF Water Flow SensorThe water flow sensor contains a pinwheel sensor that estimates the quantity of liquid that has passed through it.

The water flow sensor basically operates on the principle of hall effect. The water flow sensor is combined with a magnetic hall effect sensor, which produces an electric pulse with every strike.

IoT Course is an important step that will give you a thorough view of various IoT Devices.

Working of Project

In this project, we attached the water flow sensor to a pipe. If the output valve of the pipe is terminated, the output of the water flow sensor is zero that means no pulses. And If the output valve of the pipe is opened. The water runs via the sensor, which in turn revolves around the wheel inside the sensor. In this situation, we can see pulses, which are produced from the sensor.

These pulses basically will work as an interrupt signal to the Arduino UNO. The current time and loop time variable assure that for every one second the value of the flow_frequency is utilized for calculation of flow rate and volume. Once the calculation is completed, the flow_frequency variable is set to zero and the complete procedure is originated from the beginning.

Step 2: Run a Program

volatile int flow_frequency; // Measures flow sensor pulses

// Calculated litres/hour

float vol = 0.0,l_minute;

unsigned char flowsensor = 2; // Sensor Input

unsigned long currentTime;

unsigned long cloopTime;

#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 9);

void flow () // Interrupt function

{

flow_frequency++;

}

void setup()

{

pinMode(flowsensor, INPUT);

digitalWrite(flowsensor, HIGH); // Optional Internal Pull-Up

Serial.begin(9600);

lcd.begin(16, 2);

attachInterrupt(digitalPinToInterrupt(flowsensor), flow, RISING); // Setup Interrupt

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Water Flow Meter");

lcd.setCursor(0,1);

lcd.print("Circuit Digest");

currentTime = millis();

cloopTime = currentTime;

}

void loop ()

{

currentTime = millis(); // Every second, calculate and print litres/hour

if(currentTime >= (cloopTime + 1000))

{

cloopTime = currentTime; // Updates cloopTime

if(flow_frequency != 0)

{

// Pulse frequency (Hz) = 7.5Q, Q is flow rate in L/min.

l_minute = (flow_frequency / 7.5); // (Pulse frequency x 60 min) / 7.5Q = flowrate in L/hour lcd.clear(); lcd.setCursor(0,0);

lcd.print("Rate: ");

lcd.print(l_minute);

lcd.print(" L/M");

l_minute = l_minute/60;

lcd.setCursor(0,1);

vol = vol +l_minute;

lcd.print("Vol:");

lcd.print(vol);

lcd.print(" L");

flow_frequency = 0; // Reset Counter

Serial.print(l_minute, DEC); // Print litres/hour

Serial.println(" L/Sec");

}

else

{

Serial.println(" flow rate = 0 ");

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Rate: ");

lcd.print( flow_frequency );

lcd.print(" L/M");

lcd.setCursor(0,1);

lcd.print("Vol:");

lcd.print(vol);

lcd.print(" L");

}

}

}