HC-SR04 超声波模块怎么测距离?Arduino 接线 + echo 计时原理

2026-10-21 16:40:11 9阅读

避障小车、倒车雷达、水箱液位、自动门——这类测距场景里最常见的就是 HC-SR04 超声波模块。它便宜、皮实、四根线接上就能用。这篇讲清楚它的原理、接线和怎么在 Arduino 里读取距离。

模块原理:Trig 发声,Echo 测量

HC-SR04 上有两个圆形的“眼睛”:一个是发射端,一个是接收端。你给 Trig 脚一个 10 微秒的高电平脉冲,模块就会发出一串 40kHz 的超声波;声波碰到物体弹回来,被接收端捕获后,Echo 脚会输出一个宽度和时间成正比的高电平。用这个高电平的时长乘上声速再除以 2,就是距离。

HC-SR04 与 Arduino 的四线接线示意(VCC-Trig-Echo-GND)

接线就四根线

VCC 接 5V,GND 接 GND,Trig 接一个数字脚(下面用 D9),Echo 接另一个数字脚(用 D10)。很多教程会提醒 Echo 输出是 5V,接 3.3V 的单片机时要分压,用 Arduino Uno 这类 5V 板子直接连就行。

HC-SR04 模块引脚与 Trig/Echo 说明

测距代码

可以用官方自带的 pulseIn 函数,写法很直观:

const int trig=9,echo=10;
void setup(){
  Serial.begin(9600);
  pinMode(trig,OUTPUT);
  pinMode(echo,INPUT);
}
void loop(){
  digitalWrite(trig,LOW); delayMicroseconds(2);
  digitalWrite(trig,HIGH); delayMicroseconds(10);
  digitalWrite(trig,LOW);
  long t=pulseIn(echo,HIGH);      // 微秒
  float cm=t/58.0;                // 换算成厘米
  Serial.print("距离: "); Serial.println(cm);
  delay(100);
}

用 newPing 库更省事

如果做避障小车,可以直接用 newPing 这个库,它把发送、计时、换算都封装好了,一句 newPing sonar(trig,echo) 就能 probe 出距离,还能做多次取平均、距离过滤,避障逻辑写起来清爽很多。

常见坑

一是有效测量范围一般在 2cm~400cm,离得太近或太斜都会读不准,安装时让探头发射面正对目标。二是供电要稳,插在面包板上长线供电容易误触发,尽量单独走 5V。三是室内多面墙会反射出“假回波”,配合多次采样取中值能明显改善。


作者:算法老K
链接:https://www.aiddithome.com/p/200b66056ccb00.html
本作版权归作者所有,未经允许请勿转载。若存在违规行为,您可以点击 “举报”。


登录 后发表评论
4条评论
探头看一眼
1楼 · 2026-10-21 16:40:15

超声波测距原理就是往返计时,其实很好懂。

板砖搬不动
2楼 · 2026-10-21 16:40:14

“离太近读不准”说到点子上了,我 1cm 以内全是乱数。

锡点
3楼 · 2026-10-21 16:40:13

newPing 库确实好用,读数稳定多了,感谢分享。

触底反弹的Tony
4楼 · 2026-10-21 16:40:12

pulseIn 直接算厘米这个 t/58 记下了,避障小车没它不行。