Article covers measuring water flow rate using flowmeter & Arduino.
Disclaimer
1. This step-by-step how-to covers lab setup and not the field setup or test.
2. This how-to does not cover the calibration of flow meter.
3. This does not cover the working principles of flow meter.
Working sample
Before we proceed further, let us take a look at what our end result would look like.
Items needed
- Arduino Uno.
- Hall effect flow meter sensor.
Pre-requisites
This post assumes you already have,
1. Arduino Editor installed on your laptop.​
2. Your laptop connected to Arduino using the USB cable.
3. Basic familiarity with Arduino programming using C++.
Technical details
How flow meter works?
This post does not go into details of how flow meter works. There are numerous materials available on the internet.
One such example: https://www.seeedstudio.com/blog/2020/05/11/how-to-use-water-flow-sensor-with-arduino/
Schematic & Wiring diagrams
This is how the final setup looks like:
How-to steps
Step 1: Connecting Arduino to flow meter
Water flow sensors normally have three leads. +ve, -ve and interrupt.
Interrupt output from flow meter sensor send a certain amount of HIGH signals depending on the flow rate, and it needs to be connected to Arduino's interrupt pins.
Arduino Uno has two interrupt pins, pin #2 and pin #3. These pins are referenced as 0 and 1 in the c++ code, which you can see in the sample code below.
Step 2: Flow meter sensor
Water flow sensors normally have three leads. +ve, -ve and interrupt.
In the above diagram, you may notice,
F=(7.5 * Q), Q=L/Min.
F - Frequency
Q - Flow rate
Using above spec,
Q (flow rate) = F / 7.5 liters per minute
Step 3: Arduino C++ I2C code
There are no new libraries to be downloaded. Code is straight forward.
C++ code
int flowPin = 5; //Digital input pin on the Arduino
double flowRate; //Variable to hoold the calculated flow rate
//This variable is incremented when interrupt runs.
//This needs to be set as volatile ensure to ensure it updates correctly during the interrupt process.
volatile int count; void setup() {
// Setup code here, to run once:
pinMode(flowPin, INPUT); //Sets the pin as an input
//Configures interrupt 0 which is pin number 2 on the Arduino Uno, which runs the function 'calculateNumberOfPulsees()'
attachInterrupt(0, calculateNumberOfPulsees, RISING);
Serial.begin(9600); //Start Serial
}
void loop() {
// Main code here, runs repeatedly:
count = 0; // Reset the counter before running the interrupt
interrupts(); //Enables interrupts on the Arduino.
//This will start checking the interrupt and run the calculateFlowRate() every time when the signal Rises //When the interrupt is active for 1 second, the
delay (1000);
noInterrupts(); //Disables the interrupt check on the Arduino. This will stop incrementing the counter
//LPM calculation: as per sepcifications, Frequency = 7.5 x liters per minute. So, Liters per minute = Frequency / 7.5
flowRate = (count / 7.5);
//Print the number of interrupts in the last second
Serial.print("Number of interrup is: ");
Serial.print(count);
Serial.print(" & The flow rate is : ");
Serial.print(flowRate); //Print the variable flowRate to Serial
Serial.println(" lpm"); //Print the variable flowRate to Serial
}
void calculateNumberOfPulsees() {
count++; //count gets incremented every time this function is called
}
Step 4: Testing the flow meter
Now the setup should be ready. When the C++ code runs,
1. Interrupts are activated for 1 second through "delay(1000)" command in the code.
2. When there is an interrupt signal in Arduino's pin #2, the funtion 'calculateNumberOfPulsees()' gets called, which increments the counter variable by 1.
3. After 1 second, the interrupt is stopped, and we proceed to calculate the flow rate.
4. After calculating the flow rate, the counter is reset to 0.
Refer accompanying video to see a demo of this. Instead of water, I've used the air flow through the meter to activate the flowmeter.
Closing note
​Hope this post gives you the basic details of measuring flow rate using hall effect flowmeter and Arduino.
Thanks,
Music by QubeSounds from Pixabay