傳感器之超聲波測距HC-SR04


一.前言

       

       HC-SR04超聲波測距模塊可提供2cm-400cm的非接觸式距離感測功能,測距精度可達高到3mm;模塊包括超聲波發射器、接收器與控制電路。像智能小車的測距以及轉向,或是一些項目中,常常會用到。智能小車測距可以及時發現前方的障礙物,使智能小車可以及時轉向,避開障礙物,所以,我們今天就來學習一下這個傳感器。

二.工作原理

      1.給超聲波模塊接入電源和地。
      2.給脈沖觸發引腳(trig)輸入一個長為20us的高電平方波

      3.輸入方波后,模塊會自動發射8個40KHz的聲波,與此同時回波引腳(echo)端的電平會由0變為1;(此時應該啟動定時器計時)
      4.當超聲波返回被模塊接收到時,回波引 腳端的電平會由1變為0;(此時應該停止定時器計數),定時器記下的這個時間即為超聲波由發射到返回的總時長。
      5.根據聲音在空氣中的速度為344米/秒,即可計算出所測的距離。

      要學習和應用傳感器,學會看懂傳感器的時序圖是很關鍵的,所以我們來看一下HC-SR04的時序觸發圖。

   

 

    我們來分析一下這個時序圖,先由觸發信號啟動HC-RS04測距模塊,也就是說,主機要先發送至少10us的高電平,觸發HC-RS04,模塊內部發出信號是傳感器自動回應的,我們不用去管它。輸出回響信號是我們需要關注的。信號輸出的高電平就是超聲波發出到重新返回接收所用的時間。用定時器,可以把這段時間記錄下來,算出距離,別忘了結果要除於2,因為總時間是發送和接收的時間總和。

三.程序

#include<reg52.h>

#define uchar unsigned char  

#define uint  unsigned int

 sbit Echo=P3^2;  

sbit Trig=P1^5;

 bit flag=0;

 /***********************************    函數:void Delay5us()  ----------------------    說明:5微秒延時函數    參數:無  返回值:無 ***********************************/

void Delay5us()

{  uchar i;  i--;  i--;  i--;  i--;  i--;  i--; }

void DelayMs(uint ms)

{  uint x,y;  for(x=ms;x>0;x--)  

 for(y=110;y>0;y--); }

 

void  Init() 

{    

TMOD=0x21;  

SCON = 0x50;  

EA=1;  

ES=1;

ET0=1;  

ET1=1;  

TH1=0Xfd;  

TL1=0xfd;  

TR1=1;

}

void Send(uint dat)

{  

SBUF=(dat/100)+ 48;   // 發送 百 位  

while(!TI);  

TI=0;  

SBUF=(dat%100/10)+48;  // 發送 十 位  

while(!TI);  TI=0;  

SBUF=(dat%10)+48;   // 發送 個 位

 while(!TI);  TI=0;

}

uint Conut(void)

{  

uint time;            // 用於記錄測得的時間  

uint ss;      // 用於記錄測得的距離

 time = (TH0*256+TL0)*1.09;  // 總時間    

TH0=0;  TL0=0;

 if(flag==1)         // 如果超出測量距離,則不傳輸數據

 {   flag=0;   ss=0;  }  

else  

{   

ss=time*1.7/100;      // 空氣中聲音的速度是340m/s

 }  

return ss; }

     void main(void)     {

    uint ss;     Init();

     while(1)   

{          

Trig=1;    

  Delay5us();     

Delay5us();         

Trig=0;     

while(!Echo);     

TR0=1;     

while(Echo);     

TR0=0;     

ss=Conut();   // 計算    

Send(ss);   // 將計算的值通過串口發送出去    

DelayMs(800);

              }

 

四.總結

     上面這個程序的功能就是從測距傳感器獲得距離的數值,進行單位的轉化后用串口進行輸出,顯示在串口助手中,轉化后的單位為厘米,還有一點需要注意的是,觸發輸入和回響輸出端在不同的板子上是不一樣的,大家要根據自己的原理圖及單片機自己修改,有什么問題可以互相交流0.0

 

 

    }

 void zd0() interrupt 1 {  flag=1;     }

        

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM