这周水肥测试过程中,需要对主管路的流速做一个定量,通过手动球阀的开合度来调节流量,再用Arduino组合液晶屏(1602)做一个显示。
所需组件
● 水流量传感器(DN50/2寸)
● Arduino UNO开发板
● 液晶屏(1602)
采购的这种霍尔传感流量计
要找到流量计的参数,不同尺寸有不同脉冲特性,计算公式不同。
------------------------------------------------------------------------------
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.h>
LiquidCrystal lcd( 8, 7, 6, 5, 4, 3);
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("by AIRMTO");
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*60 / 0.2); // (Pulse frequency x 60 min) / 7.5Q = flowrate in L/hour
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Rate: ");
lcd.print(l_minute);
l_minute = l_minute/1;
lcd.setCursor(0,1);
lcd.print("by AIRMTO L/h");
flow_frequency = 0; // Reset Counter
}
else {
Serial.println(" flow rate = 0 ");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Rate: ");
lcd.print( flow_frequency );
lcd.print(" L/h");
lcd.setCursor(0,1);
lcd.print("by AIRMTO");
}
}
}
------------------------------------------------------------------------------