找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机雨滴霍尔传感器使用 下雨关窗报警器程序

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

一、实验目的

1. 了解霍尔传感器工作原理

2. 了解雨滴传感器工作原理

3. 学会使用霍尔传感器检测门窗是否关好

4. 学会使用雨滴传感器检测是否下雨

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

二、实验设备

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

2. 霍尔传感器、雨滴传感器、蜂鸣器

三、实验项目要求

请设计一款下雨关窗报警器,当检测到下雨时,若用户窗户没有关,则发出报警声提醒用户关窗户。

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

四、实验步骤

1. 设计方案

①方案:采用雨滴传感器来判断是否下雨没,霍尔传感器来模拟是否关窗没,通过这两个传感器采集的信息交给单片机做处理,如果下雨没关窗,蜂鸣器响,其他情况蜂鸣器都不响

②设备选型:

1、雨滴传感器(DO)
功能介绍:

DO TTL数字输出也可以连接单片机检测是否有雨。

接上5V电源,电源指示灯亮,感应板上没有水滴时,

DO输出为高电平,开关指示灯灭;滴上一滴水,DO输出为低电平,开关指示灯亮;              刷掉上              面的水滴,又输出高电平状态

AO模拟输出,可以连接单片机的AD口检测滴在上面的雨量大小。

接线方式:
                            1、VCC:接电源正极(3-5V)
                            2、GND:接电源负极
                            3、DO:TTL开关信号输出
                            4、AO:模拟信号输出

2、霍尔传感器

电路设计如图:

传感器附近无磁场时,P0.4 输出高电平。当传感器附件有磁场时,P0.4 输出低电平。

3、TX51单片机实验板(带LCD1602、LED灯、蜂鸣器)

③系统连接图:

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

源程序:

Main.c
//本工程基于普中单片机开发板,晶振12MHz
#include <config.h>

#include <uart.h>

sbit beep=P1^5;//蜂鸣器
sbit rain=P1^1;//雨滴传感器开关输出引脚:无雨滴输出1,否则输出0
sbit hall=P1^2;//霍尔传感器开关输出引脚:有磁场输出1,否则输出0


u8 flag=0;              //0:叮,1:咚
u16 n0=0,n1=0;  //n0:叮周期计数,n1:咚周期计数

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<200;i++)//叮
      {beep=0;delay_us(50);beep=1;delay_us(50);}
   for(j=0;j<100;j++)//咚
      {beep=0;delay_us(110);beep=1;delay_us(110);}
}
}

void Alarm_Init() //蜂鸣器报警,定时器T0
{
              TMOD&=0xf0;//定时器T0设为方式2,8位自动装载模式
    TMOD|=0x02;
              TH0=0X00;
              TL0=0X00; //定时250us
              EA=1;
              ET0=1;
}

void Alarm_Power(u8 t) //打开/关闭蜂鸣器报警,定时器T0,1:打开,0:关闭
{
              TR0=t;
}

void main()
{
            
              uart_init(4800);
            
              while(1)
              {   
                            if(rain==0) //下雨
                            {
                                          delay_ms(10);                //消抖动
                                          if(rain==0)                //确认触发
                                          {
                                                        if(hall==1)              //确认没有磁场,表示窗户没关
                                                        {
                                                           uart_send_str("rain");
                                                           uart_send_str("close the door");
                                                           Alarm(1);//启动报警响5秒                                                      
                                                        }
                                                        else            
                                                        {
                                                                      uart_send_str("rain");
                                                                      beep =0;
                                                        }
                                          }
                            }                                                         
              }
}

//叮(一个周期高250us低250us,共500个周期,0.25秒),咚(一个周期高500us低500us,共250个周期,0.25秒)
void time0() interrupt 1
{
              if(flag==0)
              {
                            n0++;
                            if(n0==1000)                           
                            {
                                          n0=0;
                                          flag=1;
                            }
                            else
                            {
                                          beep=~beep;
                            }
              }
              else
              {                                                                         //通过改变定时计数时间可以改变门铃的声音
                            n1++;                                            //叮
                            if(n1==1000)
                            {
                                          n1=0;
                                          TR0=0;
                                          flag=0;
                            }
                            else
                            {
                                          if(n1%2==0)              beep=~beep;
                            }
              }
}
3. 将hex文件下载到实验板运行,描述实验现象
实验现象:
当雨滴传感器的out脚输出低电平时,或霍尔传感器out脚输出低电平时,蜂鸣器响,提示下雨了没关窗,其他情况蜂鸣器不响。

实验总结
通过本次实验了解了霍尔传感器工作原理了解雨滴传感器工作原理,学会了使用霍尔传感器以及雨滴传感器的基本编程思维。

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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