超聲波模組就是透過發射與接收 (Trig/Echo) 音頻的原理來計算距離的。使用方法參考店家對 US-100 型號的說明:

一個控制口發一個10US以上的高電位,就可以在接收口等待高電平輸出;一有輸出就可以開定時器計時,當此口變為低電位時就可以讀定時器的值,此時就為此次測距的時間,方可算出距離。如此不斷的週期測,就可以達到你移動測量的值了。
超聲波模組 US-100

這裡我整理了兩個測試程式。其中第一種方式是直接針對腳位作電位的改變,但需要自行將往返的時間 (每公分的音頻速度為 29 微秒);第二種方式則是透過 <<NewPing.h>> 函式庫,採以 Wrapper 較高階的作法來取得音頻的距離。

實際觀察方式就是透過 Serial Port 回傳所感測的距離資料,所以在 Arduino IDE 環境中,需點選【工具】→ 【序列埠監視窗】開啟監視窗觀察測試的結果。

UltraSoniceTest1.ino:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const byte trigPin = 9;		// Trig 接腳編號
const byte echoPin = 10;	// Echo 接腳編號
unsigned long duration;		// 儲存高脈衝的持續時間
 
unsigned long ping() {
  digitalWrite(trigPin, HIGH);		// 觸發腳位設定成高電位
  delayMicroseconds(5);			// 持續 5 微秒
  digitalWrite(echoPin, LOW);		// 接收腳位設定成低電位
 
  return pulseIn(echoPin, HIGH);
}
 
void setup() {
  pinMode(trigPin, OUTPUT);			// 觸發腳位設為輸出
  pinMode(echoPin, INPUT);			// 接收腳位設為輸入
 
  Serial.begin(9600);				// 初始化序列埠
}
 
void loop() {
  duration = ping() / 58;			// 把高脈衝時間值轉換為公分單位
						// The speed of sound is 29 microseconds per centimeter.
  Serial.print(duration);			// 顯示距離
  Serial.print("cm");
  Serial.println();
 
  delay(1000);					// 延遲一秒鐘再重新測量
}

繼續閱讀 »