做自动避障小车、车库测距告警,很多人第一个用的距离传感器就是HC-SR04。它价格便宜、原理直观,靠发射超声波再听回声的时间差来算距离,几块钱就能让机器人"看见"面前的东西。这篇把它的四个引脚怎么接、脉冲怎么触发、距离怎么算讲透,顺带说几个容易卡壳的点。
先看懂HC-SR04的四根线
模块正面是两颗圆筒状的换能器,一颗负责发射超声波,一颗负责接收回波,整颗模块引出四个引脚:VCC接电源、GND接地、TRIG是触发输入、ECHO是回波输出。大部分模块VCC接5V,个别山寨版供电范围窄,按板子标注来。

要注意的是,HC-SR04的ECHO输出是5V的高电平信号。如果你的主控是ESP32、树莓派这类3.3V系统,直接接到引脚上可能烧IO口,中间串一个分压电阻或电平转换才是稳妥做法。
TRIG和ECHO怎么接线,怎么读数据
TRIG接Arduino任意一个数字输出脚,比如D9;ECHO接一个数字输入脚,比如D10。测量原理是:你给TRIG发一个至少10微秒的高电平脉冲,模块就会发出8个40kHz的超声波,然后立刻把ECHO拉高,直到收到回波再拉低。ECHO高电平持续的时间就对应声波往返的时长。

距离的计算公式是:距离等于高电平持续时间乘以声速,再除以2,因为那是往返路程。声速常温下按340米每秒算,换算成厘米就是持续时间的微秒数除以58,误差在几毫米到一两厘米,做避障够用。
三个容易翻车的坑
第一个是两次测量之间要留够间隔,超声波余波还没散尽就急着测第二次,会读到之前的回声干扰,一般两条读之间留个几十毫秒的延时比较稳。
第二个是程序里脉冲时序要写对:先让TRIG拉低、延时几微秒,再拉高10微秒,再拉低。很多人一上来拉高没给足时长,模块根本没触发。
第三个是pulseIn读回来的时长要用对单位。Arduino的pulseIn默认返回微秒,直接按上面的公式转换就行,别当成毫秒除错了。
小提示:发射锥角和反射面
HC-SR04的探测是个范围,发射角大约15度左右,正对着的平面反射效果最好,斜着放来测角会明显变远。做避障小车时把模块装在车头正前方、略朝下,能避开远处地面和杂物的误判。
按这套接好线、把10微秒触发脉冲和微秒公式写对,超声波避障基本一遍就能跑通。卡壳多半在触发时长和延时这两处,顺着查很快就能定位。


换到3.3V主控时echo分压那下提醒得好,我之前直接怼上去总担心烧口,串个分压就放心了
共地这个问题太关键了,我之前示波器看数据乱跳,把地和主控连一起就稳了,作者讲得实在
10us触发时长这个点真的坑,我一开始给太短模块压根不响应,看这篇才对齐