超声波测距模块HC-SR04

一、实物图

超声波测距模块HC-SR04 1 - 斯塔克电子

二、原理图

超声波测距模块HC-SR04 2 - 斯塔克电子

编号 名称 功能
1 VCC 电源正
2 TRIG 触发控制信号输入
3 ECHO 回响信号输出
4 GND 电源地

三、简介

由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物体测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人研制上也得到了广泛的应用。

HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度3mm,模块包括超声波发射器、接收器与控制电路。

基本工作原理:

超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回,超声波接收器收到反射波就立即停止计时。测试距离=(计时时间*声速)/2

超声波测距模块HC-SR04 3 - 斯塔克电子

四、电器特性

超声波测距模块HC-SR04 4 - 斯塔克电子

五、时序解析

超声波测距模块HC-SR04 5 - 斯塔克电子

(1)采用IO口TRIG触发测距,给最少10us的高电平触发信号。

(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;

(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。

(4)测试距离=(高电平时间*声速)/2;

代码如下:

/****

*******获取距离函数

Hcsr04_temp:当前的环境温度

返回值:测得的距离(距离单位cm)

*****/

uint Hcsr04_GetDistance(uint Hcsr04_temp)

{

   uint Hcsr04_distance;           //用于记录测得的距离

   float Hcsr04_speed;             //保存超声波的速度值

   TH2 = 0;             //使用定时器2作为计时器

   TL2 = 0;

   HCSR04_Trig = 0;     //给超声波模块一个高电平的开始脉冲

   Hcsr04_Delay(20);

   HCSR04_Trig = 1;

   Hcsr04_Delay(20);

   HCSR04_Trig = 0;

   while(!HCSR04_Echo);    //等待超声波模块的返回脉冲

   TR2 = 1;                //启动定时器,开始计时

   while(HCSR04_Echo);     //等待超声波模块的返回脉冲结束

   TR2 = 0;                //停止定时器,停止计时

   Hcsr04_speed = 0.607*Hcsr04_temp 331.4;             //根据公式 v=0.607T 331.4 计算出当前温度值对应的超声波速度,这时的单位是“米/秒”

   Hcsr04_speed = Hcsr04_speed/10000;                  //将超声波的速度从单位“m/s”转为“cm/us”,方便后面的计算

  Hcsr04_distance=((TH2*256 TL2) * (12/FOSC) * Hcsr04_speed) / 2;           // 距离cm = (时间us * 速度cm/us) / 2

   if(Hcsr04_distance > 500)  //把检测结果限制500厘米内

   Hcsr04_distance = 500;

   return Hcsr04_distance;

}

六、流程设计

首先初始化引脚,然后复位定时器计数值,接着给超声波一个高电平的开始信号,等待超声波模块的返回脉冲,接到返回脉冲,则开始计时,然后等待超声波模块的返回脉冲结束,如果结束,则停止计时。接下来通过温度补偿计算声波速度,通过距离=(时间*速度)/2最终得到距离值。最后判断距离值是否超过量程,如果超过量程则将距离值设置成最大量程值。

超声波测距模块HC-SR04 6 - 斯塔克电子

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
有新私信 私信列表
搜索