树莓派3 超声波测距代码

  • 内容
  • ....
  • 相关

慢慢地逐步熟悉了树莓派,于是开始了一些有趣的小实验,比如今天带来的树莓派3 连接HR-04超声波测距模块,实现简单的距离测试。关于HR-04在arduino的运用可查看HC-SR04超声波测距模块的测试这篇文章。

实验材料

树莓派3B主板、HR-04超声波模块、公对母面包线(4根)

接口介绍

  1. HR-04超声波模块有四个接口,分别如下:

    • VCC: 5V
    • Trig: 发射端
    • Echo: 接收端
    • GND: 地
  2. 树莓派3的接口定义,绿色BCM编码方式、黄色WPI编码方式、物理接口,可根据具体情况设置Python的GPIO.setmode(GPIO.BOARD)或GPIO.setmode(GPIO.BCM)进行选择。BOARD既选择物理接口,BCM则选择BCM编码接口。对应主板图有白色斜边的脚为1脚。

Python实现

本次测试需要占用树莓派上两个gpio接口,这里用到了BCM23和BCM24,对应物理接口是16脚和18脚。

#!/usr/bin/python
# from http://surenpi.com

import RPi.GPIO as GPIO
import datetime
import time

def gpio_init():
	GPIO.setmode(GPIO.BCM)
	pass

def ultrasound_init(echo, trig):
	gpio_init()

	GPIO.setup(echo, GPIO.IN)
	GPIO.setup(trig, GPIO.OUT)
	pass

def get_distance(echo, trig):
	ultrasound_init(echo, trig)

	send_time = 0
	rece_time = 0

	GPIO.output(trig, GPIO.LOW)
	time.sleep(0.002)
	GPIO.output(trig, GPIO.HIGH)
	time.sleep(0.000015)
	GPIO.output(trig, GPIO.LOW)

	while GPIO.input(echo) == 0:
		send_time = time.time()
		pass

	while GPIO.input(echo) == 1:
		rece_time = time.time()
		pass

	distance = (rece_time - send_time) * 340 / 2 * 100

	return distance

	pass

#车位左侧距离
def get_left_distance():
	trig = 23
	echo = 24
	return get_distance(echo, trig)

#车位右侧距离
def get_right_distance():
	trig = 17
	echo = 27
	return get_distance(echo, trig)

#车位背后距离
def get_back_distance():
	trig = 5
	echo = 6
	return get_distance(echo, trig)

#程序入口
if __name__ == '__main__':
	try:
		left_dis = get_left_distance()
		right_dis = get_right_distance()
		back_dis = get_back_distance()

		print '车位左侧距离:', left_dis
		print '车位右侧距离:', right_dis
		print '车位背后距离:', back_dis

		time.sleep(5)
	except KeyboardInterrupt:
		GPIO.cleanup()