0%

在树莓派4B上使用HC-SR04超声波测距模块

raspberry-pi-logo-1920.png

HC-SR04技术原理

HC-SR04

简介

HC-SR04 模块可以测量 3cm – 4m 的距离,精确度可以达到 3mm。这个模块包括 超声波发射器、超声波接收器和控制电路三部分。有 4 个引脚。

参数表

项目 参数
工作电压 DC 5V
工作电流 15mA
最短测量距离 3cm
最长测试距离 4m
测量角度 15°
Trigger引脚输入信号 10us TTL脉冲
Echo引脚输出信号 5V 脉冲信号

引脚定义

引脚 功能
VCC 控制电压,DC 5V
Trig 接收来自树莓派的控制信号
Echo 发送测距结果给树莓派
Gnd 接地

物理原理

超声波测距物理原理

电子原理

  1. 树莓派向Trig引脚发送一个持续10us的脉冲信号。

  2. HC-SR04接收到树莓派发送的脉冲信号,开始发送超声波(start sending ultrasoun),并把Echo置为高电平。然后准备接收返回的超声波。

  3. 当HC-SR04接收到返回的超声波(receive returned ultrasound)时,把Echo置为低电平。

从上述过程可以看出, Echo高电平持续的时间就是超声波从发射到返回所经过的时间间隔。

HC-SR04电子原理

接线与程序

接线

GPIO可以自由选择,由程序决定。

程序

程序来自:树莓派上使用HC-SR04超声波测距模块 | 树莓派实验室 (nxez.com)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#导入 GPIO库
import RPi.GPIO as GPIO
import time

#设置 GPIO 模式为 BCM
GPIO.setmode(GPIO.BCM)

#定义 GPIO 引脚
GPIO_TRIGGER = 23
GPIO_ECHO = 24

#设置 GPIO 的工作方式 (IN / OUT)
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
GPIO.setup(GPIO_ECHO, GPIO.IN)

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

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

start_time = time.time()
stop_time = time.time()

# 记录发送超声波的时刻1
while GPIO.input(GPIO_ECHO) == 0:
start_time = time.time()

# 记录接收到返回超声波的时刻2
while GPIO.input(GPIO_ECHO) == 1:
stop_time = time.time()

# 计算超声波的往返时间 = 时刻2 - 时刻1
time_elapsed = stop_time - start_time
# 声波的速度为 343m/s, 转化为 34300cm/s。
distance = (time_elapsed * 34300) / 2

return distance

if __name__ == '__main__':
try:
while True:
dist = distance()
print("Measured Distance = {:.2f} cm".format(dist))
time.sleep(1)

# Reset by pressing CTRL + C
except KeyboardInterrupt:
print("Measurement stopped by User")
GPIO.cleanup()