-
超声波测距报警器
功能介绍:
本设计可用于测距,
并附带报警功能
,
利用超声波检测往往比较迅
速、方便、计算简单、易于做到实
时控制,并且在测量精度方面能达
到工业实用的要求,测量范围为
~
,可应用于汽车倒车报警雷达。
工作原理:
超声波发射器向某一方向
发射超声波,
在发射时刻的同时开始计
时,超声波在空气中传播
,
途中碰到障碍物就立即返回来,超声波接
收器收到反射波就立
即停止计时。超声波在空气中的传播速度为
340m/s
,根据
计时器记录的时间
t
,就可以计算出发射点距障碍物的
距离
(s)
,即:
s=
340t/
2
超声波测距的原理是
利用超声波在空气中的传播速度为已知,
测量声
波在发射后遇到
障碍物反射回来的时间,
根据发射和接收的时间差计
算出发射点
到障碍物的实际距离。
总体系统分析:
本系统采用单片机
STC89C52
+
最小系统
+
数码管显示模块
+
数码管
驱动模块
+H
C-SR04
超声波传感器
+
蜂鸣器模
块
+
按键模块。
(
1
)本设计采用数码管显示测量的距离,
74HC573
和三极管驱动
数码管,使显示更亮。<
/p>
(
2
)
HC-
SR04
超声波模块测距,测量范围为
~
。
(
3
)
本设计附带报警装着,报警距离可以采用按键设定
(
4
)按键说明:三个按键从左往右依次为
+
p>
键,
-
键,设置键。
(
5
)本设计采用
usb
接口供电
硬件设计
HC-SR04
超声波测距模块可提供
2cm-400cm
的非接触式距离感
测功能,测距精度可达高到
3mm
;模块包括超声波发射器、接收
器与控制电路。
基本工作原理:
(
1
)采用
IO
口
TRIG
触发测距,给最少
10us
的高电平信呈。
(
2
)
模块自动发送<
/p>
8
个
40khz
的方波,
自动检测是否有信号返回;
(
3
)有信号返回,通过
IO
口
ECHO
输出一个高电平,高电平持续
的时间就是超声波从发射到返回的时间。测试距离
=
(高电平
时间
*
声速(
340M/S
)
)
/
2
超声波时序图:
以上时序图表明只需要提供一个
10uS
以上脉冲触发信号,
该模块
内
部将发出
8
个
40kHz
周期电平并检测回波。
一旦检测到有回波信号
则输出回响信
号。
回响信号的脉冲宽度与所测的距离成正比。
由此通
过发射信号到收到的回响信号时间间隔可以计算得到距离。公式:
uS/
58=
厘
米
或
者
uS/148=
英
寸
;
或
是
:
距
离
=
高
电
平
时
间<
/p>
*
声
速
(
340M/S
)
/
2
;建议测量周期为
60ms
以上,以防止发射
如右图接线,
VCC
供
5V
电源,
GND
为地线,
TRIG
触发控制信号
输入,
ECHO
回响信号输出等四个接口端。
软件分析
电路图如图所示
单片机程序代码:
#include
<>//
器件配置文件
#include <>
//
传感器接口
sbit RX
= P3^2;
sbit TX
= P3^3;
//
按键声明
sbit S1
= P1^4;
sbit S2
= P1^5;
sbit S3
= P1^6;
//
蜂鸣器
sbit Feng= P2^0;
//
变量声明
unsigned int
time=0;
unsigned int
timer=0;
unsigned char posit=0;
unsigned long S=0;
unsigned
long BJS=50;//
报警距离
80CM
//
模式
0
正常模式
1
调整
char Mode=0;
bit
flag=0;
unsigned
char
const
={0x3f
,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40
,0xff/*-*/};
discode[]
//
数码管显示码
09-
和
不显示
unsigned char const
positon[4]={0xfd,0xfb,0xf7,0xfe};
//
位选
unsigned char disbuff[4]
={0,0,0,0};
//
数组用于存放距离信息
unsigned char disbuff_BJ[4]
={0,0,0,0};//
报警信息
//
延时
1
00ms
(不精确)
void
delay(void)
{
unsigned char
a,b,c;
for(c=10;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
//
按键扫描
void Key_()
{
//+
if(S1==0)
{
}
//-
delay();
delay();
//
延时去抖
while(S1==0)
{
}
BJS++;
//
报警值加
P1=P1|0x0f;
if(BJS>=151)
//
最大
151
{
}
BJS=0;
else if(S2==0)
{
delay();
delay();
while(S2==0)
{
}
}
P1=P1|0x0f;
BJS--;
//
报警值减
if(BJS<=1)
//
最小
1
{
}
BJS=150;
//
功能
else if(S3==0)
{
delay();
delay();
while(S3==0)
{
}
Mode++;
//
模式加
//
加到
2
时清零
P1=P1|0x0f;
//
设置键
if(Mode>=2)
}
}
{
}
Mode=0;
/*******
**************************************************
*********************
******************
**********/
//
扫描数码管
void Display(void)
{
//
正常显示
if(Mode==0)
{
P0=0x00;
//
关闭显示
if(posit==0)//
数码管的小数点
{
}
else
{
P0=(discod
e[disbuff[posit]])|0x80;//
按位或,最高位变为
1
,显示小数点
-
-
-
-
-
-
-
-
-
上一篇:移相电路原理
下一篇:测井曲线符号极其单位符号