Arduino 和水流量传感器测量水流量和体积

  • 前言
  • 所需元器件
  • YFS201水流量传感器
  • 电路原理图
  • Arduino水流传感器代码
  • Arduino水流量传感器工作
  • 完整代码

前言

通过使用带有 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。下图显示了水流传感器的引脚排列。

电路原理图

水流传感器电路图如下所示,用于将水流传感器和 LCD (16x2) 与 Arduino 连接。
水流传感器和 LCD(16x2) 与 Arduino 的连接以表格形式在下表中给出。请注意,电位器连接在 5V 和 GND 之间,电位器的引脚 2 连接到 LCD 的 V0 引脚。
我使用了一个面包板,一旦按照上面显示的电路图完成连接,我的测试设置看起来像这样。

Arduino水流传感器代码

完整的水流传感器 Arduino 代码在页面底部给出。代码解释如下。

我们正在使用 LCD 的头文件,它简化了 LCD 与 Arduino 的接口,并且引脚 12、11、5、4、3、9 被分配用于 LCD 和 Arduino 之间的数据传输。传感器的输出引脚连接到 Arduino UNO 的引脚 2。

volatile int flow_frequency; // Measures flow sensor pulses
// Calculated litres/hourfloat vol = 0.0,l_minute;
unsigned char flowsensor = 2; // Sensor Input
unsigned long currentTime;
unsigned long cloopTime;
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 9);

该函数是一个中断服务程序,只要 Arduino UNO 的 pin2 有中断信号,就会调用该函数。对于每个中断信号,变量 flow_frequency 的计数将增加 1。

void flow () // Interrupt function
{flow_frequency++;
}

在 void 设置中,我们通过给出命令 pinMode(pin, OUTPUT) 告诉 MCU Arduino UNO 的引脚 2 用作 INPUT。通过使用 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); // Setup Interruptlcd.clear();lcd.setCursor(0,0);lcd.print("Water Flow Meter");lcd.setCursor(0,1);lcd.print("Circuit Digest");currentTime = millis();cloopTime = currentTime;
}

if 函数确保其内部的代码每秒钟运行一次。这样,我们就可以统计出水流传感器每秒产生的频率数。数据表中的流速脉冲特性是频率为 7.5 乘以流速。所以流速是频率/7.5。在找到以升/分钟为单位的流量后,将其除以 60 以将其转换为升/秒。该值每隔一秒添加到 vol 变量中。

void loop ()
{currentTime = millis();// Every second, calculate and print litres/hourif(currentTime >= (cloopTime + 1000)){cloopTime = currentTime; // Updates cloopTimeif(flow_frequency != 0){// Pulse frequency (Hz) = 7.5Q, Q is flow rate in L/min.l_minute = (flow_frequency / 7.5); // (Pulse frequency x 60 min) / 7.5Q = flowrate in L/hourlcd.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; // Reset CounterSerial.print(l_minute, DEC); // Print litres/hourSerial.println(" L/Sec");}

当水流传感器在给定时间跨度内没有输出时,else 功能起作用。

  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 的 pin 2 上将看不到中断信号,并且 flow_frequency 的计数为零。在这种情况下,编写在 else 循环中的代码将起作用。

如果管道的输出阀打开。水流过传感器,从而使传感器内部的轮子旋转。在这种情况下,我们可以观察到传感器产生的脉冲。这些脉冲将作为 Arduino UNO 的中断信号。对于每个中断信号(上升沿),flow_frequency 变量的计数将加一。当前时间和 cloopTIme 变量确保每隔一秒采用 flow_frequency 的值来计算流量和体积。计算完成后,将 flow_frequency 变量设置为零,整个过程从头开始。

完整代码

/*YF‐ S201 Water Flow SensorWater Flow Sensor output processed to read in litres/hourAdaptation Courtesy: hobbytronics.co.uk*/volatile int flow_frequency; // Measures flow sensor pulses// Calculated litres/hourfloat vol = 0.0,l_minute;unsigned char flowsensor = 2; // Sensor Inputunsigned long currentTime;unsigned long cloopTime;#include <LiquidCrystal.h>LiquidCrystal lcd(12, 11, 5, 4, 3, 9);void flow () // Interrupt function{flow_frequency++;}void setup(){pinMode(flowsensor, INPUT);digitalWrite(flowsensor, HIGH); // Optional Internal Pull-UpSerial.begin(9600);lcd.begin(16, 2);attachInterrupt(digitalPinToInterrupt(flowsensor), flow, RISING); // Setup Interruptlcd.clear();lcd.setCursor(0,0);lcd.print("Water Flow Meter");lcd.setCursor(0,1);lcd.print("Circuit Digest");currentTime = millis();cloopTime = currentTime;}void loop (){currentTime = millis();// Every second, calculate and print litres/hourif(currentTime >= (cloopTime + 1000)){cloopTime = currentTime; // Updates cloopTimeif(flow_frequency != 0){// Pulse frequency (Hz) = 7.5Q, Q is flow rate in L/min.l_minute = (flow_frequency / 7.5); // (Pulse frequency x 60 min) / 7.5Q = flowrate in L/hourlcd.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; // Reset CounterSerial.print(l_minute, DEC); // Print litres/hourSerial.println(" L/Sec");}else {Serial.println(" flow rate = 0 ");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 和水流量传感器测量水流量和体积】相关推荐

  1. Arduino 与 土壤湿度传感器 测量土壤湿度自动浇水提醒

    土壤湿度传感器 1,传感器适用于土壤的湿度检测: 2,模块中蓝色的电位器是用于土壤湿度的阀值调节, 顺时针调节,控制的湿度会越大,逆时针越小 3,数字量输出D0可以与单片机直接相连,通过单片机来检测高 ...

  2. 霍尔水流量传感器工作原理

    水流量传感器是利用霍尔元件的霍尔效应来测量磁性物理量.在霍尔元件的正极串入负载电阻,同时通上5V的直流电压并使电流方向与磁场方向正交.当水通过涡轮开关壳推动磁性转子转动时,产生不同磁极的旋转磁场,切割 ...

  3. 基于51单片机的水流量传感器测试系统

    目录 热水器上水报警器 问题咨询及项目源码下载请加群: 群名:IT项目交流群 群号:245022761 一.实验目的 1. 了解水流量传感器工作原理 2. 学会使用水流量传感器检测水流量 3. 会使用 ...

  4. 【雕爷学编程】Arduino动手做(88)---水流量传感器模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  5. Arduino 项目笔记 | 基于Arduino和水流量传感器的水饮水机 (附.Arduino 项目源码 和 PCB Gerber 文件 )

    视频演示 一.元件清单(Components) 1. 霍尔水流量传感器流量计水控2Mpa 描述:略 规格: 最低额定工作电压:DC4.5 5V-24V 最大工作电流:15 mA(DC 5V) 工作电压 ...

  6. 利用51单片机霍尔水流量传感器开发水流统计水流量报警(LCD1602显示)

    开发前的准备: LCD1602一块 51单片机开发板 一块(这里我用的是普中的板子) 霍尔水流量传感器一块(红色接5V黑色接GND黄色是数据传接口) 霍尔传感器流量经验公式: Q=(F+3)/8.1 ...

  7. arduino 土壤温湿度传感器_如何将土壤湿度传感器与Arduino接口

    简介 如果您有家庭花园或者是带草皮的后院,那么你可能知道我们需要花多少时间浇灌植物和草皮. 花园洒水器是浇水的常用选择之一.草坪和植物,嗯,唯一的选择,最好的选择是手动浇水. 但是如果你打算制造一个自 ...

  8. Arduino不同测距传感器对于较小物体测距效果【学习记录】

    文章目录 前言 一.HC-SR04超声波测距模块 二.TOF200F红外激光测距模块 三.SP-TOF可见激光测距模块 总结 前言 由于最近的设计项目有对于较小物体车测距需求,所以对三种类型的测距模块 ...

  9. arduino 土壤温湿度传感器_怎样将Arduino与土壤湿度传感器FC-28连接起来

    步骤1:在模拟模式下连接传感器 模拟模式 - 连接土壤湿度传感器和Arduino 要在模拟模式下连接传感器,我们需要使用传感器的模拟输出.从土壤湿度传感器FC-28获取模拟输出时,传感器给出的值为0- ...

最新文章

  1. IntelliJ IDEA 快捷键快速实用篇
  2. 2、FreeRTOS任务相关API函数
  3. tensorflow lstm 预测_解析seq2seq原理+tensorflow实现
  4. Tiling Challenge
  5. PHP json_encode后的数据有的大括号于中括号
  6. “四不像”病毒冒充多款知名软件 窃取电脑隐私
  7. java声明arraylist,在java构造函数中声明ArrayList
  8. 被word格式折磨疯掉的我
  9. js事件委托或事件代理
  10. HTTPS客户端验证服务器端的过程
  11. 拓端tecdat|Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类
  12. QT: QTableWidget 表格中按钮槽函数 获取表格该按钮所在的行号信息
  13. java编程手册_java编程手册下载
  14. 室内定位发展趋势分析
  15. 深度学习模型并非“越大越好”,它可能引起气候变化问题
  16. php linux 一键部署工具,Linux一键配置工具ezhttp介绍
  17. mysql 升级mariadb_mariadb升级
  18. 服务器硬件规格常用查看命令——CPU相关命令
  19. 【春招实习秋招】前端学习の优质资料整理心路历程(已上岸)
  20. 30秒让你弄懂pdf怎么翻译,还在犹豫什么

热门文章

  1. 新华社专访流浪地球导演郭帆:中国科幻电影刚刚起步
  2. 榕树贷款利用AI人工智能技术发送非常迅速(榕树贷款)
  3. 环境保护刻不容缓,智慧治理迎来新生!
  4. 小学文凭宝妈在家开网店?其实做跨境并不难!
  5. fluent什么时候用滑移网格_Fluent转子定子系统的流体动力学计算
  6. word embedding(详细讲解word embedding)
  7. 从零开始Tableau | 12.表计算-特定维度
  8. OS及Mac开源项目和学习资料【超级全面】
  9. 浏览器点击链接打开指定APP详解
  10. 欢乐的票圈重构——九宫格控件(上)