先上個圖

這個模塊的針腳跟之前玩的那三個有所區別,除了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
