前面我们学了人体感应、光敏、声音、震动等各种传感器,但它们只能感知"有没有"。今天要学一个更厉害的传感器——超声波测距模块,它能精确测量前方物体有多远

倒车雷达、机器人避障、液位检测、自动门感应……这些应用的背后,都是超声波测距模块在工作。

今天这节课,我们就用HC-SR04超声波模块,让ESP32能精确测量距离!

第一步:找到课程,看看成品效果

打开逗脑IDE,点击顶部 “文档",在 “课程” → “ESP32 + MicroPython” 分类下,找到超声波测量距离

在这里插入图片描述

打开课件,你会看到本节课的最终效果:把手放在超声波模块前方,终端实时打印出精确的距离数值(如"当前测量距离为:25.36 cm"),手靠近数值变小,手远离数值变大。

在这里插入图片描述

在这里插入图片描述

第二步:认识超声波模块

HC-SR04是最常用的超声波测距模块,它有两个"眼睛"一样的东西:

在这里插入图片描述

两个"眼睛"的作用:

部件作用
发射端(T)发出超声波(人耳听不到的高频声波)
接收端(R)接收遇到物体后反射回来的超声波

四个引脚:

引脚连接ESP32说明
VCC5V电源正极(必须5V,3.3V不稳定)
GNDGND电源地
TRIGGPIO15触发信号(输出)
ECHOGPIO2回响信号(输入)

第三步:超声波测距的原理

超声波测距的原理其实很简单——就像对着山谷喊一声,听回声要多久

在这里插入图片描述
在这里插入图片描述

具体流程:

  1. ESP32给TRIG引脚一个10微秒的高电平脉冲(相当于"喊一声")
  2. 模块发出超声波
  3. 超声波遇到前方的物体,反射回来
  4. 模块接收到回波,ECHO引脚从高电平变为低电平
  5. ESP32记录ECHO高电平持续的时间(就是超声波来回的时间)
  6. 用公式计算距离:

距离 = 声速 × 时间 ÷ 2

  • 声速:340米/秒(空气中)
  • 时间:ECHO高电平持续时间
  • ÷2:因为超声波是来回的,算出来的是往返距离

举例:

  • 如果ECHO高电平持续了12848微秒
  • 距离 = 340m/s × (12848 / 1000000)s ÷ 2 = 2.18米 = 218厘米

第四步:动手接线

超声波模块引脚连接ESP32说明
VCC5V电源正极
GNDGND电源地
TRIGGPIO15触发信号输出
ECHOGPIO2回响信号输入

在这里插入图片描述

📌 重要提示: VCC一定要接5V!3.3V下超声波模块工作不稳定,测距会不准确。

第五步:代码——发脉冲,测时间,算距离

from machine import Pin
import time

# 引脚设定
trig = Pin(15, Pin.OUT)   # 触发引脚
echo = Pin(2, Pin.IN)     # 回响引脚

def measure():
    # 1. 发送触发信号(10微秒高电平)
    trig.value(1)
    time.sleep_us(10)
    trig.value(0)
    
    # 2. 等待ECHO变为高电平,记录起始时间
    while echo.value() == 0:
        t1 = time.ticks_us()
    
    # 3. 等待ECHO变为低电平,记录结束时间
    while echo.value() == 1:
        t2 = time.ticks_us()
    
    # 4. 计算时间差(单位:厘米)
    t3 = time.ticks_diff(t2, t1) / 10000
    
    # 5. 距离 = 声速 × 时间 ÷ 2
    return t3 * 340 / 2

# 主循环
try:
    while True:
        print("当前测量距离为:%0.2f cm" % measure())
        time.sleep(1)
except KeyboardInterrupt:
    pass

代码逻辑:

步骤操作说明
1TRIG输出10μs高电平“喊一声”
2等待ECHO变高,记录t1开始计时
3等待ECHO变低,记录t2停止计时
4t2 - t1超声波往返时间
5时间 × 340 ÷ 2计算距离(厘米)

第六步:保存运行,测一测距离!

保存测试代码,选择ESP32设备,文件名ultrasonic.py

在这里插入图片描述

点击运行按钮,终端开始不断打印距离:

在这里插入图片描述

试试看:

  • 手放在模块前方10cm → 终端显示约10cm
  • 手慢慢往后移动 → 数值逐渐增大
  • 手慢慢靠近 → 数值逐渐减小
  • 模块对着墙壁 → 能测出房间宽度

超声波测距能做什么?

应用场景用途
倒车雷达检测车后方障碍物距离
机器人避障检测前方障碍物,自动转向
液位检测测量水箱、油箱的液位高度
自动门人靠近时自动开门
智能垃圾桶手靠近自动开盖
身高测量仪测量身高
停车位引导检测车位是否有车

测距范围和精度

参数指标
测量范围2cm ~ 400cm
测量精度±0.3cm
测量角度15°
工作电压5V
工作电流15mA

📌 注意事项:

  • 测量角度较窄(15°),前方物体最好正对模块
  • 太近(<2cm)或太远(>4m)时,测量可能不准确
  • 软质物体(如海绵、衣物)会吸收超声波,测量效果差

与其他测距传感器对比

超声波红外测距激光测距
测量范围2~400cm10~80cm更远
精度±0.3cm±几cm
受光线影响❌ 不受影响✅ 受强光影响✅ 受影响
价格便宜便宜较贵
适合场景通用避障短距离检测高精度测距

全程回顾

步骤操作效果
找到课程文档→课程→ESP32+MicroPython→超声波测量距离了解超声波测距
认识原理发出→反射→接收,计算时间理解"回声测距"原理
动手接线VCC→5V, GND→GND, TRIG→GPIO15, ECHO→GPIO2硬件就位
打开代码点击“打开”按钮代码进入编辑器
保存运行Ctrl+S → 选择ESP32 → 运行开始测距
测试距离手放在模块前方,前后移动终端实时显示距离!

在这里插入图片描述

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐