Raspberry Pi 超声波(HC-SR04)

2019-11-26

21:37:49

一、所需

  1. 树莓派3B
  2. (HC-SR04)超声波测距模块
  3. 电阻1KΩ,2KΩ各一个
  4. 杜邦线,面包板

关于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()

猜你喜欢

转载自www.cnblogs.com/1328497946TS/p/11938724.html