1. 程式人生 > >超聲波測距原理與實現

超聲波測距原理與實現

這是我在學校做的超聲波測距系統,那時候是我剛剛接觸半年的51,就想著弄點什麼小東西出來吧。起碼得做點什麼東西出來,所以自行設計了超聲波測距系統/倒車系統測距系統,也來分享一下給大家,本作品以STC12C5A60S2作為核心,以某寶上買的超聲波模組作為檢測模組,以oled螢幕作為顯示文字、數字、英文、等等、用有源蜂鳴器作為報警器,紅色直插LED順便作為提示,相容5——12V供電,引出io口,方便以後當做最小系統使用,方便相容多個其他模組,(自行腦補)。。。。帶復位,下載口,,正常工作時候oled顯示:“xxx超聲波測距,距離xxxCM”,蜂鳴器不響,綠色LED亮,紅色滅,當距離小於xxxCM時,蜂鳴器象棋警報,紅色LED亮起,綠色滅,大致就是這樣。系統為本人親自制作,單層板,上圖。還有pcb,原理圖等,程式碼等;程式碼有點亂,提供一部分看看。

這是我的第一個作品吧,之前搞了個4*4*4的光立方,沒有成功,只怪我當初太菜,還急躁了,不過現在做這個還是挺成功的,因為是超聲波,距離精確到cm吧,反正就是能測距就行,主要的問題就是oled顯示的問題,當時我怎麼弄都沒顯示的,但是改了一下,把顯示的函式封裝起來,然後呼叫,就突然好了,我也是奇怪。。。。也有運氣的成分在吧。。。。先解說下超聲波工作原理吧:


簡單來說就是微控制器控制超聲波發射模組發出一系列超聲波,遇到障礙物反彈回來,被超聲波接收模組接收到,然後計算這段時間(聲音在空氣中傳播的速度為340m/s),通過計算,得出距離,然後再oled上顯示出來,程式對距離數值產生判斷,小於5mm就觸發蜂鳴器響,紅色led閃爍。這就是基本的思路。
先來看看超聲波模組長什麼樣:
其實模組的外圍電路很簡單,都已經搭建好了,引出4個排針,連線到微控制器的vcc,io口,io口,gnd,用到2個io口,然後我們就可以模擬時序來使超聲波模組工作了;
我們知道採用 IO (Trig(控制端))觸發測距,給至少 10us 的高電平訊號;就是10us的TTL;我是直接讓他延時個10多us;模組就會自動傳送 8 個 40khz 的方波,自動檢測是否有訊號返回;操作簡單方便;假如有訊號返回,超聲波模組就會通過 IO(Echo(接收端)) 輸出一高電平,高電平持續的時間就是超聲波從發射到返回的時間.那麼測試距離=(高電平時間*聲速(340M/S))/2;那麼問題來了,怎麼真的時間是多少呢,這就是要我們用定時器來計時了;

沒有超聲波回來的時候,(Echo(接收端)就是RX=0;就在等待,當有接收到超聲波的時候,就開始計時,TR0=1;;因為上文說了,超聲波模組就會通過 IO(Echo(接收端)) 輸出一高電平。(Echo(接收端)高電平持續的時間就是超聲波從發射到返回的時間.所以等待高電平的時間,就是定時器計時的時間。(while(RX));//在等待然後關閉定時器,通過演算法就能計數了。
void Conut(void)        {         time=TH0*256+TL0;         TH0=0;         TL0=0;         S=(time*1.7)/100;   }
具體對資料做什麼要求請各位自行發揮。我就是簡單的顯示下資料就ok了:

         qian=S%1000/100;          bai=S%1000%100/10;          shi=S%1000%100 %10;得出結果是cm;共有3位數字;比如006cm;然後就是如何顯示的問題了,因為我用的是庫函式,顯示字元要取模,我就不教大家了,可以百度一下取模的問題,而且我呼叫的是庫函式,就簡單看看我的程式碼吧;void display(){        WriteChinese16x16(0,0,"傑傑號超聲波測距");
         PrintNum_8x16(2,60,qian);         PrintNum_8x16(2,70,bai);         PrintNum_8x16(2,80,shi);
        WriteMixStrXx16(2,10,"距離");        WriteMixStrXx16(2,97,"CM");
        bee=1;        d1=0;        d2=1;
if(S<5){        delay(5);        if(S<5)//小於5cm,蜂鳴器響,紅燈亮。{        d1=1;        bee=0;        d2=0;}}這是在oled上顯示的。有比較多的庫函式,我也沒仔細研究,但是會呼叫就行了,因為用到的oled時候不是很多,花時間在這上面不值得,反正我會用,用不用管他的底層的東西。
需要程式碼的話找我拿就好,其實原理很簡單的,動動手,按照我上一篇的推送畫個最小系統板就ok了,但是要注意的地方是,oled,最好用3.3v供電,所以加入了ams117穩壓晶片,看下效果圖是怎樣的:

原理圖和pcb都是開源的,全自創,僅供學習。

請到

下載