树莓派超声波测距
需要材料:
树莓派4B
HC-SR04超声波测距模块
母对母线
超声波模块
简介:
HY-SRF05 超声波测距模块可提供2cm-450cm 的非接触式距离感测功能,
测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。
工作原理:
(1)采用IO口TRIG触发测距,给至少10us的高电平信号
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回
(3)有信号返回,则通过IO口ECHO输出一个持续时间的高电平,该持续时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速)/2 。 注:声速(340M/S)
该模块共有4只引脚,从左到右
第一脚为 vcc,接电源,5V,接在树莓派GPIO2号管脚
第二脚为TRIG,出发控制,信号输入,接在树莓派的GPIO16号管脚
第三脚为ECHO,回响信号输出。接在树莓派的GPIO18号管脚
第四脚接地。接在树莓派的GPIO14号管脚。
代码:
import RPi.GPIO as GPIO
import time
# 设置GPIO的引脚模式为BCM模式
GPIO.setmode(GPIO.BCM)
Trig_Pin = 23
Echo_Pin = 24
# 设置管脚的输入输出模式和初始电平
GPIO.setup(Trig_Pin,GPIO.OUT,initial = GPIO.LOW)
GPIO.setup(Echo_Pin,GPIO.IN)
time.sleep(1)
def checkdist():
# GPIO输出一段不小于10us的电平
GPIO.output(Trig_Pin,GPIO.HIGH)
time.sleep(0.000015)
# Trig_Pin回到低电平状态
GPIO.output(Trig_Pin,GPIO.LOW)
while not GPIO.input(Echo_Pin):
pass
# 一直等到Echo_Pin 有了反应,计算开始时间
start = time.time()
while GPIO.input(Echo_Pin):
pass
#只要echo_Pin不再接收,计算结束时间,并计算总时长
end = time.time()
# 计算距离
leng = (end-start)*340/2
return leng
try:
while True:
length = checkdist()
# 格式化成小数点后两位
print(f"从基准至目标--距离>> {length:.2f}m")
time.sleep(3)
except KeyboardInterrupt:
GPIO.cleanup()