先上个图
这个模块的针脚跟之前玩的那三个有所区别,除了VCC和GND两个针脚,还多了两个Trig和Echo针脚,分别是输出和输入,Trig我接的是20针脚,Echo是21
该模块的工作原理为,先向TRIG脚输入至少10us的触发信号,该模块内部将发出 8 个 40kHz 周期电平并检测回波。一旦检测到有回波信号则ECHO输出高电平回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式: 距离=高电平时间*声速(340M/S)/2。
下面是代码
1 import RPi.GPIO as GPIO 2 import time 3 4 Trig_Pin = 20 5 Echo_Pin = 21 6 7 GPIO.setmode(GPIO.BCM) 8 GPIO.setup(Trig_Pin, GPIO.OUT, initial = GPIO.LOW) 9 GPIO.setup(Echo_Pin, GPIO.IN) 10 11 time.sleep(2) 12 13 def checkdist(): 14 GPIO.output(Trig_Pin, GPIO.HIGH) 15 time.sleep(0.000015) 16 GPIO.output(Trig_Pin, GPIO.LOW) 17 while not GPIO.input(Echo_Pin): 18 pass 19 t1 = time.time() 20 while GPIO.input(Echo_Pin): 21 pass 22 t2 = time.time() 23 return (t2-t1) *340/2 24 25 try: 26 while True: 27 print 'Distance:%0.2f m' % checkdist() 28 time.sleep(3) 29 except KeyboardInterrupt: 30 GPIO.cleanup()
发现那个捕捉的异常是针对Crtl+C触发的,之前我那几个模块如果正在输出就Ctrl+C的话还是会持续的输出,我只能另外写个脚本来关闭对应针脚的输出,有了这个异常捕捉,就方便多了
实际测出来的距离是偏低的
方法都是照抄的,原文地址:http://bbs.elecfans.com/forum.php?mod=viewthread&tid=451330