-
福利一海量deepseek资料包(持续更新)
-
福利二ComfyUI工作流&模型&插件
-
福利三AI工具集合包以及AI绘画解决方案
| 型号 | HC-SR04 |
|---|---|
| 工作电压 | DC 5V |
| 工作电流 | 3.3mA |
| 工作温度 | -40~85℃ |
| 输出方式 | GPIO |
| 探测距离 | 2cm~600cm |
| 探测精度 | 3mm |



HC-SR04资料.zip: https://url78.ctfile.com/f/48495678-8435164507-23c8f2?p=549588 (访问密码: 549588)
传感器发射器向某一个确定的方向发射超声波的同时进行计时,超声波在碰触到障碍物之后会返回给超声波接收器一个反射波,此时停止计时,将时间纪录为 t。根据速度距离公式,结合超声波的传播速度与时间 t,可以推算出超声波发射点与所测量障碍物之间的距离为S=340t/2
1、 采用 IO 口 TRIG 触发测距,给最少 10us 的高电平
2、 模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回
3、 有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
测试距离 =( 高电平时间*声速 (343M/S))/2;
distance_cm= ( us)/58
注意:测量周期应为60ms以上,以防止发射信号对回响信号的影响,被测物体的面积应不小于0.5平方米且尽量要求平整,否则影响结果
HC-SR04 超声波传感器引脚定义
HC-SR04 是最常用的超声波传感器之一,适用于距离测量,测量范围一般为 2cm~400cm,精度约 3mm。它共有 4 个引脚,功能如下:
| 引脚名称 | 符号 | 功能描述 |
|---|---|---|
| 电源正极 | VCC | 接直流电源(通常为 +5V),为传感器提供工作电压。 |
| 触发信号输入 | TRIG | 输入触发脉冲信号(至少 10μs 的高电平信号),用于启动测距操作。 |
| 回声信号输出 | ECHO | 输出与测距对应的脉冲信号,高电平持续时间代表超声波从发射到接收的时间间隔。 |
| 电源负极 | GND | 接地,提供电源参考电位。 |
1、 触发信号输入(TRIG)
作用:通过单片机或控制器向 TRIG 引脚发送一个 高电平脉冲(宽度 ≥10μs),传感器接收到该脉冲后,会自动发射 8 个 40kHz 的超声波脉冲,并开始计时。
信号要求:
高电平持续时间只需满足 ≥10μs,通常用单片机的 GPIO 口输出 10μs~20μs 的脉冲即可。
触发信号的频率不能过高(建议两次测距间隔 ≥60ms),避免超声波重叠干扰。
2、回声信号输出(ECHO)
作用:传感器发射超声波后,若遇到障碍物反射回来,ECHO 引脚会输出一个 高电平脉冲,其 高电平持续时间 对应超声波从发射到接收的时间(即 飞行时间,T)。
计算原理:
距离公式:距离(cm)= (声速 × T)/ 2
声速默认取 340m/s(空气中,20℃时),因此公式可简化为:距离 = 高电平时间(μs)× 0.034 / 2 = 高电平时间 × 0.017。
例如:若 ECHO 高电平持续时间为 2000μs,则距离为 2000 × 0.017 = 34cm。
3、 电源引脚(VCC 和 GND)
电压要求:必须提供稳定的 +5V 直流电源,电源波动可能导致测量误差或传感器工作异常。
抗干扰措施:若系统中有多个传感器或高频元件,建议在 VCC 和 GND 之间并联一个 100μF 电解电容,用于滤波。
测量盲区:
传感器正前方近距离存在盲区(通常为 2cm~5cm),无法检测小于该距离的物体。
环境干扰:
避免在强风、高温、高湿度或有大量粉尘的环境中使用,这些因素会影响声速,导致测量误差。
远离强电磁干扰源(如电机、变频器等),防止干扰触发或回声信号。
| 模块引脚 | ESP32引脚 |
|---|---|
| Vcc | 5V |
| Trig | GPIO15 |
| Echo | GPIO4 |
| GND | GND |

from machine import Pin
import time
"""
echo脚会由0变为1此时MCU开始计时,当超声波模块接收到返回的声波时,echo由1变为0此时MCU停止计时
然后再通过声音的传输速度是340m/s就可以计算出距离,切记要除以2,毕竟声音是来回的距离
"""
def measure():
# 告诉芯片要开始测试了
trig.value(1)
time.sleep_us(10)
trig.value(0)
# 检测回响信号,为低电平时,测距完成
while echo.value() == 0:
# 开始不断递增的微秒计数器 1
t1 = time.ticks_us()
print("---------------------")
print(t1)
# 检测回响信号,为高电平时,测距开始
while echo.value() == 1:
# 开始不断递增的微秒计数器 2
t2 = time.ticks_us()
print(t2)
# 计算两次调用 ticks_ms(), ticks_us(), 或 ticks_cpu()之间的时间,这里是ticks_us()
# 这时间差就是测距总时间,在乘声音的传播速度340米/秒,除2就是距离
# 例如 t2-t1=12848此时单位是us,转换为秒就是12848 / 1000000 此时单位是秒,此时如果乘以340计算出的单位是米,
# 然后再乘以100就是厘米,因此,直接 用12848/10000即可
t3 = time.ticks_diff(t2, t1) / 10000
print(t3, t2-t1)
# 这里返回的是:开始测距的时间减测距完成的时间*声音的速度/2(来回)
return t3 * 340 / 2
# 引脚设定
trig = Pin(15, Pin.OUT)
echo = Pin(2, Pin.IN)
trig.value(0)
echo.value(0)
# try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理
try:
while True:
print("当前测量距离为:%0.2f cm" % measure())
time.sleep(1)
except KeyboardInterrupt:
pass