紅外線傳輸是採用序列(Serial) 通訊的方式傳輸資料,在序列(Serial) 通訊的方式中常會提到 mark 和 space 狀態。space 是紅外線的預設訊號,Transmitter 處於 off 狀態,這時 IR LED 不會發射光亮;而在 mark 狀態 IR LED 會以特定的頻率送出 on/off 脈衝 (Pulse)。
序列通訊注意事項:
1.
因為 Receiver 會把訊號反向,所以從 Receiver 這端來看,space 意味著 high level 訊號輸出,而 mark 則是 low level 訊號輸出。
2.
要特別注意 mark 跟 space 並非我們要傳輸的 1 與 0 數位訊號。mark 跟 space 以及 1 與 0 之間的關係是由所用的
protocol 決定的。目前 IR
Protocol 有相當多種,如 NEC,
Phlips RC5, RC6, RC-MM, Toshiba, Sharp, JVC, Sony SIRC 等。
一般使用紅外線傳輸使用
30kHz 到 60kHz 的頻率(Bergmans, 2013,
Bergmans, 2013),本書實驗使用圖 37的紅外線發射器是38 khz,,它的發射的紅外線編碼,是採用NEC IR Protocol,其NEC format特點如下:
l
8-bit Custom Code 與 8-bit Data Code
l
38kHz 的 Carrier freqeuncy
l
使用 PPM (Pulse Position Modulation)
l
Bit time 為 1.125ms 和 2.25ms
我們為了實作紅外線傳輸,在圖 38之中,是我們紅外線傳輸的測試電子線路,將VS 1838B的Out 輸出腳位接在Arduino開發板的digital Input第11個腳位,其餘S 1838B的Vcc和Gnd腳位則同步+5V和Gnd腳位,進行下列實驗。
我們使用網路上GitHub, Inc網路上,Ken Shirriff攥寫的為Arduino開發板驅動IR的函式庫『IRremote』(Shirriff,
2013),驅動 IR LED 發射訊號,而偵測到的訊號則從右手邊的 receiver 跑出來。
紅外線接收模組測試程式(IRrecvDemo)
|
/*
*
IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
* An IR
detector/demodulator must be connected to the input RECV_PIN.
* Version
0.1 July, 2009
*
Copyright 2009 Ken Shirriff
*
http://arcfn.com
*/
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
void loop() {
if
(irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
}
|
資料來源:https://github.com/shirriff/Arduino-IRremote
執行上述程式之後,我們可以得到圖 39的畫面,我們使用市面上常見的紅外線遙控器,對著VS 1838B,按下紅外線遙控器上面任合一顆按鍵,如果角度對,接收成功的,可以從Arduino
開發板的監控畫面得到圖 39的畫面,可以看到回傳一個『FF18E7』三位元組的資料。
沒有留言:
張貼留言