超声波测距模块可提供非接触式距离感测功能;模块包括超声波发射器、接收器和控制电路。其工作原理为当接收到信号后,发射器发出音速的超声波信号,信号在受到物品阻挡时会返回并被接收器检测到,当接收器检测信号返回;通过计算信号发送的时间与接收到信号的时间差,配合音速的速度值,计算出传感器与阻挡物体之间的距离。
其计算公式为:
距离 = 传播速度 X 时间 / 2
超声波在空气中的速度是固定的:340米/秒
时间为声波发出到接收到的时间差
除于2是因为声波需要往返传播
例如:
如果超声波从发射到接收的时间差为2秒,那距离可以计算为
距离 = 340 * 2 / 2 = 340
可以得出,中间的距离为340米
测距传感器与普通的接近开关和光电传感器有所不同。相比于电感式或电容式接近开关,测距传感器具有更长的检测距离,能够实现更远距离的检测。而与光电传感器相比,测距传感器可以应用于更恶劣的环境中,不受目标物的颜色以及空气中灰尘、水雾等因素的影响。超声波的传输速度容易受天气影响,在不同的天气条件下,超声波传输速度不同且较慢。当汽车高速行驶时,使用超声波进行测距无法及时跟踪车距的实时变化,从而导致较大误差。此外,超声波的散射角较大,方向性较差,在测量较远距离目标时,回波信号会较弱,影响测量精度。被测物体的面积不可以过小且平面尽量要求平整,否则会影响测量效果。然而,在短距离低速测量中,超声波传感器具有显著优势
HCSR04模块有4个引脚,对应分别是:
1、VCC电源正极
2、TRIG触发控制信号输入
3、ECHO回声信号输出
4、GND电源负极
在之前的文章中,我们介绍过如何安装第三方库,以及使用Arduion IDE自带的库管理器来安装第三方库,在这里,我们介绍另一种方法来安装第三方库。
本章中,我们所使用的是一个名为HCSR04-ultrasonic-sensor-lib by gamegine的第三方库,下载地址:GitHub - gamegine/HCSR04-ultrasonic-sensor-lib: Arduino lib for HCSR04 ultrasonic sensor
我们可以在页面里下载该库源代码:
下载时,记录好下载到的源代码文件所在的目录
我们在Arduion IDE里选择 "项目=>加载库=>添加ZIP库 ",在文件选择框里找到下载到的库源代码,是ZIP格式的压缩包文件。
安装完成后,我们可以在 "项目=>加载库 "里的菜单里看到:
点击后,会自动插入需要的头文件:
#include <HCSR04.h>
该库本身是一个针对Arduino 库 HCSR04 传感器,但在ESP32上也可以应用。
这里我们选择4号引脚为触发控制信号输入(TRIG),18号引脚为回声信号输出(ECHO):
#define TRIGPIN 4 //TRIG
#define ECHOPIN 18 //ECHO
我们还需要创建一个HCSR04对象:
HCSR04 hc(TRIGPIN, ECHOPIN); //创建HCSR04对象(参数:trig引脚 , echo引脚)
测距函数:dist()
函数:dist()
作用:获取距离数据
格式:float dist(int n)
参数:n -引脚序号,需要同时连接多个传感时使用
返回:返回float类型的距离数据(单位:CM)
硬件连接
完整代码:
#include <HCSR04.h>
#define TRIGPIN 4 //TRIG
#define ECHOPIN 18 //ECHO
HCSR04 hc(TRIGPIN, ECHOPIN); //创建HCSR04对象(参数:trig引脚 , echo引脚)
void setup()
{
Serial.begin(115200);
}
void loop()
{
float distance = hc.dist(); //获取距离数据
Serial.print("当前距离:");
Serial.println(distance); //输出距离数据
Serial.println("CM");
delay(200);
}
我们可以把一个足够尺寸和相对平整的物体从远到近或从近到远来测试超声波测试结果