2013年10月3日 星期四

Arduino範例17:用Arduino+LabVIEW 測試紅外線收發 (TSOP-1738)

這一陣子想嘗試一些露天拍賣賣的一些模組
包括紅外線、超音波、霍爾元件、溫度感測、陀螺儀等等
真的覺得這個時代太方便了,以前這些感測器都還要自己配適合的電路
現在都有人直接做好一個模組在販賣了,而且品質比自己兜的穩定多了,價格也十分便宜!

參考網站:
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的腳位如下圖

Code
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才能收到訊號,至於為什麼,我還查不到原因。

沒有留言:

張貼留言