找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2126|回复: 0
打印 上一主题 下一主题
收起左侧

单片机水流量传感器使用 热水器上水报警器源程序

[复制链接]
跳转到指定楼层
楼主
ID:873526 发表于 2021-1-5 10:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
热水器上水报警器

一、实验目的

1. 了解水流量传感器工作原理

2. 学会使用水流量传感器检测水流量

3. 会使用八段数码管显示热水器水箱水量百分比

4. 学会使用蜂鸣器发出报警声

二、实验设备

1. 51单片机实验板,以及电源线、下载线、杜邦线等

2. 水流量传感器、蜂鸣器、数码管显示模块

三、实验项目要求

经常会看到某家属楼外墙排水管水哗哗的流着,原来是某家太阳能热水器上水忘记关阀门了,水白白浪费掉,非常可惜!为解决太阳能热水器上水忘记关阀门问题,请设计一款热水器上水报警器。该报警器通过水流量传感器检测上水的体积,并显示已上水的体积占总体积的百分比(最大值为100),当水上满后,启动蜂鸣器报警提醒用户关闭上水水阀。假设热水器总容量为5升。

请按要求设计一个可行方案,包括设备选型、系统连接图等,并编写程序实现上述功能。

四、实验步骤

1. 设计方案

①方案:采用水流量传感器来测上水的体积,把检测到的体积送给单片机进行处理,让数码管显示已上水多少,如果上水已经有1升了,蜂鸣器报警提示用户关闭上水阀

②设备选型:

  • 水流量传感器

水流量传感器主要由塑料阀体 、水流转子组件和

霍尔传感器组成。它装在热水器进水端,用于检测进

水流量,当水通过水流转子组件时,磁性转子转动并

且转速随着流量变化而变化,霍尔传感器输出相应脉冲信号,反馈给控              制器,由控制器判断水流量的大小,进行调控。

接线方式:

1 红  IN   接正极

2 黄  OUT  信号输出线(输出波形图: 方波)

3 黑  GND  接负极

脉冲信号频率与水流量的关系:

                   f=7.5q

     f—脉冲信号频率,Hz;q—水流量,L/min

③系统连接图:

  • 编写源程序,编译,生成hex文件

源程序:

  1. Main.c
  2. //本工程基于普中单片机开发板,晶振12MHz
  3. #include <config.h>
  4. #include <1602.h>
  5. sbit beep=P1^5;//蜂鸣器
  6. u8 K=0; //统计T1中断次数,中断20次为1秒
  7. u16 n=0;//1秒后的T0计数值,即1秒后流量传感器转动圈数
  8. void delay_us(u16 n)//微秒延时
  9. {
  10.     while(--n);
  11. }
  12. void delay_ms(u16 x)//毫秒延时函数
  13. {
  14.               u16 i,j;
  15.               for(i=0;i<x;i++)
  16.                   for(j=0;j<115;j++);
  17. }
  18. void Alarm(u8 t) //蜂鸣器报警,持续t秒,软件延时
  19. {
  20.               u8 k;
  21.               u16 i,j;                           
  22.               for(k=0;k<t;k++)
  23.               {
  24.                             for(i=0;i<119;i++)//叮
  25.                             {  beep=0;delay_us(50);beep=1;delay_us(50);  }
  26.                             for(j=0;j<88;j++)//咚
  27.                     {  beep=0;delay_us(110);beep=1;delay_us(110);}
  28.               }
  29. }
  30. void ET_Init()//定时器计数器初始化
  31. {
  32. //T0工作于计数器模式,以流量传感器输出为外部计数脉冲,计数初值为0
  33. //T1工作于定时器模式,定时50ms,中断20次,为1秒
  34. //每隔1秒读出T0的计数值,即为1秒钟流量传感器转动圈数
  35.               K=0;              //统计T1中断次数,中断20次为1秒
  36.               TMOD=0X15;//计数器T0工作方式1、软启动、计数;定时器1工作方式1、软启动、定时
  37.               TH0=0;              //T0计数初值为0
  38.               TL0=0;
  39.               TH1=19664/256;//T1计数初值19664,晶振11.0592MHz,定时50ms,计数值45872,计数初值19664
  40.               TL1=19664%256;
  41.               EA=1;  //中断总允许
  42.               ET1=1; //T1中断允许
  43.               TR0=1;              //启动计数器T0
  44.               TR1=1;              //启动定时器T1
  45. }
  46. void main()
  47. {
  48.               float q;//流量,单位:升/分钟
  49.               float v=0;//水量,单位:升
  50.               u8 print[10];
  51.               LCD1602_Init();              //1602初始化
  52.               while(1) //每隔1s统计一次流量
  53.               {   
  54.                             ET_Init();              //定时器计数器初始化
  55.                             LCD1602_disstr("liuliang",0,0);
  56.                             while(K<20);//等待1s
  57.                             q=n*60/7.5; //计算流量,单位:转/分钟
  58.                             v=v+q/60;
  59.                             if(v>50)
  60.                             {
  61.                                           Alarm(5);
  62.                                           v=50;
  63.                             }
  64.                             sprintf(print,"%.1f",v*2);
  65.                             LCD1602_disstr(print,1,0);
  66.                             LCD1602_disch('%');
  67.               }
  68. }
  69. void T1_INT() interrupt 3
  70. {
  71.               K++;  //每中断一次(50ms),计数值加1,中断20次即为1s
  72.               if(K==20)
  73.               {
  74.                             TR0=0; //关闭计数器0
  75.                             TR1=0; //关闭定时器1
  76.                             n=TH0;
  77.                             n=n*256+TL0; //1秒后的T0计数值,即1秒后流量传感器转动圈数
  78.               }
  79.               else
  80.               {
  81.         TH1=19664/256;//不足20次时,重装初值,继续计时
  82.         TL1=19664%256;
  83.     }                                                           
  84. }</font>
复制代码
将hex文件下载到实验板运行,描述实验现象
实验现象:

水流量传感器检测到的上水体积,然后上水体积除以5升,再乘以100,得到的结果实时送给单片机的数码管进行显示,并且当数码管显示的数据大于50时,蜂鸣器发出报警声。

实验总结
通过本次实验大致了解了水流量传感器工作原理,学会了使用水流量传感器检测水流量的编程性思维。


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表