Arduino讀取超音波距離感測器 (Arduino and Ultrasound)

超音波是一種經常會使用在判斷物品靠近距離的距離感測器,其工作方式可以用蝙蝠判斷前方物體的方法來理解,發出超音波後,當碰到物品反彈回來後,只要計算發出與回傳的時間差及當下氣溫中聲音的傳播速度,既可以大概的計算出物品與感測器間的距離。

硬體接線

測試時我是使用HC – SR04,測距時只需要給予10us的高電位信號既可[1]。

超音波數據

在乾燥的空氣中,聲音的速度可以用 (331.3 + 0.606*T ) m/s的方式計算[2],其中T 是攝氏的氣溫。因此假設目前環境大約是20度攝氏度,則聲音速度為 331.3+0.606*20 = 343.42 m/s,因為在程式中我們要使用微秒(µs)及公分(cm)為單位來觀察,因此將得到的343.42 m/s轉換為0.034342 cm /µs, 即每公分需要約29.12µs
超音波自感測器發出,到碰到物體後反射回來後被接收到,如果將其移動軌跡想像成是一直線,則可以很直覺的得知,音波移動的路徑是兩倍的超音波到物件間的距離。因此在程式中我們會需要先將得到的超音波的數據先除以2,取得單趟的移動時間後,再除以剛才計算得知的29.12µs/cm,才會得到大約的超音波到物件之間距離。

程式介紹

一開始會需要先定義腳位,另外為了要確認轉換後的資料是否正確,因此我們還需要把串列的顯示的功能也加入。在硬體接線上,我是將超音波的Trig腳位接到 12的位置,Echo腳位接到 11的位置。串列通訊的頻率則是設定為115200Hz。

定義腳位
  • pinMode(pin, mode)[3]: Pin 是定義要設定的腳位,mode是定義腳位的狀態。
    • Input: 指定為輸入
    • Output: 指定為輸出

將電位先設定5µs的低電位後,再轉換為10µs的高電位,最後再轉回低電位,並且讀取echo腳位的電位資料。

設定高電位讀取感測器資料
  • digitalWrite(pin, value) [3]: Pin 是定義要設定的腳位,value是設定HIGH跟LOW。
  • delayMicroseconds(value) [3]: 設定延遲的時間。

接著將剛才在上面建立的計算式子導入。

加入計算
  • pulseIn(pin, value)[3]: Pin 是定義要設定的腳位,value是設定HIGH跟LOW。
    • 程式中使用這個函式來讀取收到高電位的時間。

最後將顯示的指令加入。

加入顯示程式

等一切都好了就可以將程式燒錄進去Ardunio並且做開啟右上角的觀察視窗,看看判斷到的距離數據有沒有跟真實的差很多,沒有的差太多的話,就表示我們成功建立了讀取超音波的功能。

測試結果

參考資料
[1] ElectronicWings , HC – SR04
[2] Wiki, Speed of sound
[3] Arduino Functions

コメント

タイトルとURLをコピーしました