如何使用Arduino和LCD显示屏构建一个数字水流量计?

描述

在这篇文章中,我们将使用 Arduino 和 16 x 2 LCD显示屏构建一个数字水流量计。我们将看看YF-S201水流量传感器,其结构和工作原理以及如何与Arduino接口以提取一些有用的读数。

拟议的项目可以测量以升/分钟为单位的水流量和以升为单位的总水流量。

让我们来看看YF-S201水流量传感器。

YF-S201是一款基于霍尔效应的水传感器。它具有三个端子5V(标称工作电压),GND和输出。+5V为红色线,黑色为接地线,黄色为输出。

传感器发出的频率与水流量成正比。YF-S201传感器的测量范围从1升/分钟到30升/分钟。水压应小于或等于1.75MPa。

水可以从一端注入,水流过另一端。

传感器可以放置在罐体的主闸阀之后;如果要测量水管网络中的水流量,或者可以放置在水龙头之前以测量单个水龙头的水流量。

传感器的位置可以根据用户的需要放在任何地方,但必须注意避免漏水。

传感器具有磁铁和霍尔效应传感器;如果我们看一下水流传感器的侧面,我们可以看到水流路径中的塑料涡轮机。

一个圆形磁铁嵌入在涡轮机的中心,霍尔效应传感器被密封并防止潮湿,并放置在磁铁上方。霍尔效应传感器为涡轮机的每一圈产生一个脉冲。

串行绘图仪上的水流波形

我们可以看到水流量传感器在arduino IDE的串行绘图仪上产生的脉冲,如下所示(使用Arduino单通道示波器)。

LCD显示屏

我们将空气吹过传感器以旋转涡轮机作为测试,生成的波形如上所示。左侧密度较高的波形表示涡轮机的频率更高,旋转速度更快,右侧密度较低的波形表示反之亦然。

一致的水流提供一致的频率输出。

我们必须将频率转换为升/分钟刻度。为此,制造商给出了一个公式:

水流量(升/分钟)= 频率 / 7.5

因此,我们需要测量生成的频率并在程序代码中应用上述公式。

YF-S201技术规格:

·精度:+/- 10%,如果您需要更好的精度,我们需要校准。

·工作温度:-25至+ 80摄氏度。

·工作湿度:35% 至 80% 相对湿度。

·输出占空比:50% +/- 10%。

·最大水压:1.75兆帕。

·每升豆类:450。

·最大电流消耗:15V 时为 5 mA

YF-S201水流量传感器到此结束。

现在让我们转到原理图。

示意图:

LCD显示屏

水流量传感器的输出引脚连接到 Arduino 的 A0。使用 10K 电位计调整显示对比度。按照上图连接Arduino和LCD显示屏。

程序代码:

//-----Program Developed by R.Girish-----//

#include 《LiquidCrystal.h》

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int X;

int Y;

float Time = 0;

float frequency = 0;

float waterFlow = 0;

float total = 0;

float LS = 0;

const int input = A0;

const int test = 9;

void setup()

{

Serial.begin(9600);

lcd.begin(16, 2);

lcd.clear();

lcd.setCursor(0,0);

lcd.print(“Water Flow Meter”);

lcd.setCursor(0,1);

lcd.print(“****************”);

delay(2000);

pinMode(input,INPUT);

pinMode(test, OUTPUT);

analogWrite(test,100);

}

void loop()

{

X = pulseIn(input, HIGH);

Y = pulseIn(input, LOW);

Time = X + Y;

frequency = 1000000/Time;

waterFlow = frequency/7.5;

LS = waterFlow/60;

if(frequency 》= 0)

{

if(isinf(frequency))

{

lcd.clear();

lcd.setCursor(0,0);

lcd.print(“L/Min: 0.00”);

lcd.setCursor(0,1);

lcd.print(“Total: ”);

lcd.print(total);

lcd.print(“ L”);

}

else

{

total = total + LS;

Serial.println(frequency);

lcd.clear();

lcd.setCursor(0,0);

lcd.print(“L/Min: ”);

lcd.print(waterFlow);

lcd.setCursor(0,1);

lcd.print(“Total: ”);

lcd.print(total);

lcd.print(“ L”);

}

}

delay(1000);

}

//-----Program Developed by R.Girish-----//

“L/Min”表示当前水流量,“总计”表示自电路打开以来的总流量。

您还可以流动粘度值接近水的任何液体。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分