视频放大后不清晰,可将鼠标放在视频上,右上角出现“去bilibili观看”进行点击,转到B站观看清晰版本
一、实物图
二、原理图
编号 | 名称 | 功能 |
1 | VCC | 电源正 |
2 | TRIG | 触发控制信号输入 |
3 | ECHO | 回响信号输出 |
4 | GND | 电源地 |
三、简介
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物体测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人研制上也得到了广泛的应用。
HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度3mm,模块包括超声波发射器、接收器与控制电路。
基本工作原理:
超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回,超声波接收器收到反射波就立即停止计时。测试距离=(计时时间*声速)/2
四、电器特性
五、时序解析
(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最终得到距离值。最后判断距离值是否超过量程,如果超过量程则将距离值设置成最大量程值。