|
在本篇文章中,我们将把霍尔效应水流传感器YFS201与Arduino开发板连接,以测量水或任何其他液体的流量和流速。这是一个非常出色的项目,可用于工业、家庭或水龙头、隧道、河流等水流测量应用中。下面介绍使用Arduino和水流传感器进行流量和流速测量的代码以及电路图。
该项目可用于测量流经管道或容器的液体,或基于水的流速或水量创建控制系统。例如,您可以在园艺时使用它来测量用于浇灌植物的水量,以防止浪费。
所需的组件: ● YFS201霍尔效应水流传感器 ● Arduino Uno开发板 ● 1602 LCD显示屏 ● 面包板 ● 连接导线
电路图
将LCD引脚1、3、5、16连接到GND,将LCD的引脚2和15连接到5V VCC。然后将LCD引脚4、6、11、12、13、14连接到Arduino数字引脚D7、D6、D5、D4、D3、D2。
将YFS201霍尔效应水流传感器的VCC引脚连接至5V电源,并将GND连接至GND。由于它是一个模拟传感器,因此将其模拟引脚连接到Arduino的A0,如上图所示。
YFS201霍尔效应水流传感器简介 该传感器与您的供水管线成一直线,并包含一个风车传感器,以测量流过其中的液体量。有一个集成的磁性霍尔效应传感器,每旋转一圈就会输出一个电脉冲。霍尔效应传感器与水管密封,可保持传感器安全干燥。
传感器带有三根线:红色(5-24VDC电源)、黑色(接地)和黄色(霍尔效应脉冲输出)。通过计算来自传感器输出的脉冲,您可以轻松计算出水流量。每个脉冲约为2.25毫米。请注意,这不是精密传感器,脉冲率的确会有所变化,具体取决于流速、流体压力和传感器方向。如果要求精度高于10%,则需要仔细校准。但是,它非常适合基本的测量任务!
流量传感器的特点: ● 型号:YF-S201 ● 传感器类型:霍尔效应 ● 工作电压:5至18V DC(最低测试工作电压4.5V) ● 最大电流消耗:15mA @ 5V ● 输出类型:5V TTL ● 工作流量:1至30升/分钟 ● 工作温度范围:-25至+ 80℃ ● 工作湿度范围:35%-80%RH ● 准确度:±10% ● 最大水压:2.0 MPa ● 输出占空比:50%+ -10% ● 输出上升时间:0.04us ● 输出下降时间:0.18us ● 流量脉冲特性:频率(Hz)= 7.5 *流量(L / min) ● 每升脉冲数:450 ● 耐用性:最少300,000次周期
YFS201霍尔效应水流传感器的工作原理: 使用Arduino进行流量和体积测量的水流传感器基于霍尔效应原理工作。根据霍尔效应,在垂直于电流和垂直于电流的磁场的导体中会感应出电压差。在此,霍尔效应在流量计中利用了一个小型风扇/螺旋桨形转子,该转子置于液体流动的路径中。
液体推压转子的页片,使其旋转。转子的轴连接到霍尔效应传感器。它是一个电流线圈和一个连接到转子轴上的磁体的装置,因此当该转子旋转时会感应出电压/脉冲。在该流量计中,每分钟每升通过的液体输出约4.5个脉冲。这是由于安装在转子轴上的磁铁引起的磁场变化。我们使用Arduino测量脉冲数,然后使用简单的转换公式以升/小时(L / hr)为单位计算流速,以升为单位计算总流量。
源代码/程序: - #include <LiquidCrystal.h>
- LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
- int X;
- int Y;
- float TIME = 0;
- float FREQUENCY = 0;
- float WATER = 0;
- float TOTAL = 0;
- float LS = 0;
- const int input = A0;
- 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);
- }
- void loop()
- {
- X = pulseIn(input, HIGH);
- Y = pulseIn(input, LOW);
- TIME = X + Y;
- FREQUENCY = 1000000/TIME;
- WATER = FREQUENCY/7.5;
- LS = WATER/60;
- if(FREQUENCY >= 0)
- {
- if(isinf(FREQUENCY))
- {
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("VOL. :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("VOL.: ");
- lcd.print(WATER);
- lcd.print(" L/M");
- lcd.setCursor(0,1);
- lcd.print("TOTAL:");
- lcd.print( TOTAL);
- lcd.print(" L");
- }
- }
- delay(1000);
- }
复制代码
|