一、实验任务
用树莓派实现一个超声波测距系统
二、实验准备
树莓派3B+
杜邦线四根(母对母)
HC-SR04超声波测距模块
三、实验原理
1、树莓派40Pin引脚对照表
2、HC-SR04
HC-SR04有4 个引脚, 2 个电源引脚(Vcc 、GND)和 2 个控制引脚(Trig、Echo)
Trig 引脚用来接收来自树莓派的控制信号。接任意 GPIO 口。
Echo 引脚用来发送测距结果给树莓派。接任意 GPIO 口。
3、测距过程
- 树莓派向 Trig 脚发送一个持续 10us 的脉冲信号。
- HC-SR04 接收到树莓派发送的脉冲信号,开始发送超声波 ,并把 Echo置为高电平。
- 当 HC-SR04 接收到返回的超声波时,把 Echo 置为低电平。
4、超声波测距原理
四、实验步骤
1、组件连接
HC-SR04的Vcc引脚接树莓派的17引脚(3.3v)
HC-SR04的GND引脚接树莓派的39引脚(Ground)
HC-SR04的Trig引脚接树莓派的15引脚(GPIO22)
HC-SR04的Echo引脚接树莓派的11引脚(GPIO17)
2、代码
ranging.py
# coding=UTF-8
import RPi.GPIO as GPIO
import time
# 不输出
GPIO.setwarnings(False)
# BCM针脚编号方式
GPIO.setmode(GPIO.BCM)
# 控制引脚GPIO22
trig = 22
# 接收引脚GPIO17
echo = 17
# trig引脚为输出模式,初始化输出为低电平
GPIO.setup(trig, GPIO.OUT, initial=GPIO.LOW)
# echo引脚为输入模式
GPIO.setup(echo, GPIO.IN)
HIGH = 1
LOW = 0
# 测量函数
def measure():
# 树莓派向trig引脚发送信号,一个持续10us的方波脉冲
GPIO.output(trig, HIGH)
time.sleep(0.00001)
GPIO.output(trig, LOW)
# HC - SR04接收到脉冲信号,开始发送超声波并将Echo引脚置为高电平
# echo引脚之前一直接收低电平信号,一旦收到高电平信号就开始记录时间
while GPIO.input(echo) == LOW:
pass
start = time.time()
# 当 HC-SR04 接收到返回的超声波 时,把Echo引脚置为低电平
# 也就是说echo引脚接收到的高电平结束,终止计时
while GPIO.input(echo) == HIGH:
pass
end = time.time()
# 计算距离,单位厘米,这里的340m/s是超声波在空气中的传播速度
distance = round((end - start)*340/2*100, 2)
print("distance:{0}cm".format(distance))
# 循环测距,间隔为1秒
while True:
measure()
time.sleep(1)
# 清理脚本使用过的 GPIO 通道
GPIO.cleanup()
五、总结
虽然基础有些薄弱,但跟着老师的提醒以及网上查阅资料接货,大体能够完成,对于树莓派也有了一定理解。