树莓派-超声波测距

本文介绍了一个使用Python在树莓派上通过HC-SR04超声波传感器进行距离测量的示例程序,包括GPIO配置、测量过程和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        下面是一个使用 Python 编程语言在树莓派上使用超声波传感器模块进行距离测量的示例程序。在这个示例中,我们将使用 HC-SR04 型号的超声波传感器模块,它是一种常见的超声波测距模块。

import RPi.GPIO as GPIO
import time

# 设置GPIO引脚
TRIG = 23
ECHO = 24

# 初始化GPIO设置
GPIO.setmode(GPIO.BCM)
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)

try:
    while True:
        # 发送超声波脉冲
        GPIO.output(TRIG, False)
        time.sleep(2)  # 等待2秒,确保传感器稳定
        GPIO.output(TRIG, True)
        time.sleep(0.00001)
        GPIO.output(TRIG, False)

        # 接收超声波回波
        while GPIO.input(ECHO) == 0:
            pulse_start = time.time()
        while GPIO.input(ECHO) == 1:
            pulse_end = time.time()

        # 计算距离
        pulse_duration = pulse_end - pulse_start
        distance = pulse_duration * 34300 / 2  # 声音速度为34300厘米/秒

        # 打印测得的距离
        print("距离: %.2f 厘米" % distance)

        time.sleep(1)  # 等待1秒再进行下一次测量

except KeyboardInterrupt:
    # 当按下Ctrl+C时,退出程序并清理GPIO设置
    GPIO.cleanup()

        在这个例程中,我们使用 RPi.GPIO 库来管理树莓派的 GPIO 引脚。首先,我们定义了超声波模块的触发引脚(Trig)和回波引脚(Echo)。然后,我们初始化 GPIO 设置,并在一个无限循环中执行测量。

        在每次循环中,我们发送一个超声波脉冲,然后测量回波的时间来计算距离。最后,我们将距离打印出来并等待一秒再进行下一次测量。

        请注意,根据您的具体硬件连接和 GPIO 引脚的选择,您可能需要适当调整 Trig Echo 的引脚编号。

        在运行这个程序之前,确保已经正确连接了超声波传感器到树莓派的 GPIO 引脚,并已经安装了 RPi.GPIO 库。此外,要在树莓派上运行 Python 程序,您需要使用sudo或者在用户组中将用户添加到 gpio 组以获得 GPIO 访问权限。

### 树莓派超声波测距传感器使用教程 #### 连接硬件 为了使树莓派能够利用超声波传感器完成距离测量的任务,需先连接好相应的硬件线路。超声波传感器模块配备有四个引脚:VCC(电源正极)、Trig(触发端口)、Echo(回响端口)以及GND(接地)。这些引脚应分别对应接到树莓派上的相应GPIO接口上[^1]。 #### 编写Python代码实现测距功能 编写一段简单的Python程序可以轻松地让树莓派读取来自超声波传感器的数据并计算目标物体到传感器之间的实际距离: ```python import RPi.GPIO as GPIO import time # 设置使用的BCM编号模式 GPIO.setmode(GPIO.BCM) TRIG_PIN = 23 # Trig引脚对应的BCM编号 ECHO_PIN = 24 # Echo引脚对应的BCM编号 def measure_distance(): GPIO.setup(TRIG_PIN, GPIO.OUT) GPIO.setup(ECHO_PIN, GPIO.IN) GPIO.output(TRIG_PIN, False) print("Waiting For Sensor To Settle") time.sleep(2) GPIO.output(TRIG_PIN, True) time.sleep(0.00001) # 发射超声波脉冲 GPIO.output(TRIG_PIN, False) while GPIO.input(ECHO_PIN)==0: pulse_start = time.time() while GPIO.input(ECHO_PIN)==1: pulse_end = time.time() pulse_duration = pulse_end - pulse_start distance = pulse_duration * 17150 # 计算距离 (cm),即高电平时间乘以声速的一半转换成厘米单位 distance = round(distance, 2) return distance if __name__ == '__main__': try: while True: dist = measure_distance() print(f"Distance: {dist} cm") time.sleep(1) # 测量周期设置为至少60ms以上,这里设为1秒以便观察输出效果 except KeyboardInterrupt: pass finally: GPIO.cleanup() # 清理释放资源 ``` 此段代码实现了向指定方向发出短暂的超声波脉冲,并通过检测反射回来所需的时间差来确定前方障碍物的位置远近关系。每秒钟重复执行上述过程一次并将结果打印至终端显示[^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旗狼-回不去的明天

您的支持是对创作的最大鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值