超聲波測距應用廣泛,本次實戰通過樹莓派B+連接HC-SR04超聲波測距傳感器,用python GPIO控制傳感器完成距離測定,並將距離顯示在屏幕上。
該傳感器有4個引腳:
VCC,超聲波模塊電源腳,接5V電源即可
Trig,超聲波發送腳,高電平時發送出40KHZ出超聲波
Echo,超聲波接收檢測腳,當接收到返回的超聲波時,輸出高電平
GND,超聲波模塊GND
1)採用IO口TRIG觸發測距,給至少10us的高電平信號;
2)模塊自動發送8個40khz的方波,自動檢測是否有信號返回;
3)有信號返回,通過IO口ECHO輸出一個高電平,高電平持續的時間就是超聲波從發射到返回的時間。測試距離=(高電平時間*聲速(340M/S))/2;
初始化時將trig和echo埠都置低,首先向給 trig 發送至少10 us的高電平脈衝(模塊自動向外發送8個40K的方波),然後等待,捕捉 echo 端輸出上升沿,捕捉到上升沿的同時,打開定時器開始計時,再次等待捕捉echo的下降沿,當捕捉到下降沿,讀出計時器的時間,這就是超聲波在空氣中運行的時間,按照 測試距離=(高電平時間*聲速(340M/S))/2 就可以算出超聲波到障礙物的距離。
HC-SR04 | Raspberry Pi B+ Physical | 說明 |
VCC | 2 | +5V |
Trig | 38 | GPIO.20 |
Echo | 40 | GPIO.21 |
GND | 39 | GND |
在Raspbian中已經預裝了Python2.7.9,直接在命令行輸入python即可看到如下信息
pi@raspberrypi:~ $ python
Python 2.7.9 (default, Mar 8 2015, 00:52:26)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
使用Python控制GPIO時,常用的是raspberry-gpio-python模塊,在2016-05-27-raspbian-jessie版本的系統鏡像中,預裝了最新的版本v0.6.2,可以在Python中輸入下列命令查看:
>>> import RPi.GPIO as GPIO
>>> GPIO.VERSION
'0.6.2'
>>>
pi@raspberrypi:~ $ cd /home/pi
pi@raspberrypi:~ $ mkdir hcsr04
pi@raspberrypi:~ $ cd hcsr04
在hcsr04目錄下創建一個名為hcsr04.py 的程序文件:
import RPi.GPIO as GPIO
import time
Trig_Pin = 20
Echo_Pin = 21
GPIO.setmode(GPIO.BCM)
GPIO.setup(Trig_Pin, GPIO.OUT, initial = GPIO.LOW)
GPIO.setup(Echo_Pin, GPIO.IN)
time.sleep(2)
def checkdist():
GPIO.output(Trig_Pin, GPIO.HIGH)
time.sleep(0.00015)
GPIO.output(Trig_Pin, GPIO.LOW)
while not GPIO.input(Echo_Pin):
pass
t1 = time.time()
while GPIO.input(Echo_Pin):
pass
t2 = time.time()
return (t2-t1)*340*100/2
try:
while True:
print 'Distance:%0.2f cm' % checkdist()
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
然後執行該程序
pi@raspberrypi:~ $ python hcsr04.py
如圖在超聲波測距儀前放在障礙物,前後移動超聲波測距儀,電腦屏幕上會顯示測得的距離,與直尺量的距離對比,可發現誤差不大。完全可以勝任小車壁障等用途。