找回密码
 请使用中文注册

手机号码,快捷登录

手机号码,快捷登录

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

2023-7-27 21:36| 发布者: 开心| 查看: 628| 评论: 1

摘要: 在这篇文章中,我们将使用 Arduino 和 16 x 2 LCD显示屏构建一个数字水流量计。我们将看看YF-S201水流量传感器,其结构和工作原理以及如何与Arduino接口以提取一些有用的读 ...
    在这篇文章中,我们将使用 Arduino 和 16 x 2 LCD显示屏构建一个数字水流量计。我们将看看YF-S201水流量传感器,其结构和工作原理以及如何与Arduino接口以提取一些有用的读数。
拟议的项目可以测量以升/分钟为单位的水流量和以升为单位的总水流量。
让我们来看看YF-S201水流量传感器。
YF-S201是一款基于霍尔效应的水传感器。它具有三个端子5V(标称工作电压),GND和输出。+5V为红色线,黑色为接地线,黄色为输出。
传感器发出的频率与水流量成正比。YF-S201传感器的测量范围从1升/分钟到30升/分钟。水压应小于或等于1.75MPa。
水可以从一端注入,水流过另一端。
传感器可以放置在罐体的主闸阀之后;如果要测量水管网络中的水流量,或者可以放置在水龙头之前以测量单个水龙头的水流量。
传感器的位置可以根据用户的需要放在任何地方,但必须注意避免漏水。
传感器具有磁铁和霍尔效应传感器;如果我们看一下水流传感器的侧面,我们可以看到水流路径中的塑料涡轮机。
一个圆形磁铁嵌入在涡轮机的中心,霍尔效应传感器被密封并防止潮湿,并放置在磁铁上方。霍尔效应传感器为涡轮机的每一圈产生一个脉冲。
串行绘图仪上的水流波形
我们可以看到水流量传感器在arduino IDE的串行绘图仪上产生的脉冲,如下所示(使用Arduino单通道示波器)。

我们将空气吹过传感器以旋转涡轮机作为测试,生成的波形如上所示。左侧密度较高的波形表示涡轮机的频率更高,旋转速度更快,右侧密度较低的波形表示反之亦然。
一致的水流提供一致的频率输出。
我们必须将频率转换为升/分钟刻度。为此,制造商给出了一个公式:
水流量(升/分钟)= 频率 / 7.5
因此,我们需要测量生成的频率并在程序代码中应用上述公式。
YF-S201技术规格:
·精度:+/- 10%,如果您需要更好的精度,我们需要校准。
·工作温度:-25至+ 80摄氏度。
·工作湿度:35% 至 80% 相对湿度。
·输出占空比:50% +/- 10%。
·最大水压:1.75兆帕。
·每升豆类:450。
·最大电流消耗:15V 时为 5 mA
YF-S201水流量传感器到此结束。
现在让我们转到原理图。
示意图:

水流量传感器的输出引脚连接到 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”表示当前水流量,“总计”表示自电路打开以来的总流量。
您还可以流动粘度值接近水的任何液体。

路过

雷人

握手

鲜花

鸡蛋
发表评论

最新评论

引用 北斗星 2023-9-4 08:05
感谢楼主的分享

查看全部评论(1)

QQ|Archiver|手机版|家电维修论坛 ( 蜀ICP备19011473号-4 )

GMT+8, 2024-10-23 03:38 , Processed in 0.109470 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部