0% found this document useful (0 votes)
87 views2 pages

A Lire

This Arduino code interfaces a water flow sensor with an ESP32 board to measure and display the water flow rate and total quantity over time. It uses interrupts to count pulses from the sensor and calculates the flow rate in liters/minute and total milliliters passed. The flow rate and cumulative total are printed to the serial monitor every second.

Uploaded by

Ferawi Mabla
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
87 views2 pages

A Lire

This Arduino code interfaces a water flow sensor with an ESP32 board to measure and display the water flow rate and total quantity over time. It uses interrupts to count pulses from the sensor and calculates the flow rate in liters/minute and total milliliters passed. The flow rate and cumulative total are printed to the serial monitor every second.

Uploaded by

Ferawi Mabla
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 2

https://robojax.

com/learn/arduino/
/*
Application:
� Interface water flow sensor with ESP32 board.

Board:
� ESP32 Dev Module
https://my.cytron.io/p-node32-lite-wifi-and-bluetooth-development-kit
Sensor:
� G 1/2 Water Flow Sensor
https://my.cytron.io/p-g-1-2-water-flow-sensor
*/

#define LED_BUILTIN 2
#define SENSOR 27

long currentMillis = 0;
long previousMillis = 0;
int interval = 1000;
boolean ledState = LOW;
float calibrationFactor = 4.5;
volatile byte pulseCount;
byte pulse1Sec = 0;
float flowRate;
unsigned int flowMilliLitres;
unsigned long totalMilliLitres;

void IRAM_ATTR pulseCounter()


{
pulseCount++;
}

void setup()
{
Serial.begin(115200);

pinMode(LED_BUILTIN, OUTPUT);
pinMode(SENSOR, INPUT_PULLUP);

pulseCount = 0;
flowRate = 0.0;
flowMilliLitres = 0;
totalMilliLitres = 0;
previousMillis = 0;

attachInterrupt(digitalPinToInterrupt(SENSOR), pulseCounter, FALLING);


}

void loop()
{
currentMillis = millis();
if (currentMillis � previousMillis > interval) {

pulse1Sec = pulseCount;
pulseCount = 0;

// Because this loop may not complete in exactly 1 second intervals we


calculate
// the number of milliseconds that have passed since the last execution and use
// that to scale the output. We also apply the calibrationFactor to scale the
output
// based on the number of pulses per second per units of measure (litres/minute
in
// this case) coming from the sensor.
flowRate = ((1000.0 / (millis() � previousMillis)) * pulse1Sec) /
calibrationFactor;
previousMillis = millis();

// Divide the flow rate in litres/minute by 60 to determine how many litres


have
// passed through the sensor in this 1 second interval, then multiply by 1000
to
// convert to millilitres.
flowMilliLitres = (flowRate / 60) * 1000;

// Add the millilitres passed in this second to the cumulative total


totalMilliLitres += flowMilliLitres;

// Print the flow rate for this second in litres / minute


Serial.print("Flow rate: ");
Serial.print(int(flowRate)); // Print the integer part of the variable
Serial.print("L/min");
Serial.print("\t"); // Print tab space

// Print the cumulative total of litres flowed since starting


Serial.print("Output Liquid Quantity: ");
Serial.print(totalMilliLitres);
Serial.print("mL / ");
Serial.print(totalMilliLitres / 1000);
Serial.println("L");
}
}

You might also like