大家好!今天给大家分享Arduino实训项目——HC-SR04超声波测距。
超声波传感器是机器人避障、车位检测、距离检测、智能感应设备的核心外设,也是Arduino进阶必学模块。
本文从声音物理原理、超声波特性、传感器参数、工作时序零基础讲解,手把手完成串口实时测距、测距函数封装两大课堂实验,最后完成综合实训项目——超声波RGB车位指示灯课后作业,全程零基础友好,代码可直接烧录运行!
一、声音基础物理知识(实训前置知识点)
1. 声音三要素与音调原理
声音有响度、音调、音色三大特性,其中音调由声源振动快慢决定:
- 振动越快 → 频率越高 → 声音音调越高
- 振动越慢 → 频率越低 → 声音音调越低
频率单位为赫兹(Hz),根据频率范围,声波分为三类:
- 次声波:频率 < 20Hz,人耳无法识别,多由火山、地震、台风、海啸产生,易引发共振造成破坏
- 可闻声波:20Hz ~ 20KHz,人耳可正常听到的声音
- 超声波:频率 > 20KHz,人耳无法识别,是本次实验核心
2. 超声波核心优势与应用
超声波具备方向性好、穿透能力强、能量集中三大特点,生活中应用广泛:
- 军事领域:潜艇声呐测距探测
- 医疗领域:B超影像检测
- 生活领域:超声波清洗机
- 创客领域:超声波测距传感器(智能小车避障、车位检测)
二、HC-SR04超声波传感器参数详解
本次实训使用经典HC-SR04超声波模块,官方标准参数如下:
- 工作电压:5V
- 工作电流:15mA
- 测距范围:2cm ~ 450cm(2cm以内为检测盲区,无法精准测距)
- 探测角度:<15°
- 检测要求:被测物体面积不小于50cm²,表面尽量平整,避免测距误差过大
三、超声波测距核心公式与时序原理
1. 测距计算公式
常温下空气中声速:v = 344m/s
超声波采用发射-反射测距,声波往返传播,因此距离需要除以2:
距离 D = 声波速度 × 传播时间 ÷ 2
实训标准换算:1cm距离的声波往返时间约为 58μs,因此简化公式:距离(cm) = 高电平持续时间(μs) / 58
2. 标准工作时序(核心重点)



3. 核心函数说明
- delayMicroseconds(us):微秒级延时,用于产生10μs触发脉冲,最大值不超过16383
- pulseIn(pin, level):读取引脚指定电平的持续时间,返回微秒数值,用于获取Echo回应时间
四、硬件接线定义
- HC-SR04 VCC → Arduino 5V
- HC-SR04 GND → Arduino GND
- HC-SR04 Trig → Arduino D2(触发引脚)
- HC-SR04 Echo → Arduino D3(回应引脚)

五、课堂实验一:串口实时测距显示
1. 实验需求
驱动HC-SR04超声波模块,实时检测障碍物距离,并将数值打印在串口监视器中。
2. 完整实验源码
|
cpp void setup() { void loop() { // 2. 读取回声高电平时间 // 4. 串口打印数据 delay(200); |
3. 实验现象
上电后,串口监视器实时刷新距离数值,障碍物靠近数值变小、远离数值变大,2cm~450cm范围内测距精准,盲区无数据跳动。
六、课堂实验二:超声波测距自定义函数封装
为了代码复用、结构规范,本次实训要求将测距功能封装为带返回值的自定义函数,是Arduino函数编程的经典案例。
1. 函数知识点回顾
- 有返回值函数:需要返回数据结果,用于数据计算、检测采集(本次测距使用)
- void无返回值函数:仅执行动作,无数据返回,多用于执行控制
2. 封装后完整源码
|
cpp void setup() { // 自定义测距函数:有返回值,返回实时距离 float time = pulseIn(echoPin, HIGH); void loop() { delay(200); |
3. 代码优势
功能与实验一完全一致,但是代码结构更清晰,测距逻辑统一封装,后续项目可直接调用,减少代码冗余,是正规项目的标准写法。
七、课后练习:超声波智能车位指示灯
1. 作业需求
结合超声波模块+RGB指示灯实现车位状态检测:
- 车位无车(距离 > 30cm):点亮绿灯,表示车位空闲
- 车位有车(距离 ≤ 30cm):点亮红灯,表示车位占用
2. 硬件拓展接线
- 绿灯引脚:D4
- 红灯引脚:D5

3. 课后作业完整源码
|
cpp // 封装测距函数 float time = pulseIn(echoPin, HIGH); void setup() { void loop() { // 车位状态判断 delay(200); |
八、常见问题与误差排查
- 测距数值跳动大:被测物体不平整、面积过小,或环境有干扰,可多次测距取平均值优化;
- 近距离数值不准:2cm以内为模块盲区,属于正常现象;
- 无测距数据:检查Trig、Echo引脚接线是否颠倒;
- 车位灯状态异常:核对30cm阈值判断逻辑,排查LED正负极接线。
九、实训知识点总结
本次超声波测距实训,完美覆盖物理知识、硬件原理、编程语法三大板块,核心收获:
超声波测距是智能小车避障、智能门禁、液位检测、停车系统的核心基础,学好本实验,可以拓展超多智能硬件项目!
💡 所有代码实测可用、注释详细,可直接用于课程实训报告、结课作业与新手进阶练手!欢迎评论区交流问题~
