如果您曾经访问过大型制造公司,那么您会注意到的第一件事就是它们都是自动化的。软饮料工业和化学工业必须在自动化过程中不断测量和量化它们所处理的液体,而用于测量液体流量的最常见的传感器是流量传感器。通过将流量传感器与Arduino等微控制器结合使用,我们可以计算流量,并检查通过管道的液体量,并根据需要进行控制。除制造业外,流量传感器还可用于农业,食品加工,水管理,采矿业,水循环利用,咖啡机等中。此外,水流量传感器将是自动饮水机等项目的良好补充和智能灌溉系统,我们需要监测和控制液体的流量。
在这个项目中,我们将使用Arduino构建水流传感器。我们将水流传感器与Arduino和LCD连接,并对它进行编程以显示流过阀门的水量。对于此特定项目,我们将使用YF-S201 水流量传感器,该传感器使用霍尔效应来感测液体的流速。
所需组件
- 水流量传感器
- Arduino UNO
- 液晶屏(16x2)
- 带内螺纹的连接器
- 连接线
- 管
YFS201水流量传感器
传感器具有红色,黄色和黑色3条线,如下图所示。红线用于提供5V至18V的电源电压,黑线连接到GND。黄线用于输出(脉冲),可由MCU读取。水流量传感器由一个风车传感器组成,该风车传感器测量流过它的液体量。
YFS201水流量传感器的工作简单易懂。水流传感器根据霍尔效应原理工作。霍尔效应是当在垂直于电流流动方向的方向上施加磁场时,在电导体两端产生电势差。水流传感器与磁性霍尔效应传感器集成在一起,该霍尔效应传感器每旋转一圈都会产生一个电脉冲。它的设计使霍尔效应传感器与水隔绝,并使传感器保持安全干燥。
单独显示YFS201传感器模块的图片如下所示。
为了连接管道和水流量传感器,我使用了两个带有内螺纹的连接器,如下所示。
根据YFS201规范,它在5V时吸收的最大电流为15mA,工作流速为1至30升/分钟。当液体流过传感器时,它会与涡轮叶片接触,该叶片位于流动液体的路径中。涡轮机的轴连接到霍尔效应传感器。因此,每当水流过阀门时,都会产生脉冲。现在,我们要做的就是测量脉冲的时间或计算1秒内的脉冲数,然后计算以升/小时(L / Hr)为单位的流量,然后使用简单的转换公式来找到体积流过的水。为了测量脉冲,我们将使用Arduino UNO。下图显示了水流传感器的引脚排列。
电路原理图
的水流量传感器电路图如下所示的接口与Arduino的水流量传感器和LCD(16×2)。如果您不熟悉Arduino和LCD,可以考虑阅读此Arduino和LCD接口文章。
下表以表格形式给出了水流量传感器和LCD(16x2)与Arduino的连接。请注意,电位计连接在5V和GND之间,并且电位计的引脚2与LCD的V0引脚连接。
序号 |
水流量传感器针 |
Arduino引脚 |
1个 |
红线 |
5伏 |
2 |
黑色 |
地线 |
3 |
黄色 |
A0 |
序号 |
液晶屏 |
Arduino的 |
1个 |
VS |
GND(面包板接地轨) |
2 |
VDD |
5V(面包板的正轨) |
3 |
对于与V0的连接,请检查以上注意事项 |
|
4 |
RS |
12 |
5 |
读写器 |
地线 |
6 |
Ë |
11 |
7 |
D7 |
9 |
8 |
D6至D3 |
3到5 |
我使用了一块面包板,并且按照上面显示的电路图完成连接后,我的测试设置看起来像这样。
Arduino水流传感器代码
页面底部给出了完整的水流传感器Arduino代码。代码说明如下。
我们正在使用LCD的头文件,这简化了LCD与Arduino的接口,并且将引脚12,11,5,4,3,9分配给LCD和Arduino之间的数据传输。传感器的输出引脚连接到Arduino UNO的引脚2。
volatile int flow_frequency; //测量流量传感器脉冲 //计算的升/小时 浮球体积= 0.0,l_minute; 无符号字符流传感器= 2; //传感器输入 无符号长currentTime; 无符号长cloopTime; #包括
该函数是一个中断服务例程,只要在Arduino UNO的pin2处有中断信号,就会调用该函数。对于每个中断信号,变量flow_frequency的计数将增加1。有关中断及其工作的更多详细信息,您可以阅读有关Arduino中断的本文。
void flow()//中断函数 { flow_frequency ++; }
在void设置中,通过给出命令pinMode(pin,OUTPUT),我们告诉MCU Arduino UNO的引脚2用作输入。通过使用attachInterrupt命令,只要引脚2处的信号上升,就会调用流函数。这会将变量flow_frequency中的计数增加1。当前时间和cloopTime用于使代码每1秒运行一次。
void setup() { pinMode(flowsensor,INPUT); digitalWrite(flowsensor,HIGH); Serial.begin(9600); lcd.begin(16,2); attachInterrupt(digitalPinToInterrupt(flowsensor),flow,RISING); //建立中断 lcd.clear(); lcd.setCursor(0,0); lcd.print(“水流量计”); lcd.setCursor(0,1); lcd.print(“ Circuit Digest”); currentTime = millis(); cloopTime = currentTime; }
if函数可确保每秒钟运行其中的代码。这样,我们可以计算每秒水流量传感器产生的频率数。数据表中的流量脉冲特性给出,频率为7.5乘以流量。因此,流速为频率/7.5。找到以升/分钟为单位的流速后,将其除以60,将其转换为升/秒。每隔一秒钟将此值添加到vol变量中。
无效循环() { currentTime = millis(); //每秒计算并打印升/小时 if(currentTime> =(cloopTime + 1000)) { cloopTime = currentTime; //更新cloopTime if(flow_frequency!= 0){ //脉冲频率(Hz)= 7.5Q,Q为以L / min为单位的流量。 l_minute =(flow_frequency / 7.5); //(脉冲频率x 60分钟)/ 7.5Q =以L / hour为 单位的 流量lcd.clear(); lcd.setCursor(0,0); lcd.print(“ Rate:”); lcd.print(l_minute); lcd.print(“ L / M”); l_minute = l_minute / 60; lcd.setCursor(0,1); vol = vol + l_minute; lcd.print(“ Vol:”); lcd.print(vol); lcd.print(“ L”); flow_frequency = 0; //重置计数器 Serial.print(l_minute,DEC); //打印升/小时 Serial.println(“ L / Sec”); }
在给定时间段内没有水流传感器的输出时,else功能起作用。
否则{ lcd.clear(); lcd.setCursor(0,0); lcd.print(“ Rate:”); lcd.print(flow_frequency); lcd.print(“ L / M”); lcd.setCursor(0,1); lcd.print(“ Vol:”); lcd.print(vol); lcd.print(“ L”); }
Arduino水流传感器工作
在我们的项目中,我们将水流传感器连接到管道。如果管道的输出阀关闭,则水流传感器的输出为零(无脉冲)。在Arduino的引脚2上看不到中断信号,并且flow_frequency的计数为零。在这种情况下,在else循环内编写的代码将起作用。
管道的输出阀是否打开。水流过传感器,这又使传感器内的车轮旋转。在这种情况下,我们可以观察到传感器产生的脉冲。这些脉冲将作为对Arduino UNO的中断信号。对于每个中断信号(上升沿),flow_frequency变量的计数将增加一。当前时间和cloopTIme变量可确保每隔一秒钟将flow_frequency的值用于计算流量和体积。计算完成后,将flow_frequency变量设置为零,并从头开始整个过程。
完整的工作也可以在此页面底部的视频链接中找到。希望您喜欢本教程并喜欢一些有用的东西,如果您有任何问题,请将其留在评论部分或将我们的论坛用于其他技术问题。