Arduino 智能小車實作-超聲波與紅外線複眼的測試程式

超聲波模組就是透過發射與接收 (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);					// 延遲一秒鐘再重新測量
}

繼續閱讀 »

Arduino 智能小車實作-組裝超聲波與紅外線複眼模組

我把兩顆舵機 (MG995)當成小車的頸部,可以上下左右移動;然後安裝在頸部舵機可以隨之移動的裝置則有超聲波與紅外線複眼兩個模組。

超聲波 (或稱為超音波, UltraSonic)模組的作用就是透過感測所發射音頻的往返 (Trig/Echo)時間來計算前方屏障的距離。這裡我使用的型號是 US-100,具有溫度補償的功能。

而紅外線複眼模組,英文稱之為 IR Compound Eye,它的作用是透過四顆LED紅外線的感測以計算上下左右的距離。目前這個模組好像沒有型號可查,也只有一種可以選擇而已。

參考下圖,我把兩個模組上下組裝在一起,上方像兩顆眼睛的是超聲波;下方則為紅外線複眼。
超聲波與複眼紅外線模組

這兩個模組相似的功能都是偵測前方屏障物的距離,不太一樣的是:超聲波只能偵測前方水平位置 (約從 2cm~80cm),但量測結果會很精確;而紅外線複眼可以偵測上下左右四個方向的距離 (最高到 20cm),但常受外界光線干擾而影響距離的計算。

所以我同時裝了兩個感測模組,一則用以精確的計算 (只能水平)、另一則用以模糊的屏障搜索 (可以上下左右四方向)。如此外來的應用也可以比較廣泛,甚至能設計成寵物狗的樣子,用手勢操控來與小車互動。

繼續閱讀 »

第 1 頁 / 共 248 頁123456789101112...203040...最後一頁 »