慢慢地逐步熟悉了树莓派,于是开始了一些有趣的小实验,比如今天带来的树莓派3 连接HR-04超声波测距模块,实现简单的距离测试。关于HR-04在arduino的运用可查看HC-SR04超声波测距模块的测试这篇文章。
实验材料
树莓派3B主板、HR-04超声波模块、公对母面包线(4根)
接口介绍
- HR-04超声波模块有四个接口,分别如下:
- VCC: 5V
- Trig: 发射端
- Echo: 接收端
- GND: 地
- 树莓派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()