热水器上水报警器 一、实验目的 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 ③系统连接图: 源程序: - Main.c
- //本工程基于普中单片机开发板,晶振12MHz
- #include <config.h>
- #include <1602.h>
- sbit beep=P1^5;//蜂鸣器
- u8 K=0; //统计T1中断次数,中断20次为1秒
- u16 n=0;//1秒后的T0计数值,即1秒后流量传感器转动圈数
- void delay_us(u16 n)//微秒延时
- {
- while(--n);
- }
- void delay_ms(u16 x)//毫秒延时函数
- {
- u16 i,j;
- for(i=0;i<x;i++)
- for(j=0;j<115;j++);
- }
- void Alarm(u8 t) //蜂鸣器报警,持续t秒,软件延时
- {
- u8 k;
- u16 i,j;
- for(k=0;k<t;k++)
- {
- for(i=0;i<119;i++)//叮
- { beep=0;delay_us(50);beep=1;delay_us(50); }
- for(j=0;j<88;j++)//咚
- { beep=0;delay_us(110);beep=1;delay_us(110);}
- }
- }
- void ET_Init()//定时器计数器初始化
- {
- //T0工作于计数器模式,以流量传感器输出为外部计数脉冲,计数初值为0
- //T1工作于定时器模式,定时50ms,中断20次,为1秒
- //每隔1秒读出T0的计数值,即为1秒钟流量传感器转动圈数
- K=0; //统计T1中断次数,中断20次为1秒
- TMOD=0X15;//计数器T0工作方式1、软启动、计数;定时器1工作方式1、软启动、定时
- TH0=0; //T0计数初值为0
- TL0=0;
- TH1=19664/256;//T1计数初值19664,晶振11.0592MHz,定时50ms,计数值45872,计数初值19664
- TL1=19664%256;
- EA=1; //中断总允许
- ET1=1; //T1中断允许
- TR0=1; //启动计数器T0
- TR1=1; //启动定时器T1
- }
- void main()
- {
- float q;//流量,单位:升/分钟
- float v=0;//水量,单位:升
- u8 print[10];
- LCD1602_Init(); //1602初始化
- while(1) //每隔1s统计一次流量
- {
- ET_Init(); //定时器计数器初始化
- LCD1602_disstr("liuliang",0,0);
- while(K<20);//等待1s
- q=n*60/7.5; //计算流量,单位:转/分钟
- v=v+q/60;
- if(v>50)
- {
- Alarm(5);
- v=50;
- }
- sprintf(print,"%.1f",v*2);
- LCD1602_disstr(print,1,0);
- LCD1602_disch('%');
- }
- }
- void T1_INT() interrupt 3
- {
- K++; //每中断一次(50ms),计数值加1,中断20次即为1s
- if(K==20)
- {
- TR0=0; //关闭计数器0
- TR1=0; //关闭定时器1
- n=TH0;
- n=n*256+TL0; //1秒后的T0计数值,即1秒后流量传感器转动圈数
- }
- else
- {
- TH1=19664/256;//不足20次时,重装初值,继续计时
- TL1=19664%256;
- }
- }</font>
复制代码 将hex文件下载到实验板运行,描述实验现象
实验现象:
水流量传感器检测到的上水体积,然后上水体积除以5升,再乘以100,得到的结果实时送给单片机的数码管进行显示,并且当数码管显示的数据大于50时,蜂鸣器发出报警声。
实验总结
通过本次实验大致了解了水流量传感器工作原理,学会了使用水流量传感器检测水流量的编程性思维。
|