2012年8月19日 星期日

2.1 發射紅外線訊號 part 2

前一篇中,我們提到,在使用 IRRemote Library 時,紅外線發射功能限定使用 pin 3,所以你只能把紅外線發射器接到 pin 3,不能接到其它腳位,像這樣:

image_thumb2

但是萬一你 pin3 有其它用途,真的不能挪來接紅外線發射器,那要怎麼辦才好呢?還好,其實 IRRemote Library 有提供一個選項可以讓你選擇其它腳位,方法是修改 IRRemote Library 的 IRremoteInt.h 這一段:

這段程式碼主要是設定 Timer,Timer 的設定會決定紅外線發射器所用的腳位。

以 UNO, Duemilanove, Diecimila 等板子為例,預設是 Timer2,發射器要接 pin 3,假如你不想用 pin 3 當作紅外線發射的腳位,你有一個選擇,可以換成 Timer1,這樣就可以改用 pin 9 來接紅外線發射器:

// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc
#else
  #define IR_USE_TIMER1   // tx = pin 9
  // #define IR_USE_TIMER2     // tx = pin 3
#endif

修改 IRremoteInt.h 之後,接線也要同步修改:

  • 把紅外線發射器 (IR LED) 接到 pin 9,長腳 (陽極) 串接一顆 100 ohm 電阻接到 pin 9,短腳 (陰極) 接到 GND
  • 按鈕的一支腳接到 +5V,另一支腳接到 pin 4 同時接一個 10K 電阻連到 GND

2012-08-19_11h38_22

程式碼的部份不需要修改,不過必須重新編譯,並且上傳到 Arduino 板子上就可以了:

8 意見:

Sven Wang 提到...

太有用太有用拉!!!這麼重要的pin3中斷腳位被占據真的很ooxx~~~~~XDDD
不過換pin9我就少一個pwm了XDD

Cooper Maa 提到...

沒辦法,這紅外線靠的就是 pwm,總是要給它一個 pwm 腳位~~ :)

Unknown 提到...

試用過之後,可以用button發射那一串紅外線訊號,而且我還用另一個arduino接收看看訊號正不正確,我也把冷氣的開關按鍵的訊號記錄下來了!
然後要用button發射控制冷氣卻都無法!我的冷氣的廠牌是hitach可是我用arduino接收訊號,發現他的協定都是Unknow!這該如何解決呢!跪求解救

Cooper Maa 提到...

冷氣機的紅外線訊號比較複雜,大部份都是廠商自己定義的 Protocol,可能沒辦法 decode。

IRRemote 有支援 Raw mode,應該還是可以把整個紅外線波形錄起來,再用 raw mode 的方式送出。不過這部份我沒有研究,也許你可以試一試。

Unknown 提到...

你好 請問一下若我有兩個紅外線訊號要發射那我該怎麼設定?例如接在Pin3 Pin9這兩個位置我該怎麼設定?硬體接線部分有什麼需要修改的呢?

Cooper Maa 提到...

Pin 3 & 9 只能選一個,不能同時使用喔
你說有兩個紅外線要發射,是要同時發射訊號嗎?還是只要照順序發射就行?
如果是後者,用一顆紅外線發射器照順序發射訊號就可以了
同時發射的話可能會有干擾問題,會影響接收端的判斷

Unknown 提到...

您好, 請問有沒有可能同時讓 Uno 板子支援藍芽模組與紅外線發射器?!

1. 藍芽模組的傳送與接收
http://coopermaa2nd.blogspot.tw/2012/06/amarino-android-arduino.html
Arduino 的 RXD (pin 0) 要接藍芽模組的 TXD,
Arduino 的 TXD (pin 1) 要接藍芽模組的 RXD。

2.
http://coopermaa2nd.blogspot.tw/2011/03/21.html
IRRemote 函式庫限定使用 pin 3,所以你只能把紅外線發射器接到 pin 3,不能接到其它腳位。

假設二種硬體 baud rate 都是設成 9600
有沒有可能同時讓 Uno 板子支援藍芽模組與紅外線發射器?!
例如更改 IRremoteInt.h (for 紅外線發射器) 或 for 藍芽模組 的.h 檔。

謝謝您!

Cooper Maa 提到...

我沒試過,不過藍芽模組與紅外線發射器用的腳位不一樣,應該不會有衝突