做避障小车、测距报警,很多人第一个接触的就是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最大价值就是便宜、抗干扰、上手快。把超时、软目标、多径反射这几个点处理好了,一台稳稳定定的超声波避障小车很快就能立起来,之后再叠加其他传感器,玩法就丰富了。


pulseIn不加超时还真会卡死程序,这个坑我踩了一整天才找到,泪目
对着被子一直报错这事原来是真的,软性表面反射太弱,早知道早换方案
几块钱的模块能讲这么细,干货,先收藏再慢慢看