Raspberry Pi 超声波(HC-SR04)
2019-11-26
21:37:49
一、所需
- 树莓派3B
- (HC-SR04)超声波测距模块
- 电阻1KΩ,2KΩ各一个
- 杜邦线,面包板
关于HC-SR04

HC-SR04模块的测距为3cm - 4m,精确度可达3mm。改模块包括超声波发射器、超声波接收器和控制电路三部分。

A、引脚4个:
- VCC
- TRIG
- ECHO
- GND
B、工作原理
1、采用IO口TRIG触发测距,给10us的高电平信号;
2、模块自动发送8个40khz的方波,自动检测是否有信号返回;
3、有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;
C、与树莓派工作过程
1、树莓派向Trig脚发送一个持续10us的脉冲信号。
2、HC-SR04接收到树莓派发送的脉冲信号,开始发送超声波,并把Echo置为高电平。然后准备接收返回的超声波。
3、当HC-SR04接收到返回的超声波时,把Echo置为低电平。
4、记录发送到接收之间的时间就可以测算距离了。
二、连接树莓派与HC-SR04
4个引脚:
VCC连接5V针脚
GND连接任意板上任意GND针脚
Trig连接GPIO18(BCM编码对应的针脚)
Echo连接GPIO23(BCM编码对应的针脚)
由于Echo输出为5V信号,而树莓派的GPIO输入最高允许3.3V,所以应该接一个分压电路。
上图为树莓派实验室的HC-SR04教程的图片,我是学习他的分压接法,只是我使用的GPIO引脚不同罢了,Echo输出降到3.3V左右。

连接完成。
三、编写代码(Python)
import time
# 导入 GPIO 库
import RPi.GPIO as GPIO
# 设置 GPIO 编码模式为 BCM模式
GPIO.setmode(GPIO.BCM)
# 定义 GPIO 引脚
Trig = 18
Echo = 23
# 设置 GPIO 的工作模式(IN / OUT)
GPIO.setup(Trig, GPIO.OUT)
GPIO.setup(Echo, GPIO.IN)
def distance():
# 发送高电平信号到 Trig 引脚
GPIO.output(Trig, True)
# 持续 10us
time.sleep(0.00001)
GPIO.output(Trig, False)
start_time = time.time()
stop_time = time.time()
# 记录发送超声波的时刻1
while GPIO.input(Echo) == 0:
start_time = time.time()
# 记录收到超声波的时刻2
while GPIO.input(Echo) == 1:
stop_time = time.time()
# 记录超声波的往返时间 = 时刻1 - 时刻2
time_distance = start_time - stop_time
# 声波的速度为 343m/s, 转化为 34300cm/s
distance = (time_distance * 34300) / 2
return distance
if __name__ == "__main__":
try:
while True:
dis = distance()
print("Measured Distance = {:.2f} cm".format(dis))
time.sleep(1)
# Reset by pressing CTRL + C
except KeyboardInterrupt:
print("Measurem stopped by User")
GPIO.cleanup()



浙公网安备 33010602011771号