材料清單
接收部分
1. Arduino 開發板 *1
2. 紅外線接收模塊 *1
3. 杜邦線 *3P
發射部分
1. Arduino 開發板 *1
2. R1電阻 100R *1
3. 紅外線發射LED2 *1
4. 杜邦線 *2P
紅外線接收電路
電路接線和程式碼詳 http://pizgchen.blogspot.tw/2016/11/blog-post_13.html
紅外線發射電路
有三種電路方式,都可以作為紅外線發射電路,如下圖:
為方便起見我們採用左側那個電路,但實際應用時最好採用右側電路,因為發射信號的距離會比較遠。實際電路接線如下圖:
讓 Arduino 發射 38KHz 的信號
請您先將下列程式碼 Upload 到 Arduino,然後將紅外線發射管對準紅外線接收器,並開啟接收器的 Serial Monitor:
#include <IRremote.h>
IRsend irsend;
void setup() { }
void loop() {
for (int i = 0; i < 3; i++) {
irsend.sendSony(0xa90, 12); // Sony TV power code
delay(100);
}
delay(1000);
}
您應該可以看到大概如下圖所示的畫面,在接收端的確有收到來自發射端發出的信號「A90」。
如果您夠仔細的話,應該會發現到雖然我們使用 D3 腳位作為發射紅外線信號,但我們並未在 setup() 區段內指定 D3 腳位的 pinMode 為 OUTPUT,那麼為什麼還可以正常發射 38KHz 信號呢? 因為 IRRemote Library 使用 Timer2 中斷,而 Timer2 是設定在 D3 腳位。
另外要提醒您,tone() 函式也是使用 Timer2 中斷,所以您如果同時使用 tone() 函式讓 Arduino 發出聲音,並且也使用 IRRemote Library 讓紅外線發射 38KHz 信號,您會發現它們無法同時作用。
發射紅外線編碼
Arduino 有內建許多廠商的紅外線編碼函式,如下
void sendNEC(unsigned long data, int nbits);
void sendSony(unsigned long data, int nbits);
void sendRC5(unsigned long data, int nbits);
void sendRC6(unsigned long data, int nbits);
void sendDISH(unsigned long data, int nbits);
void sendSharp(unsigned long data, int nbits);
void sendPanasonic(unsigned int address, unsigned long data);
void sendJVC(unsigned long data, int nbits, int repeat);
其實 KEYES 遙控器是採用 NEC 編碼格式,因此如果您想發出「1」的編碼,可以
irsend.sendNEC(0xFF6897, 32);
如果是未知廠商的編碼,您可以使用下列函式
void sendRaw(unsigned int buf[], int len, int hz);
以發射 KEYES 遙控器為例,如果要發射按鍵「1」的編碼,程式碼如下
unsigned int raw_1[68] = {0xB3,0x5A,0xB,0xC,0xB,0xC,0xB,0xD,0xA,0xC,0xB,0xD,0xA,0xD,0xA,0xD,0xA,0xD,0xA,0x22,0xB,0x22,0xA,0x22,0xA,0x23,0xA,0x22,0xA,0x22,0xB,0x22,0xB,0x21,0xB,0xC,0xB,0x22,0xA,0x22,0xB,0xC,0xB,0x22,0xB,0xC,0xA,0xD,0xB,0xC,0xA,0x22,0xB,0xC,0xB,0xC,0xB,0x22,0xB,0xC,0xA,0x22,0xB,0x22,0xB,0x21,0xB,};
irsend.sendRaw(raw_1,68,38);
進階題目
聲音函式和紅外線發射函式真的無法同時使用嗎? 答案是否定的。只要讓 tone() 函式和紅外線發射函式不使用同一個 Timer 中斷,如此即可解決問題,但此問題不在本文的討論範圍內。
相關連結
Timers and Interrupts http://letsmakerobots.com/node/28278
採購資訊
紅外線遙控器套件 http://goods.ruten.com.tw/item/show?21628077374704