2014年5月3日 星期六

超音波模組HC-SR04與Arduino NewPing Library介紹


大家應該在很多機器人的Project中都看過這塊類似眼睛的板子,
超音波模組(超聲波模塊)常常被用來量測距離。

原理是什麼呢?
很簡單,一顆『眼睛』發射超音波,超音波撞到障礙物後反射,
另一顆『眼睛』接收超音波後取得音波往返的時間差。

大家都知道聲音在空氣中的傳遞速率約是340m/s,
只要將兩組數字相乘後即可得到模組與障礙物間『往返』的距離。


當然這數字會隨著溫度而有所不同,但這塊廉價模組通常是拿來練習用的,
對於精準度也不會太要求。(淘寶上大約5人民幣就可以買到,甚至更低。)
有些超音波模組會內建溫度感測並自行補償,精度也比較高,
但最終也反映在售價上。

超音波模組通常有四個針腳,
VCC和GND負責供給超音波模組的電源,
VCC接正極,GND接地。

對Trig(Trigger)輸入訊號觸發,Echo回傳測得的訊號。
對模組原理細節有興趣的可以Google搜尋HC-SR04,
本篇的重點將放在應用上。


大家可以先到上面的連結下載NewPing Library(Zip檔),
並且依照下列方式輸入Arduino。

這個Library省去了麻煩的pulsein指令,時間差換算距離也變得很簡單。
其中一個好用的特色是可以設定最大感測距離,
若超音波模組測到的距離大於最大感測距離,就送回0。

以下介紹幾個指令:

sonar.ping(); 進行量測並回傳超音波往返的時間(微秒),若超過最大感測距離則回傳0。

sonar.ping_in(); 進行量測並回傳來回距離(英吋),若超過最大感測距離則回傳0。

sonar.ping_median(iterations);  進行多次量測(預設值5次),捨棄0,並回傳時間中位數。

sonar.convert_in(echoTime); 將時間換算為英吋

以下為官網的範例程式目地為測量距離並且顯示



指令不只這幾項,
需要更詳細的內容可參考官方網站的說明





沒有留言:

張貼留言

歡迎討論、指正、發問!