內容目錄
超音波測距感測器原理
從硬體上面我們可以看到有兩個圓圓的東西,一個是用來發射(trig)超音波,而另外一個則是接收(echo)反射的超音波。
我們知道聲音速度為340m/s,因此只要從我們發射超音波開始計時,直到接收到反射的超音波,取得這段時間,就可以開始計算距離了。
只要將聲音速度*時間 ,就可以得到距離,但因為我們是發射出去跟反射回來,所以還要再除以2,得到以下公式:
Distance= 340*duration/2 (m)
本篇使用的超音波感測器:
材料名稱 | 蝦皮連結 |
---|---|
【傑森創工】HC-SR04P 3.3V-5V Arduino 超音波感測器 |
電路連接
Arduino程式
基本程式
int const trigPin= 13;
int const echoPin= 12;
int Duration;
int Distance;
void setup() {
Serial.begin(115200);
pinMode(trigPin,OUTPUT);
pinMode(echoPin,INPUT);
digitalWrite(trigPin,LOW);
}
void loop() {
digitalWrite(trigPin,HIGH); //發射超音波
delay(1);
digitalWrite(trigPin,LOW);
Duration = pulseIn(echoPin,HIGH); //超音波發射到接收的時間
Distance = Duration*0.034/2; //計算距離(cm)
Serial.println(Distance);
}
在loop中,我們會先將trigPin觸發一次,也就是將超音波發射出去。
在後面的 Duration = pulseIn(echoPin,HIGH); ,開始記錄echoPin接收到脈波訊號的時間,回傳值為微秒( 10-6 s )。
有了時間之後,就可以換算距離(cm)= Duration*0.034/2 。
使用程式庫
程式庫來源: ErickSimoes/Ultrasonic
安裝程式庫的方法可參考:傑森創工的超音波測距模組HC-SR04快速上手
#include <Ultrasonic.h>
Ultrasonic ultrasonic(13,12); //ultrasonic(trig, echo)
int distance;
void setup() {
Serial.begin(115200);
}
void loop() {
distance= ultrasonic.read(); //讀取距離
Serial.print(distance);
Serial.println(" cm");
delay(500);
}
只要將trig、echo的腳位設定好,之後只需要用ultrasonic.read(); 這行程式,就可以輕鬆讀取距離數值(cm)。
這就是使用程式庫的好處,整體變得簡單許多。
如果之後還會結合更多感測器,那用程式庫就會讓整體更簡潔。
實際量測狀況
雖然在低於2cm時,無法準確偵測,但就一般偵測距離還算準確。
以前我在製作避障車時,也很常使用超音波感測器來當作偵測距離的sensor。
如果你也是想使用超音波感測器來做相關應用,希望你看完這篇文章,能順利完成~~
最後!! 你喜歡這篇文章,或是這篇文章對你有幫助的話,也歡迎分享出去給需要的人,訂閱免費電子報獲得最新資訊😄😄😄
請問,使用Arduino Sensor Shield V5.0 感測器擴展板的情況下,可以同時裝向前面和向後面兩個聲波感測器嗎? (使用不同digital signal腳位)
可以啊,但是程式中要設置兩個超音波
例如:
Ultrasonic ultrasonic1(13,12); //ultrasonic(trig, echo)
Ultrasonic ultrasonic2(11,10); //ultrasonic(trig, echo)
超音波測距感測器最大可以多遠?100公尺可以偵測的到嗎?
這裡有超音波感測器該注意的事項供你參考:
https://www.davidhuanglab.com/post/hc-sr04
裡面有提到說最遠距離最好不要超過2公尺。