樹莓派基礎(chǔ)實(shí)驗(yàn)24:超聲波測距傳感器實(shí)驗(yàn)

一、介紹

?? 超聲波傳感器使用超聲波來準(zhǔn)確檢測物體并測量距離。他發(fā)出超聲波并將它們轉(zhuǎn)換成電信號,主要應(yīng)用于汽車的倒車?yán)走_(dá)、機(jī)器人自動避障行走、建筑施工工地以及一些工業(yè)現(xiàn)場。


二、組件

★Raspberry Pi 3主板*1

★樹莓派電源*1

★40P軟排線*1

★超聲波傳感器模塊*1

★面包板*1

★跳線若干

三、實(shí)驗(yàn)原理

超聲波傳感器模塊

??該傳感器有4個引腳:
VCC,超聲波模塊電源腳,接5V電源即可
Trig,超聲波發(fā)送腳,高電平時發(fā)送出40KHZ出超聲波
Echo,超聲波接收檢測腳,當(dāng)接收到返回的超聲波時,輸出高電平5V
GND,超聲波模塊GND
??注意:Echo 返回的是 5v信號,而樹莓派的 GPIO 接收超過 3.3v 的信號可能會被燒毀,因此需要加一個分壓電路,這里由于返回的脈沖時間非常短,我沒有加,能正常運(yùn)行,但還是冒險(xiǎn)了!

??超聲波是指頻率大于20 kHz的在彈性介質(zhì)中產(chǎn)生的機(jī)械震蕩波,其具有指向性強(qiáng)、能量消耗緩慢、傳播距離相對較遠(yuǎn)等特點(diǎn),因此常被用于非接觸測距。聲音是由振動產(chǎn)生的,能夠產(chǎn)生超聲波的裝置就是超聲波傳感器,習(xí)慣上稱為超聲換能器,或者超聲探頭。超聲波探頭主要由壓電晶片組成,既可以發(fā)射超聲波,也可以接收超聲波。

??常用的是壓電式超聲波發(fā)生器,是利用壓電晶體的諧振來工作的。超聲波傳感器探頭內(nèi)部有兩個壓電晶片和一個共振板。當(dāng)它的兩極外加脈沖信號,其頻率等于壓電晶片的固有振蕩頻率時,壓電晶片將會發(fā)生共振,并帶動共振板振動,便產(chǎn)生超聲波。反之,如果兩電極間未外加電壓,當(dāng)共振板接收到超聲波時,將壓迫壓電晶片作振動,將機(jī)械能轉(zhuǎn)換為電信號,這時它就成為超聲波接收器了。 超聲波傳感器就是利用壓電效應(yīng)的原理將電能和超聲波相互轉(zhuǎn)化,即在發(fā)射超聲波的時候,將電能轉(zhuǎn)換成超聲波發(fā)射出去;而在接收時,則將超聲振動轉(zhuǎn)換成電信號。

??超聲波碰到雜質(zhì)或分界面會產(chǎn)生顯著反射形成反射成回波,碰到活動物體能產(chǎn)生多普勒效應(yīng)。由于超聲波對液體、固體的穿透本領(lǐng)很大,尤其是在陽光不透明的固體中,因此超聲波測距對環(huán)境有較好的適應(yīng)能力,此外超聲波測量在實(shí)時、精度、價(jià)格也能得到很好的折衷。

超聲波傳感器工作原理

??本實(shí)驗(yàn)中,HC-SR04超聲波傳感器通過發(fā)送聲波,并計(jì)算聲波返回超聲傳感器所需的時間來工作。通過往返時間檢測法,它可以告訴我們物體相對于超聲波傳感器有多遠(yuǎn)。

??HC-SR04超聲波測距模塊可提供2cm-400cm的非接觸式距離感測功能, 測距精度可達(dá)高到3mm;模塊包括超聲波發(fā)射器、接收器與控制電路。基本工作原理:

(1)采用IO口TRIG觸發(fā)測距,給至少10us的高電平信號;

(2)模塊自動發(fā)送8個40khz的方波,自動檢測是否有信號返回;

(3)有信號返回,通過IO口ECHO輸出一個高電平,高電平持續(xù)的時間就是超聲波從發(fā)射到返回的時間。

(4)測試距離=(高電平時間*聲速(340M/S))/2;

HC-SR04超聲波模塊工作原理

??初始化時將trig和echo端口都置低,給Trig一個10US以上的高電平,模塊開始工作,模塊內(nèi)自動發(fā)送八個40khz方波,并自主檢測是否有電波返回。這時我們需要檢測Echo處的電平,當(dāng)為高電平的時候記一個時間;當(dāng)Echo出為低電平的時候在記一個時間,這兩個時間的差就是高電平持續(xù)的時間,然后用測距公式進(jìn)行計(jì)算。

四、實(shí)驗(yàn)步驟

??第1步:連接電路。

樹莓派 T型轉(zhuǎn)接板 超聲波測距模塊
GPIO0 G17 Trig
GPIO1 G18 Echo
5V 5V VCC
GND GND GND
超聲波測距傳感器實(shí)驗(yàn)電路圖
超聲波測距傳感器實(shí)驗(yàn)實(shí)物接線圖

??第2步:編寫控制程序。將手放在超聲波測距模塊上,觀察屏幕上打印的距離數(shù)值。

#!/usr/bin/env python

import RPi.GPIO as GPIO
import time

TRIG = 11  #send-pin
ECHO = 12  #receive-pin

def setup():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(TRIG, GPIO.OUT, initial = GPIO.LOW)
    GPIO.setup(ECHO, GPIO.IN)

def distance():

    GPIO.output(TRIG, 1)  #給Trig一個10US以上的高電平
    time.sleep(0.00001)
    GPIO.output(TRIG, 0)

    #等待低電平結(jié)束,然后記錄時間
    while GPIO.input(ECHO) == 0:  #捕捉 echo 端輸出上升沿
        pass
    time1 = time.time()  
    
    #等待高電平結(jié)束,然后記錄時間
    while GPIO.input(ECHO) == 1:  #捕捉 echo 端輸出下降沿
        pass
    time2 = time.time() 

    during = time2 - time1   
#ECHO高電平時刻時間減去低電平時刻時間,所得時間為超聲波傳播時間
    return during * 340 / 2 * 100  
#超聲波傳播速度為340m/s,最后單位米換算為厘米,所以乘以100
def loop():
    while True:
        dis = distance()
        print dis, 'cm'
        print ''
        time.sleep(0.3)

def destroy():
    GPIO.cleanup()

if __name__ == "__main__":
    setup()
    try:
        loop()
    except KeyboardInterrupt:
        destroy()

??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容