• VCC:超声波模块电源脚,接5V电源即可

  • Trig:超声波发送脚,高电平时发送出40KHZ出超声波

  • Echo:超声波接收检测脚,当接收到返回的超声波时,输出高电平

  • GND:超声波模块GND

测距原理:

  • 树莓派向 Trig 脚发送一个 10us 的脉冲信号。

  • HC-SR04 接收到信号,开始发送超声波,并把 Echo置为高电平,然后准备接收返回的超声波。

  • HC-SR04 接收到返回的超声波,把 Echo 置为低电平。

  • Echo 高电平持续的时间就是超声波从发射到返回的时间间隔。

  • 计算距离:

    距离(单位:m)  =  (start - end) * 声波速度 / 2 

    声波速度取 343m/s 。

    然后再把测得的距离转换为 cm。

    距离(单位:cm) = (start - end) * 声波速度 / 2 * 100 

                            = (start - end) * 17150

连接硬件:将HC-SR04模块连接到树莓派的GPIO引脚上。将HC-SR04的VCC引脚连接到树莓派的5V引脚,GND引脚连接到树莓派的地引脚,Trig引脚连接到树莓派的任意GPIO输出引脚(例如GPIO17),Echo引脚连接到树莓派的任意GPIO输入引脚(例如GPIO18)。

编写Python代码:创建一个新的Python脚本,例如distance_measurement.py,并输入以下代码:


import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

GPIO_TRIG = 17
GPIO_ECHO = 18

GPIO.setup(GPIO_TRIG, GPIO.OUT)
GPIO.setup(GPIO_ECHO, GPIO.IN)

def distance():
    # 发送高电平信号到 Trig 引脚
    GPIO.output(GPIO_TRIG, True)

    # 持续 10 us 
    time.sleep(0.00001)
    GPIO.output(GPIO_TRIG, False)

    # 高电平持续时间就是超声波从发射到返回的时间
    while GPIO.input(GPIO_ECHO) == GPIO.LOW: pass
    start_time = time.time()
    while GPIO.input(GPIO_ECHO) == GPIO.HIGH: pass
    stop_time = time.time()

    # 计算距离 声波的速度为 34000cm/s。
    distance = ((stop_time - start_time) * 34000) / 2

    return distance

while True:
    dist = distance()
    print("距离:{:.2f} cm".format(dist))
    time.sleep(1)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐