系统信息:
Raspberry Pi Zero 2W
系统版本: 2024-10-22-raspios-bullseye-armhf
Python 版本:Python 3.9.2
已安装 pip3
支持拍摄 1080p 30 (1092*1080), 720p 60 (1280*720), 60/90 (640*480)
已安装 vim
已安装 git
学习目标:
- HS-SR04B 超声测距
学习内容:
超声测距
import RPi.GPIO as GPIO
import time
def setup_gpio(trig, echo):
"""初始化 GPIO """
GPIO.setmode(GPIO.BOARD) # BOARD 编码
GPIO.setup(trig, GPIO.OUT, initial=False) # 输出模式 低电平
GPIO.setup(echo, GPIO.IN) # 输入模式
def cleanup_gpio():
""" 清理引脚规则 """
print("--- 重置引脚规则 ---")
GPIO.cleanup() # 释放 GPIO 资源,清除引脚规则
def distance(trig, echo):
"""
测量距离
@param trig: 发送超声波时间
@param echo: 接收超声波时间
@return: dist 距离 time_elapsed 收发时间间隔
"""
# 初始化时间变量,确保它们总是有值
start_time = time.time()
stop_time = start_time # 给 stop_time 赋初值,避免未赋值错误
# 发送 trig 信号,持续 10us 的方波脉冲 (1s = 10^6 us)
GPIO.output(trig, True)
time.sleep(0.00001)
GPIO.output(trig, False)
# 记录发送超声波的时刻
while GPIO.input(echo) == 0:
start_time = time.time()
# 记录收到超声波的时刻
while GPIO.input(echo) == 1:
stop_time = time.time()
# 超声波间隔
time_elapsed = stop_time - start_time
# 声波的速度为 343m/s, 转化为 34300cm/s
dist = (time_elapsed * 34300) / 2
return dist, time_elapsed
def main():
# 参数
trig = 3 # 发送引脚
echo = 5 # 接收引脚
# 初始化
setup_gpio(trig, echo)
# 测距
try:
while True:
dist, time_elapsed = distance(trig, echo)
print("Measured Distance = {:.2f} cm".format(dist))
print("Measured time = {:f} s".format(time_elapsed))
time.sleep(0.5)
except KeyboardInterrupt:
print("Measurement stopped by User")
finally:
# 清理引脚规则
cleanup_gpio()
if __name__ == "__main__":
main()