【Arduino】如何使用超音波測距感測器?

Arduino超音波測距感測器

超音波測距感測器原理

從硬體上面我們可以看到有兩個圓圓的東西,一個是用來發射(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】如何使用超音波測距感測器?〉中有 4 則留言

  1. 李先生 回覆

    請問,使用Arduino Sensor Shield V5.0 感測器擴展板的情況下,可以同時裝向前面和向後面兩個聲波感測器嗎? (使用不同digital signal腳位)

    • Derek Wu 文章作者回覆

      可以啊,但是程式中要設置兩個超音波
      例如:
      Ultrasonic ultrasonic1(13,12); //ultrasonic(trig, echo)
      Ultrasonic ultrasonic2(11,10); //ultrasonic(trig, echo)

  2. Andeson 回覆

    超音波測距感測器最大可以多遠?100公尺可以偵測的到嗎?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *