超声波模块为常用的HC-SR04型号,有四个引脚,分别为Vcc、Trig(控制端)、Echo(接收端)、GND,使用起来也比较简单。在树莓派最新官方系统Raspbian中都安装有一个比较好使用的GPIO库,名为“gpiozero”,它包含了许多模块的使用函数,直接调用就好,在许多情况下(仅本人觉得哈)比“RPi.GPIO”库好用且更简洁。
工作电压:5V
静态电流:<2ma
感应角度:<15°
检测距离:2-450cm
精度:3mm
1.采用IO触发测距,通电后会保持低电平,当检测到障碍物后会变为高电平,高电平信号的时间至少要10us。
2.模块自动发送8个40Khz的方波,自动检测是否有信号返回。
3.检测障碍物距离的公式:高电平触发的时间 X 声音传播的速度340m/s / 2
(高电平持续的时间就是超声波从发射到返回的时间)
另外,理论上给超声波连接的线可以比较长的,但本人在==使用超过20cm的连接线后,发现超声波失灵了,检测不到障碍物,有时甚至是障碍物“无中生有”。==所以本人猜测是连接线过长时,电信号被其他连接线发出的电磁场所干扰,因此使Trig(控制端)和Echo(接收端)接收不到信号或被干扰。
然后呢,按理论(本人自己猜测的瞎想理论)来说,解决此现象的方法为:1.不适用常规的连接线,使用那种带有屏蔽保护的导线;2.使用常规连接线时,长度最好是20cm内,若还是有干扰就再缩短长度。
红色:5V----Vcc
蓝色:GND----GND
黄色:GPIO14----Echo(接收端)
绿色:GPIO15----Trig(控制端)
以下代码为超声波最简单的使用——测距。
由于使用gpiozero库的缘故,检测的默认最大距离为1m。
from time import sleep
from gpiozero import DistanceSensor
dis = DistanceSensor(14, 15) #定义超声波的引脚
while True:
print('', dis.distance, 'm')
sleep(0.01)
以下代码为检测到障碍物后点亮LED。
from gpiozero import DistanceSensor , LED
from signal import pause
sensor = DistanceSensor(14, 15, max_distance=1, threshold_distance=0.1) # 设置超声波引脚和检测最大距离、最小距离
led = LED(13) # 设置LED引脚
sensor.when_in_range = led.on # 当障碍物进入检测范围时,LED点亮
sensor.when_out_of_range = led.off # 当障碍物不在检测范围时,LED熄灭
pause() # 暂停状态,状态发生变化时才会动作,并一直维持着
##2020.8.20
写在最后——若有不足之处还请各位大佬提出,谢谢!