前言
通过利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。
HC-SR04模块
**HC-SR04超声波模块常用于机器人避障、物体测距、液位检测、公共安防、停车场检测等场所。HC-SR04超声波模块主要是由两个通用的压电陶瓷超声传感器,并加外围信号处理电路构成的。
参数:
Operating Voltage | Dc5V |
---|---|
Operating Current | 15ma |
Operating Frequency | 40KHz |
Max Range | 4m |
Min Range | 2cm |
Ranging Accuracy | 3mm |
Measuring Angle | 15° |
Trigger Input Signal | 10µS TTL脉冲 |
Dimension | 45 x 20 x 15 |
控制流程
- 通过Trig引脚发一个 10US 以上的高电平,模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
- 有信号返回时,Echo有高电平输出,高电平时间即是超声波往返时间。
- 测试距离 = (高电平时间 *声速)/2
通过单片机的定时器获得计时功能来获得检测距离,开启定时器后TH和TL寄存器数值会自动增加。直到关闭定时器,再读出其中的数值即可计算距离。
/*开始计时*/
while (!ECHO);//当ECHO为高电平的时候,跳出循环,并开始记录时间
TR0 = 1;//启动定时器0,开启计时
while (ECHO);//ECHO不为0,即脉冲返回结束,计时结束
TR0 = 0;//停止计时,此时的ECHO的高电平时间就是 超声波发出到重新返回接收所用的时间
代码
#ifndef _HC_SR04_H_
#define _HC_SR04_H_
#include //提供_nop_();/*供HC-SR04提供启动时间*/
/*位定义*/
sbit TRIG = P1 ^ 0;
sbit ECHO = P1 ^ 1;
/*全局变量定义,超出距离标志位为1,不超出为0*/
bit HC_SR04_flag;
/*函数声明*/
void HC_SR04_Init(void);//初始化T0定时器,用于HC_SR04
unsigned int HC_SR04(void);//返回距离
#endif
#include "HC_SR04.h"
/*******************************************************************************
** 函数名称: HC_SR04_Init
** 功能描述: 初始化定时器0,用以记录从发射到返回的时间Time
** 参数说明: void
** 返回说明: void
** 创建人员: Main
** 创建日期: 2020-06-01
**------------------------------------------------------------------------------
** 修改人员:
** 修改日期:
** 修改描述:
**------------------------------------------------------------------------------
********************************************************************************/
void HC_SR04_Init(void)
{
TMOD |= 0x01;
TH0 = 0;
TL0 = 0;
ET0 = 1; //允许T0中断,可关闭,只有特别大的才开
EA = 1;
TRIG = 0; //先使启动端置低,等待高电平启动
}
/*******************************************************************************
** 函数名称: HC_SR04
** 功能描述: 返回测量距离
** 参数说明: void
** 返回说明: 测量距离,单位(cm)
** 创建人员: Main
** 创建日期: 2020-12-22
**------------------------------------------------------------------------------
** 修改人员: Main
** 修改日期:
** 修改描述:
**------------------------------------------------------------------------------
********************************************************************************/
unsigned int HC_SR04(void)
{
unsigned int distance;//用于记录测得的距离
unsigned int time;//用于记录超声波发出到重新返回接收所用的时间
/*启动HC_SR04*/
TRIG = 1;//升高电平,打开触发信号
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TRIG = 0;
/*开始计时*/
while (!ECHO);//当ECHO为高电平的时候,跳出循环,并开始记录时间,当为低电平时卡住不动
TR0 = 1;//启动定时器0,开启计时
while (ECHO);//ECHO不为0,即脉冲返回结束,计时结束
TR0 = 0;//停止计时,此时的ECHO的高电平时间就是 超声波发出到重新返回接收所用的时间
/*计算时间及距离*/
time = (TH0 * 256 + TL0) * 1.29; //可改变此数据来提高精确度
distance = (time * 0.034) / 2; //单位是cm,0.34是mm
TH0 = 0; //清零,进行下一次测距
TL0 = 0;
//返回距离
return distance;
}
/*******************************************************************************
** 函数名称: T0_Time_Sr04
** 功能描述: 超出测量距离的异常
** 参数说明: None
** 返回说明: void
** 创建人员: Main
** 创建日期:
**------------------------------------------------------------------------------
** 修改人员:
** 修改日期:
** 修改描述:
**------------------------------------------------------------------------------
********************************************************************************/
void T0_Time_Sr04() interrupt 1
{
HC_SR04_flag = 1;
//TI=1;
//printf("超出距离");
//TI=0;
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
单片机
+关注
关注
6036文章
44555浏览量
635066 -
超声波
+关注
关注
63文章
3017浏览量
138371 -
51单片机
+关注
关注
274文章
5702浏览量
123579 -
定时器
+关注
关注
23文章
3247浏览量
114769
发布评论请先 登录
相关推荐
基于51单片机的超声波测距系统
AT89C2051。采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。单片机用P3.5端口输出超声波换能器所需的40kHz的方波信号,P3.6端口监测超声波接收电路输出的
发表于 03-25 10:21
基于SLH89F5162的单片机超声波测距器设计
方案标题:基于SLH89F5162的单片机超声波测距器设计方案概述:本设计旨在设计一种一种基于单片机实时语音播报,带有LED数码显示功能的脉冲反射式
发表于 10-18 14:16
基于51单片机的超声波测距模块设计
超声波测距的模块,51单片机接上12864液晶,HC-SR04超声波模块,就可以了,具体程序没怎么看,超声波模块的硬件也不晓得。
发表于 12-10 16:33
•6973次阅读
【51单片机—定时器应用】定时器计数、定时器中断函数、while(1)三者之间是如何协调、工作?
51单片机程序,使用定时器时,定时器计数、定时器中断函数、while(1)循环三者之间如何协调好整个流程?【
发表于 11-20 18:51
•12次下载
求助51单片机超声波测距
**自己暑假搞了搞单片机,但是被困在了oled不显示我测的实时数据,求帮忙**(stc89c52rc芯片,hc-sr04超声波测距模块)代码如下:`#include &lt
发表于 11-23 18:21
•0次下载
单片机高级系列丨超声波测距(数码管显示)
单片机高级系列丨超声波测距(数码管显示)超声波模块的TRIG管脚接在单片机的P20口,ECHO管脚接在单片机的P21口 其他的电源管脚接在
发表于 11-26 14:51
•24次下载
评论