包括紅外線、超音波、霍爾元件、溫度感測、陀螺儀等等
真的覺得這個時代太方便了,以前這些感測器都還要自己配適合的電路
現在都有人直接做好一個模組在販賣了,而且品質比自己兜的穩定多了,價格也十分便宜!
參考網站:
http://coopermaa2nd.blogspot.tw/2011/03/1.html
http://coopermaa2nd.blogspot.tw/2011/03/irremote.html
一開始我也先去光華買了:
(1) 38k Hz的紅外線接收器 TSOP-1738
(2) 紅外線二極體發射器,波長940nm
如下接圖:
TSOP-1738的腳位如下圖
const int IR_rec = 2; // 紅外線接收器
const int IR_send = 3; // 紅外線發射器
const int LED = 13; // 紅外線指示燈
const unsigned int frequency = 38000; // 發射頻率(單位: Hz)
void setup() {
Serial.begin(9600); // 開啟 Serial port, 通訊速率為 9600 bps
pinMode(IR_rec, INPUT); // 把 irReceiver 接腳設置為 INPUT
pinMode(IR_send, OUTPUT); // 把 irLed 接腳設置為 INPUT
pinMode(LED, OUTPUT); // 把 ledPin 設置為 OUTPUT
tone(IR_send, frequency); // 產生指定頻率的脈波 (Pulses)
}
void loop() {
int IR_status = digitalRead(IR_rec); // 讀取 irReceiver 的狀態
Serial.println(IR_status); // 把 irReceiver 的狀態印到 Serial Port
// 檢查 irReceiver 是否有收到紅外線訊號
// 有的話,ir_status 會是 0
if (IR_status == 0) {
digitalWrite (LED, HIGH);
}
else {
digitalWrite (LED, LOW);
}
}
不過實際操作的時候,IR Emit的頻率可以上下調整一下,有時換到36k Hz比較不會那麼敏感。
當然用Arduino做這沒有什麼太大的問題,換到LabVIEW做也是可以的。Block diagram如下:我(1) 在Loop裡用tone發出32k Hz輸出至 Pin 13 (接發射IR二極體)。
(2) 然後先用digital pinMode定義Pin 2為input,再要求Pin 2 digital Read (IR_receiver)。
(3) Serial speed不論寫9600或112500都可以。
(4) 紅外線有收到訊號時,輸出為0;沒收到訊號時為 1,所以記得反相。
(5) 此時IR Emit 的射出頻率改成32 k Hz才能收到訊號,至於為什麼,我還查不到原因。
沒有留言:
張貼留言