内容正文:
任务3-3 声光报警器设计
1
一、任务导入
任务要求
通过单片机控制蜂鸣器发出声音、发光二极管发光,向人们发出警示信号。
采用一个弹性按键K模拟报警开关,K按下时启动报警,K放开时解除报警;一个绿色发光二极管D1和一个红色发光二极管D2模拟光报警,绿色D1亮,表示正常状态,红色D2闪烁表示报警;采用蜂鸣器模拟声音报警,当报警启动时,蜂鸣器闹响。
硬件电路
P0.0引脚通过上拉电阻与+5V电源连接,当K没有按下时,P0.0引脚保持高电平,当K按下时,P0.0 引脚接地,因此通过读取P0.0引脚的状态,就可以得知按键K是否被按下,启动报警信号。
P1.0引脚控制蜂鸣器进行声音报警,P1.1引脚控制绿色发光二极管模拟的报警灯,P1.2引脚控制绿色发光二极管模拟的报警灯。
二、程序设计
#include <reg51.h> //包含头文件reg51.h,定义了51单片机专用寄存器
sbit K=P0^0; //按键控制端
sbit beep=P1^0; //蜂鸣器控制端,采用无源蜂鸣器
sbit green=P1^1; //绿色发光二极管控制端
sbit red=P1^2; //红色发光二极管控制端 ;
void main()
{
green=0; //点亮绿灯,熄灭红灯,正常工作状态,无报警,无声音
red=1;
while(1)
{
if(K==0) //判断按键是否按下
{
delay(200); //延时去抖动
if(K==0) //再次判断是否有键按下
{
green=1; //启动报警,绿灯熄灭
red=0; //红灯闪烁
beep=0; //启动发声
delay(100); //调用延时函数
red=1;
beep=1;
}
}
else
{ green=0; red=1; } //报警解除
}
}
三、举一反三
采用热释电红外传感器模块取代按键K启动/解除警报,设计人体感应声光报警器。当有人体接近被安全保护的物体目标时,启动报警;当人体离开后,解除关闭报警。
举一反三1
9
什么是热释电红外传感器呢?
10
是一种能够感应到人体接近并给出电信号的器件。
热释电红外传感器模块感应运动中的人体,有三个引脚,其中标有“+”端是正电源;标有“-”端是地;标有“OUT”端是输出引脚。当有人靠近时,输出UOUT=3V;当无人靠近时输出UOUT=0V。电源工作电压为DC4.5~20V;感应角度为110度;静态电流小于40μA;感应距离为1~5米。
11
当有人靠近时,输出UOUT=3V,
在P0.0上读到高电平1。
当无人靠近时,输出UOUT=0V,
在P0.0上读到低电平0 。
硬件设计
12
void main()
{
green=0; //点亮绿灯,熄灭红灯,正常工作状态,无报警,无声音
red=1;
while(1)
{
if(K==1) //检测到有人靠近
{
green=1; //启动报警,绿灯熄灭
red=0; //红灯闪烁
beep=0; //启动发声
delay(100); //调用延时函数
red=1;
beep=1;
}
else
{ green=0; red=1; } //报警解除
}
}
用热释电红外传感器来测试人体接近目标的方法,采用单片机来控制一个直流电机运转,实现垃圾桶盖的闭合控制。
举一反三2
怎么使用直流电机呢?
15
直流电机只需接上直流电源即可转动,连接在直流电机两个引脚上的直流电源极性决定了电机的转动方向。
16
用单片机I/O端口驱动直流电机时,只要直接在对应的控制I/O端口输出高低电平,电机就能正转和反转。
但单片机的I/O端口能提供的输出电流只有几毫安,驱动能力有限,而直流电机的额定工作电流至少需要几百毫安,所以必须外加驱动电路,提供足以保证直流电机旋转的电流。
17
电机驱动芯片L298
引脚 名称 引脚说明 连接方法
4 Vs 动力电源,2.5~4.6V +12V,接电容滤波
9 Vss 逻辑电源,4.5~7V +5V,接电容滤波
8 GND 地 地
5,7 IN1,IN2 A桥输入引脚,TTL兼容 连接单片机I/O
2,3 OUT1,OUT2 A桥输出引脚 直接连接电机
6 ENA A桥使能端,高电平有效 连接单片机I/O
10,12 IN3,IN4 B桥输入引脚,TTL兼容 连接单片机I/O
13,14 OUT3,OUT4 B桥输出引脚 直接连接电机
11 ENB B桥使能端,高电平有效 连接单片机I/O
1,15 ISENA,ISENB A、B桥输出电流反馈引脚 地
4 通道逻辑驱动电路。可驱动两个直流电机,或一个两相步进电机。
18
硬件电路
(1)人体感应信号测试功能,测试P0.1引脚的电平状态。
(2)电机正转功能:P1.5=1、P1.3=1、P1.4=0;若要电机停止,只需让P1.3=0即可。
(3)电机反转功能:P1.5=1、P1.3=0、P1.4=1;若要电机停止,只需让P1.4=0即可。
19
#include "reg51.h" //包含头文件reg51.h,定义了51单片机的专用寄存器
sbit hw=P0^1; //红外控制端
sbit P1_3=P1^3; //电机驱动控制端
sbit P1_4=P1^4; //电机驱动控制端
sbit P1_5=P1^5; //电机驱动控制端
void main()
{
bit flag=0; //桶盖打开标志位变量,为1表示桶盖打开,否则表示桶盖关闭
while(1)
{
if((hw==1)&&(flag==0))
{ P1_3=1; //电机运转,控制打开桶盖
P1_4=0;
P1_5=1;
delay(20000); //延时,等待桶盖打开完成
P1_3=0; //电机停转,保持桶盖打开状态
flag=1; //设置桶盖打开标志
}
else if(hw==0&&flag==1)
{
P1_3=0; //电机反向运转,关闭桶盖
P1_4=1;
P1_5=1;
delay(20000); //延时,等待桶盖关闭完成
P1_4=0; //电机停转,保持桶盖关闭状态
flag=0; //设置桶盖关闭标志
}
}
}
$$