天天看點

【mcuclub】超音波測距子產品HC-SR04

一、實物圖

【mcuclub】超音波測距子產品HC-SR04

二、原理圖

【mcuclub】超音波測距子產品HC-SR04
編号 名稱 功能
1 VCC 電源正
2 TRIG 觸發控制信号輸入
3 ECHO 回響信号輸出
4 GND 電源地

三、簡介

由于超音波指向性強,能量消耗緩慢,在媒體中傳播的距離較遠,因而超音波經常用于距離的測量,如測距儀和物體測量儀等都可以通過超音波來實作。利用超音波檢測往往比較迅速、友善、計算簡單、易于做到實時控制,并且在測量精度方面能達到工業實用的要求,是以在移動機器人研制上也得到了廣泛的應用。

HC-SR04超音波測距子產品可提供2cm-400cm的非接觸式距離感測功能,測距精度3mm,子產品包括超音波發射器、接收器與控制電路。

基本工作原理:

超音波發射器向某一方向發射超音波,在發射時刻的同時開始計時,超音波在空氣中傳播,途中碰到障礙物就立即傳回,超音波接收器收到反射波就立即停止計時。測試距離=(計時時間*聲速)/2

【mcuclub】超音波測距子產品HC-SR04

四、電器特性

【mcuclub】超音波測距子產品HC-SR04

五、時序解析

【mcuclub】超音波測距子產品HC-SR04

(1)采用IO口TRIG觸發測距,給最少10us的高電平觸發信号。

(2)子產品自動發送8個40khz的方波,自動檢測是否有信号傳回;

(3)有信号傳回,通過IO口ECHO輸出一個高電平,高電平持續的時間就是超音波從發射到傳回的時間。

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

代碼如下:

uint Hcsr04_GetDistance(uint Hcsr04_temp)

{

   uint Hcsr04_distance;           //用于記錄測得的距離

   float Hcsr04_speed;             //儲存超音波的速度值

   TH2 = 0;             //使用定時器2作為計時器

   TL2 = 0;

   HCSR04_Trig = 0;     //給超音波子產品一個高電平的開始脈沖

   Hcsr04_Delay(20);

   HCSR04_Trig = 1;

   Hcsr04_Delay(20);

   HCSR04_Trig = 0;

   while(!HCSR04_Echo);    //等待超音波子產品的傳回脈沖

   TR2 = 1;                //啟動定時器,開始計時

   while(HCSR04_Echo);     //等待超音波子產品的傳回脈沖結束

   TR2 = 0;                //停止定時器,停止計時

   Hcsr04_speed = 0.607*Hcsr04_temp+331.4;             //根據公式 v=0.607T+331.4 計算出目前溫度值對應的超音波速度,這時的機關是“米/秒”

   Hcsr04_speed = Hcsr04_speed/10000;                  //将超音波的速度從機關“m/s”轉為“cm/us”,友善後面的計算

  Hcsr04_distance=((TH2*256+TL2) * (12/FOSC) * Hcsr04_speed) / 2;           // 距離cm = (時間us * 速度cm/us) / 2

   if(Hcsr04_distance > 500)  //把檢測結果限制500厘米内

   Hcsr04_distance = 500;

   return Hcsr04_distance;

}

六、流程設計

首先初始化引腳,然後複位定時器計數值,接着給超音波一個高電平的開始信号,等待超音波子產品的傳回脈沖,接到傳回脈沖,則開始計時,然後等待超音波子產品的傳回脈沖結束,如果結束,則停止計時。接下來通過溫度補償計算聲波速度,通過距離=(時間*速度)/2最終得到距離值。最後判斷距離值是否超過量程,如果超過量程則将距離值設定成最大量程值。

【mcuclub】超音波測距子產品HC-SR04

繼續閱讀