1. 引言
超声波传感器是嵌入式开发和机器人项目中非常常见的一种测距传感器。它通过发射超声波并接收回波来测量与障碍物之间的距离,具有成本低、精度较高、不受光线和颜色影响等优点,广泛应用于避障小车、倒车雷达、液位检测等场景。
本篇文章将带你从超声波测距的基本原理出发,结合硬件接线和代码实现,完成一个完整的超声波测距实验,并给出常见问题的排查思路。
2. 超声波测距原理
超声波传感器(以 HC-SR04 为例)的核心工作原理是发射-回波时间差法。
其工作流程如下:
- 控制端向传感器的 Trig(触发)引脚发送一个持续 10µs 以上的高电平脉冲。
- 传感器内部电路发射一串 40kHz 的超声波脉冲,同时将 Echo(回波)引脚置为高电平。
- 超声波遇到障碍物后反射回来,被传感器接收。
- 传感器将 Echo 引脚拉低,Echo 高电平持续的时间即为超声波往返的总时间 t。
- 根据声速 v(空气中约为 340m/s)计算距离:距离 = v × t / 2(除以 2 是因为超声波走了往返两趟)。
注意:声速会随温度变化,常温下近似取 340m/s 即可满足大多数实验需求。
3. 硬件系统框图
整个超声波测距实验的硬件系统由主控模块、传感模块和电源模块三部分组成,其整体结构如下图所示:
各部分的作用如下:
- 主控模块(Arduino Uno):负责产生触发脉冲、接收回波信号并计算距离,是整个系统的控制核心。
- 传感模块(HC-SR04):负责发射和接收超声波,将往返时间转换为 Echo 引脚上的高电平持续时间。
- 电源模块:为传感器提供稳定的 5V 供电,保证测量过程可靠运行。
- 上位机(串口监视器):接收主控模块发送的距离数据,用于实时观察测量结果。
系统工作时,主控模块向传感器发送触发信号,传感器返回回波信号,主控模块据此计算出距离并通过串口输出到上位机显示,形成完整的测距闭环。
4. 实验代码实现
下面以 Arduino 为例,编写一个简单的超声波测距程序。程序每隔 500ms 测量一次距离,并将结果输出到串口监视器。
// 定义引脚constinttrigPin=9;constintechoPin=10;voidsetup(){Serial.begin(9600);pinMode(trigPin,OUTPUT);pinMode(echoPin,INPUT);}voidloop(){// 清空 Trig 引脚digitalWrite(trigPin,LOW);delayMicroseconds(2);// 发送 10µs 的高电平触发脉冲digitalWrite(trigPin,HIGH);delayMicroseconds(10);digitalWrite(trigPin,LOW);// 读取 Echo 引脚高电平持续时间(单位:微秒)longduration=pulseIn(echoPin,HIGH);// 计算距离(单位:厘米)floatdistance=duration*0.034/2;// 输出到串口Serial.print("Distance: ");Serial.print(distance);Serial.println(" cm");delay(500);}代码说明:
pulseIn(echoPin, HIGH)会阻塞等待 Echo 引脚变为高电平,并返回高电平持续的时间(微秒)。- 距离计算公式中,
0.034是声速 340m/s 换算成 cm/µs 后的值(34000 cm/s ÷ 1000000 µs/s = 0.034 cm/µs)。 - 除以 2 是因为超声波往返了两次距离。
5. 实验现象与结果分析
将代码烧录到 Arduino 后,打开串口监视器(波特率 9600),可以看到类似如下的输出:
Distance: 12.34 cm Distance: 12.40 cm Distance: 12.28 cm当用手或书本在传感器前方来回移动时,串口输出的距离值会随之变化,说明测距功能正常。
5.1 测量误差分析
- 盲区问题:HC-SR04 存在约 2cm 的测量盲区,距离过近时读数不稳定。
- 声速受温度影响:温度升高时声速增大,若仍按 340m/s 计算会产生误差。
- 反射面影响:柔软表面(如布料)会吸收超声波,导致回波减弱甚至丢失。
6. 常见问题与排查
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 串口无输出 | 接线错误或代码未烧录成功 | 检查 VCC/GND 接线,重新烧录 |
| 距离一直为 0 | Trig 引脚未正确触发 | 检查触发脉冲宽度是否 ≥10µs |
| 距离读数跳变很大 | 传感器前方有干扰或反射面不平整 | 增加测量取平均,或调整安装角度 |
| 近距离测不到 | 超出传感器盲区 | 保持距离 ≥2cm |
7. 扩展与进阶
掌握了基础测距后,可以尝试以下进阶玩法:
- 避障小车:将超声波传感器安装在舵机上,扫描前方障碍物并控制小车转向。
- 多传感器融合:结合红外传感器或摄像头,提高环境感知的鲁棒性。
- 温度补偿:使用温度传感器读取环境温度,动态修正声速,提高精度。
- 液位检测:将传感器朝下安装,测量容器内液面高度。
8. 总结
本文从超声波测距原理出发,完成了 HC-SR04 传感器的硬件接线、Arduino 代码编写和实验现象分析,并整理了常见问题的排查方法。超声波传感器虽然原理简单,但在实际项目中非常实用,是入门嵌入式测距实验的绝佳选择。
希望这篇实验教程对你有所帮助,动手试一试吧!