其他分享
首页 > 其他分享> > 树莓派超声波测距

树莓派超声波测距

作者:互联网

树莓派超声波测距

需要材料:

树莓派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()

标签:树莓,Pin,time,GPIO,管脚,超声波,测距
来源: https://www.cnblogs.com/Z-xing/p/15874143.html