HC-SR04超声波模块怎么测距?Arduino接线和精度的几个坑

工位上的小周硬件DIY 2026-10-13 19:47:02 12阅读 举报

做避障小车、测距报警,很多人第一个接触的就是HC-SR04超声波模块,几块钱一颗,插上就能用,但用久了你会发现它其实有一堆小坑。这篇文章把它的原理、接线和最常见的几个问题一次讲透,让你避开那些让人挠头的返工。

HC-SR04是一种靠声波测距的模块,正面有两个圆柱形的“喇叭”,一个负责发出高频超声波,一个负责接收反射回来的回波。它不发射光线,所以跟红外、ToF这些视觉方案比,它不怕环境光,白天黑夜甚至是完全黑暗的房间里都能正常工作,这是它最大的优势。

原理:时差法测距

用法上,它自己并不计算距离,而是把“测距”这件事交给主控来做。具体是:主控先给TRIG引脚一个约10微秒的高电平脉冲,模块被触发后发出超声波,同时把ECHO引脚拉高;当模块收到回波,ECHO引脚再拉低。这个ECHO高电平维持的时间,就是声波从发出到返回的总飞行时间。

因为声速在常温下大约是每秒340米,所以距离就是飞行时间乘声速再除以2,减掉往返的重复计算。Arduino里用pulseIn读这个高电平时长,套进公式,就能得到以厘米为单位的距离值,整个过程不超过几毫秒。

接线和代码都很直接

接线就四根:VCC接5V,GND接地,TRIG和ECHO各接一个Arduino的GPIO引脚。代码方面,用digitalWrite触发TRIG、digitalRead读取ECHO、pulseIn测量时长,几行就能在串口监视器里看到实时距离数字。

这几个坑,测距不安稳多半是它们

第一个坑是回波超时。ECHO高电平能持续多久是有限制的,如果被测目标太远或根本没东西反射,pulseIn会一直等下去卡住程序,所以一定要给pulseIn设一个超时(比如26000微秒)。超时就把这次读数判成无效或设一个上限值,别让程序死等。

第二个坑是软性表面。声波打到棉花、布料、地毯这类吸声材料上反射很弱,测得不准甚至读不到,这也是很多“明明贴着东西却没反应”的真相。

第三个坑是单一目标下的“串扰”。模块正面发射角其实不小,遇到墙角、桌面边缘这种斜面会多次反射出假距离。解决的办法是加一点简单滤波,比如连续采样几次取中位数,把偶尔飘出来的异常值滤掉。

第四个坑是供电。模块正常用5V供电没问题,但如果接在电流很小的引脚或劣质线上,可能偶发读数跳变,给主控和模块都接稳定的供电,波动会小很多。

HC-SR04最大价值就是便宜、抗干扰、上手快。把超时、软目标、多径反射这几个点处理好了,一台稳稳定定的超声波避障小车很快就能立起来,之后再叠加其他传感器,玩法就丰富了。

版权声明:
作者:工位上的小周
链接:https://www.aiddithome.com/p/77f58e883b94e.html
来源:硬件DIY
实践版权归作者所有,未经允许请勿转载,若此实践存在违规行为,您可以点击 “举报”。


登录 后发表评论
3条评论
调参到凌晨
1楼 · 2026-10-13 19:49:13

pulseIn不加超时还真会卡死程序,这个坑我踩了一整天才找到,泪目

拆开看看再说
2楼 · 2026-10-13 19:49:13

对着被子一直报错这事原来是真的,软性表面反射太弱,早知道早换方案

刷着刷着入坑了
3楼 · 2026-10-13 19:49:13

几块钱的模块能讲这么细,干货,先收藏再慢慢看