先上個圖php
這個模塊的針腳跟以前玩的那三個有所區別,除了VCC和GND兩個針腳,還多了兩個Trig和Echo針腳,分別是輸出和輸入,Trig我接的是20針腳,Echo是21spa
該模塊的工做原理爲,先向TRIG腳輸入至少10us的觸發信號,該模塊內部將發出 8 個 40kHz 週期電平並檢測回波。一旦檢測到有回波信號則ECHO輸出高電平迴響信號。迴響信號的脈衝寬度與所測的距離成正比。由此經過發射信號到收到的迴響信號時間間隔能夠計算獲得距離。公式: 距離=高電平時間*聲速(340M/S)/2。code
下面是代碼blog
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的話仍是會持續的輸出,我只能另外寫個腳原本關閉對應針腳的輸出,有了這個異常捕捉,就方便多了input
實際測出來的距離是偏低的it
方法都是照抄的,原文地址:http://bbs.elecfans.com/forum.php?mod=viewthread&tid=451330class