利用51单片机和霍尔水流量传感器开发水流量计

本文介绍了使用51单片机和YF-B1霍尔水流量传感器开发水流量计的过程。内容涵盖开发准备、基础知识(包括传感器工作原理和51单片机中断系统)、电路设计以及软件设计。通过连接传感器数据线到P3.4端口,并利用中断来捕获流量脉冲,实现流量测量。
摘要由CSDN通过智能技术生成
  1. 开发准备
    (1)YF-B1流量传感器一个
    (2)51开发板一个

  2. 基础知识
    (1)YF-B1流量传感器只有三根线。即数据线、VCC、GND。数据线输出为占空比为50%的方波。当水流通过水流转子组件时,磁性转子转动并且转速随着流量的变化而成线性变化。霍尔传感器(霍尔元件采样)输出相应的脉冲信号。其流量脉冲特性计算公式为:脉冲f(Hz)=8.1x流量Q(L/min)-3。
    (2)51单片机的中断工作方式。51单片机有定时器T0和T1,他们既有定时又有计数的功能。通过设置相关的特殊功能寄存器就可以启用定时或计数功能。需要注意的是,定时器系统是单片机内部一个独立的硬件部分,CPU一旦设置定时功能,定时器便在晶振的作用下计时,当计数器计满便会产生中断,通知CPU该如何去处理。而作为计数器时,计数脉冲来自相应的外部输入引脚T0(P3.4),T1(P3.5)或者T2(P1.0,52单片机)。

  3. 电路设计
    (1)将霍尔传感器数据线插在P3.4,VCC接在VCC,GND接GND。
    这里插入图片描述
    (2)这是我的开发板数码管的电路,提供参考。
    在这里插入图片描述

  4. 软件设计


                
STM32水流量传感器是一种利用STM32单片机核心板、水流量传感器、LCD1602液晶显示、按键、蜂鸣器及电源等组成的系统。其主要功能包括实时显示瞬时流量和累计流量、设置累计流量阈值、报警、继电器控制阀开关等。具体特点如下: 1. 水流量传感器采用椭圆齿轮传感器,能够准确测量水流量。 2. 通过液晶LCD1602液晶实时显示瞬时流量和累计流量、设置的累计流量,方便用户了解水流量情况。 3. 通过按键设置累计流量阈值,如果累计流量超过设置阈值,蜂鸣器报警、继电器断开,否则不报警继电器闭合,保证水流量在安全范围内。 4. 继电器模拟阀开关,如果当前累计流量低于设置流量,打开继电器打开阀的意思,方便用户控制水流量。 5. 按键有设置按键、设置+、设置-,在设置情况下可以对设置值进行加减运算,方便用户设置累计流量阈值。 代码示例: ```c //定义引脚 #define FlowPin PA0 #define RelayPin PA1 #define BeepPin PA2 #define Key1Pin PA3 #define Key2Pin PA4 #define Key3Pin PA5 //定义变量 float flow = 0; //瞬时流量 float total = 0; //累计流量 float setTotal = 100; //设置的累计流量 int alarm = 0; //报警标志 int relay = 0; //继电器状态 int key1 = 0; //设置按键状态 int key2 = 0; //设置+按键状态 int key3 = 0; //设置-按键状态 void setup() { pinMode(FlowPin, INPUT); pinMode(RelayPin, OUTPUT); pinMode(BeepPin, OUTPUT); pinMode(Key1Pin, INPUT_PULLUP); pinMode(Key2Pin, INPUT_PULLUP); pinMode(Key3Pin, INPUT_PULLUP); Serial.begin(9600); } void loop() { flow = pulseIn(FlowPin, HIGH); //读取瞬时流量 flow = flow / 7.5; //转换为L/min total += flow * 0.05; //累计流量 if (total >= setTotal) { //如果累计流量超过设置阈值 alarm = 1; //报警 digitalWrite(RelayPin, LOW); //继电器断开 digitalWrite(BeepPin, HIGH); //蜂鸣器报警 } else { alarm = 0; //不报警 digitalWrite(RelayPin, HIGH); //继电器闭合 digitalWrite(BeepPin, LOW); //蜂鸣器不报警 } key1 = digitalRead(Key1Pin); //读取设置按键状态 key2 = digitalRead(Key2Pin); //读取设置+按键状态 key3 = digitalRead(Key3Pin); //读取设置-按键状态 if (key1 == LOW) { //如果按下设置按键 while (digitalRead(Key1Pin) == LOW); //等待按键释放 delay(10); if (key2 == LOW) { //如果同时按下设置+按键 while (digitalRead(Key2Pin) == LOW); //等待按键释放 delay(10); setTotal += 10; //设置值加10 } else if (key3 == LOW) { //如果同时按下设置-按键 while (digitalRead(Key3Pin) == LOW); //等待按键释放 delay(10); setTotal -= 10; //设置值减10 } } Serial.print("Flow: "); Serial.print(flow); Serial.print(" L/min, Total: "); Serial.print(total); Serial.print(" L, SetTotal: "); Serial.print(setTotal); Serial.print(" L, Alarm: "); Serial.print(alarm); Serial.print(", Relay: "); Serial.println(relay); delay(50); } ```
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值