超 音波 感 測 器

超音波距離感測器 HC-SR04

超音波距離感測器 HC-SR04,是利用超音波射出和反射的時間差,來測定感測器和障礙物之間的距離 。如下圖所示:感測器有兩個筒狀物,其中一個為超音波發射器 (Transmitter),另一個為接收器 (Receiver)。當發射的超音波遇到感測器前方的障礙物後,會被反射。接收器接到反射的超音波後,會計算出從發射到接收的時間差。在氣溫不變下,超音波在空氣中傳播速度是固定的。時間差乘以傳播速度,就可以得到感測器和障礙物之間的距離。

超 音波 感 測 器

現在我們結合超音波感測器和一個蜂鳴器,來模擬做一個 "倒車雷達"。先看看成果影片:

當感測器和障礙物的距離大於15公分時,蜂鳴器叫的頻率較低。距離介於5到15公分時,蜂鳴器叫的頻率較高。距離小於5公分時,蜂鳴器則一直叫。

超 音波 感 測 器

  • Arduino Uno x1
  • 超音波感測器 HC-SR04 x1
  • 蜂鳴器 Buzzer x1
  • 電線 數條

因超音波感測器前方要偵測障礙物,電線要接在感測器的後方。

感測器 Arduino

Gnd GND (黑線)

Echo pin 12 (藍線)

Trig pin 11 (綠線)

Vcc 5V (紅線)

蜂鳴器 Arduino

+ pin 7

_ GND

共用 Arduino GND 和 5V 在麵包板上:

GND 接麵包板藍線 -

5V 接麵包板紅線 +

複製貼上下列程式於 Arduino IDE中,點擊 ”工具”,確認開發板是 Arduino/Genuino Uno, 序列埠 Port COM已接上。再點擊 ”上傳”,大功告成。

點擊 Arduino 右上方的序列埠監控器,即可看到距離感測值。

除蜂鳴器外,加上一個 RGB LED。不同的距離,LED 顯示不同的顏色 。

產品特性

適用於各種目標物

超 音波 感 測 器

金屬、玻璃、液位等過去以反射型光電感測器難以檢測的目標物,也能透過FW系列輕鬆實現。
並且不會受到物體表面顏色、圖案或光澤的影響。

極高的穩定性和可靠性

超 音波 感 測 器

全新的A.W.S.(Active Wave Stabilizer)*演算法可以穩定檢測,同時還能避免受到物體震動或外部干擾的影響。

* A.W.S.(Active Wave Stabilizer)功能除了可針對檢測狀況來使處理方式最佳化,亦可消除因物體震動導致超音波接收情況變化時產生的波動。

強力抗霧及髒汙

強力超音波可以穿過灰塵和髒污並檢測物體。另外,感測器機身的防護等級為IP67,具有非常出色的耐環境性。

超 音波 感 測 器

拆裝簡單的分離式接頭的防護等級也為IP67。

超 音波 感 測 器

不受背景的影響

超 音波 感 測 器

N.O D.(Nearest Object Detection)功能可以只檢測距離感測器最近的物體,因此不受背景光澤及形狀的影響。不需藉由調整感測器角度或更換背景顏色等方式就可以確保檢測的可靠性。

  • 超音波測距感測器原理
  • 電路連接
  • Arduino程式
    • 基本程式
    • 使用程式庫
  • 實際量測狀況

超音波測距感測器原理

超 音波 感 測 器

從硬體上面我們可以看到有兩個圓圓的東西,一個是用來發射(trig)超音波,而另外一個則是接收(echo)反射的超音波。

我們知道聲音速度為340m/s,因此只要從我們發射超音波開始計時,直到接收到反射的超音波,取得這段時間,就可以開始計算距離了。

只要將聲音速度*時間 ,就可以得到距離,但因為我們是發射出去跟反射回來,所以還要再除以2,得到以下公式:

Distance= 340*duration/2  (m)
超 音波 感 測 器

本篇使用的超音波感測器:

材料名稱蝦皮連結
【傑森創工】HC-SR04P 3.3V-5V 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。

如果你也是想使用超音波感測器來做相關應用,希望你看完這篇文章,能順利完成~~

最後!! 你喜歡這篇文章,或是這篇文章對你有幫助的話,也歡迎分享出去給需要的人,訂閱免費電子報獲得最新資訊😄😄😄