紅外線接收器腳位

紅外線接收器腳位

這是一篇修復器材最順利, 花費時間做少, 心情最好的文章, 呵呵. (每次debug碰到瓶頸, 都有想去撞牆的衝動,

紅外線接收器腳位
)

前幾天有網友在問Denon DCD-6.5L的遙控器型號, 印象中只要用一般標準Denon CD Player的遙控器即可(Kenwood的中型系統比較複雜). 為求慎重, 所以把藏在庫房深處的Denon DCD-6.5L挖出來測試. 哇, 如上三支遙控器都沒作用, 怎麼可能??放一陣子又掛了, 難道又要花時間debug? 手邊事情真的有夠多, 想起來還真是不願意呀, 

紅外線接收器腳位
 

紅外線接收器腳位

因為在面板上的按鈕功能都正常, 所以控制IC應該沒問題. 依經驗判斷, 比較有可能的是機板與控制面板的連接線接觸不良或斷線, 不然應該是紅外線接收器有問題. 

紅外線接收器腳位

之前修過一台Luxman CD Player, debug了好久, 最後花最多時間的是釐清紅外線接收器的腳位. 真的很討厭, 明明只有三支腳, 卻又不願意統一腳位定義, 很多小零件又沒datasheet可查, 電子業有時候真的很討厭, 呵呵. 有興趣的網友, 可以參考這一篇文章.

遙控功能 - 紅外線接收器之腳位 http://greatsound168.pixnet.net/blog/post/172125805

算是有經驗, 也算是運氣好, 稍微檢查一下, 真的是紅外線接收器壞掉. 更棒的是, Denon DCD-6.5L的PCB上有標示腳位, 參考上一篇文章, 馬上可以動手修改腳位與實驗看看.

紅外線接收器腳位

手邊的紅外線接收器腳位如上圖最右邊那一顆, Denon DCD-6.5L的腳位如最左邊所示,

二個元件的腳位還是不一樣, 所以還是得改腳位, 稍微彎折一下, 讓腳位順序符合就可以焊回控制面板了, 呵呵.

紅外線接收器腳位

完成了, 也測試OK!!

有史以來修機器最快的一次, 拆機器5分鐘, 找零件5分鐘, 找資料3分鐘, 彎折零件腳位1分鐘, 把零件焊回控制面板1分鐘. 呵呵, 不到20分鐘解決, 超順利的, 心情超好的, 呵呵

說破真的不值錢, 寫"音響修復經驗分享"這類的文章, 是提供有興趣的同好一些有用的資訊與經驗, 不要因為機器一點小小的功能故障就把機器丟了, 更希望有興趣與有能力自己動手修的同好, 可以搜尋這類文章後, 少走點冤枉路.

前幾年很愛玩日系的中型音響系統, 常常為了遙控器傷腦筋, 手邊遙控器最多的時候超過50支, 我敢說在台灣玩的比我瘋的應該不多, 呵呵. 遙控器麻煩在要同時有機器與遙控器一起測, 有時候因為是組合音響, 所以採用"連動遙控", 也就是主遙控功能在擴大機, CD Playe靠擴大機的連動線來遙控, 有些機種的CD Player(譬如Kenwood的DPF-1001)連紅外線接收器都沒有, 買100支遙控器來試也沒用, 呵呵.

有關Kenwood中型(DPF/KAF - 1001/5002/7002)與微型(DP/R - SE7/SG7)系統的連動遙控問題, 請參考

沒它也行 但沒它 真的很不方便 - 遙控器與連動線的眉角 - Kenwood 微型系列 http://greatsound168.pixnet.net/blog/post/172056082

其實不是每台機器不能遙控都是因為紅外線遙控器故障, 以下提供一些經驗與判斷順序供您參考

1. 單機CD Player應該都有遙控功能, 但組合音響可能只有擴大機有接收遙控的功能, 而CD Player則沒有, 二者之間要靠背板的"連動線"來把遙控訊號傳給CD Player, 所以組合音響的CD Player要先檢查是否有"紅外線遙控接收器的窗口", 才有可能可單機使用遙控器. 舉例來說

  1.1. Kenwood DPF-1001確定無法單機使用遙控器(因為沒有紅外線接收器), 而DPF-5002與DPF-7002可以與擴大機連動使用, 也可以單機使用

  1.2. Denon DCD-6.5L/7.5L, DCD-7.5S/-7.5E, 都使用與標準Denon CD Player一樣的遙控器(Denon的最單純)

  1.3. Sony/Denon/Kenwood/TEAC/Victor這些日系品牌的許多較高階CD Player, 在Audio Out有提供音量調整(Volume or Level up/down), 所以CD Player的遙控器上如果有Volume or Level鍵的話, 是用來控制CD Player的音量輸出, 不是用來遙控擴大機的音量的. 組合音響(CDP+Amp)的遙控器與CDP單機的不一樣.

2. 若是確定遙控器型號沒錯, 但卻無法使用遙控功能. 可能要從控制面板檢查起

  2.1. 先檢查基板與控制面板的連接線是否接觸不良或斷線

  2.2. 紅外線接收器只有三支腳, Vcc大多使用5V, 所以先檢查Vcc電壓是否正常

  2.3. 如果Vcc是正常的5V, 可以使用三用電表或示波器, 檢查紅外線接收器的輸出Pin (Out), 是否會隨著遙控器訊號產生電壓變化. 如果輸出Pin沒電壓變化, 那就是紅外線接收器壞掉

  2.4. 一般電子材料行應該都找的到紅外線接收器, 但要想辦法查出紅外線的腳位定義, 如此應該可以順利解決.  

再次謝謝謝瀏覽, 希望對喜歡動手自己修復機器的同好有幫助, 謝謝!!

這篇的主角是紅外線(infrared、IR),俗稱紅外光,其波長在770nm(奈米)至1mm(毫米)之間,而人眼可感知的電磁波波長一般在400到700nm之間,所以紅外線屬於不可見光,在通訊、探測、醫療、軍事等方面有廣泛的用途。

請看看底下電磁波頻譜示意圖,可得知紅外線介於可見光(visible)與微波(microwave)之間。(圖片來源:維基百科)

紅外線接收器腳位

紅外線接收器腳位

  這篇的重點是紅外線遠端遙控,家裡電視機、音響、錄影機、DVD播放器
的遙控器,便是利用紅外線傳輸,從遙控器端(紅外線發射器)透過紅外線通訊技術發出特定編碼,然後由電視機的紅外線接收器接收,進行解碼並執行相關功能,譬如開啟電視機的電源、加大或減少音量、切換頻道、等等。

我用的是Arduino Uno R3板子、Arduino軟體開發環境為1.0.4版。

所需電子零件:

  • 紅外線接收器(Infrared Receiver),38kHz,例如TSOP38238、TSOP2438、TSOP4438、PNA4602、FM-6038TH2、FM-8038TM2-5DN。
  • 紅外線發射器(Transmitter、Emitter或稱 IR LED),發射波長為940nm。
  • 100 ohm電阻。

為什麼是38kHz?這叫做載波頻率,因為生活周遭的物品都會散發出不定程度的紅外線,為了避免干擾,設計紅外線接收器時便讓它只對特定載波頻率有反應。不同廠牌的遙控器可能會使用不同的載波頻率,但38kHz最普遍。請注意,本篇使用38kHz的紅外線接收器,不一定可正確接收你家遙控器發出的紅外線訊號,需查詢該遙控器的規格,購買正確的紅外線接收器。

為什麼是940nm呢?我查詢了紅外線接收器的資料規格表後,其中註明了其最高峰波長為940nm,也就是最敏感的地方,所以我買了能發射波長940nm的紅外線發射器。其他常見的波長還有850nm,你也可以多買一個試試看。

底下是我買的零件,大約幾十元便可搞定。

紅外線接收器腳位

紅外線接收器的腳位非常簡單,從腳位Vout讀取紅外線訊號,腳位GND接地,以腳位Vcc提供5V電源。注意:有些紅外線接收器的GND和Vcc腳位相反,還請查詢資料規格表(datasheet)以免接錯。

紅外線接收器腳位

底下是接線圖,非常簡單。

紅外線接收器的Vout接Arduino的數位腳位2。

紅外線接收器的GND接Arduino的GND。

紅外線接收器的Vcc接Arduino的5V。

紅外線接收器腳位

我使用Ken Shirriff開發撰寫的IRRemote這套Arduino程式庫,下載後解壓縮,將目錄改名為IRremote,然後整個放進sketchbook/libraries裡,重開Arduino軟體開發環境後,便可在Sketch-Import Library...裡看到它的蹤影。

每家廠商都有其一套專屬的紅外線通訊協定(protocol),知名的有NEC、SONY、Philips的RC5與RC6、Toshiba、Sharp、等等,這也就是為什麼這一家的遙控器不能控制那一家的電視機。還好IRRemote已經幫我們準備好了,一般常見的紅外線協定都有支援。

程式碼如下,也非常簡單,收到紅外線訊號後便輸出到序列埠。

#include <IRremote.h>

int RECV_PIN = 2; // 使用數位腳位2接收紅外線訊號
IRrecv irrecv(RECV_PIN); // 初始化紅外線訊號輸入
decode_results results; // 儲存訊號的結構

void setup()
{
  Serial.begin(115200);
  irrecv.blink13(true); // 設為true的話,當收到訊號時,腳位13的LED便會閃爍
  irrecv.enableIRIn(); // 啟動接收
}

void loop() {
  if (irrecv.decode(&results)) { // 接收紅外線訊號並解碼
    Serial.print("results value is "); // 輸出解碼後的資料
    Serial.print(results.value, HEX);
    Serial.print(", bits is ");
    Serial.print(results.bits);
    Serial.print(", decode_type is ");
    Serial.println(results.decode_type);
    irrecv.resume(); // 準備接收下一個訊號
  }
}

然後,請拿著紅外線遙控器,對著紅外線接收器隨便按一些按鈕。

我將使用Apple Remote遙控器,這是一支非常簡單的遙控器,只有六個按鈕,分別是「選單」、「播放/停止」、「音量增大」、「音量減小」、「上一個/倒退」、「下一個/快進」,可控制Mac電腦的系統音量、iTunes的音樂播放、iPhone觀賞照片幻燈片、等等。

紅外線接收器腳位

當然了,你也可以拿其他紅外線控制器來實驗,譬如一般電視機或DVD播放機的遙控器。

紅外線接收器腳位

應會看到類似底下的輸出:

results value is 77E11050, bits is 32, decode_type is 1

其中77E11050便是紅外線訊號的編碼,32代表它有32個位元(也就是4 bytes),而1代表它屬於哪個協定,從底下列表可知1為NEC,這些是IRRemote支援的協定。

#define NEC 1
#define SONY 2
#define RC5 3
#define RC6 4
#define DISH 5
#define SHARP 6
#define PANASONIC 7
#define JVC 8
#define SANYO 9
#define MITSUBISHI 10
#define UNKNOWN -1

我將Apple Remote遙控器六個鈕都按過之後,便能知道每個按鍵的紅外線編碼:
「選單」77E14050 、
「播放/停止」77E12050 、
「音量增大」77E1D050 、
「音量減小」77E1B050 、
「上一個/倒退」77E11050、
「下一個/快進」77E1E050。

以上是紅外線接收器的部份,接下來我要使用紅外線發射器,模擬Apple Remote遙控器的功能。

底下是接線圖,非常簡單。

Arduino的數位腳位3接100 ohm電阻後接紅外線發射器(IR LED)的長腳。

紅外線發射器的短腳接地。

注意,IRRemote限定使用數位腳位3作為紅外線訊號輸出端。若想改用其他腳位,請參考Cooper Maa的2.1 發射紅外線訊號 part 2著手修改。

紅外線接收器腳位

程式碼如下,透過序列埠監控視窗命令紅外線發射器發出訊號:

#include <IRremote.h>

IRsend irsend; // IRRemote限定使用數位腳位3

void setup()
{
  Serial.begin(115200);
}

void loop() {
  int d;
  if( (d = Serial.read()) != -1) { // 讀取序列埠
    unsigned long v = 0x0;
    switch(d){ // 根據讀取到的資料,換成代表六個按鍵的紅外線編碼
      case '1':
        v = 0x77E14050;
      break;
      case '2':
        v = 0x77E12050;
      break;
      case '3':
        v = 0x77E1D050;
      break;
      case '4':
        v = 0x77E1B050;
      break;
      case '5':
        v = 0x77E1E050;
      break;
      case '6':
        v = 0x77E11050;
      break;
    }

        if(v != 0x0){
      Serial.print("read ");
      Serial.print(d);
      Serial.print(", IR send ");
      Serial.println(v, HEX);
      irsend.sendNEC(v, 32); // 輸出紅外線訊號
    }
  }
}

IRRemote函式庫支援很多種常見的紅外線協定,請使用適當的輸出函式:
void sendNEC(unsigned long data, int nbits);
void sendSony(unsigned long data, int nbits);
//  void sendSanyo(unsigned long data, int nbits); // 尚未實作
//  void sendMitsubishi(unsigned long data, int nbits); // 尚未實作
void sendRaw(unsigned int buf[], int len, int hz);
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);

將紅外線發射器對準我Mac電腦的紅外線接收端,啊哈,成功囉,我能透過Arduino控制音樂播放囉(雖然滿無聊的)。您可以試試家裡的遙控器,試試電源開關、頻道切換、音量增減等等按鍵。

可惜的是,因為IRRemote的限制,我們無法在一塊Arduino板子上同時加裝紅外線接收器與發射器。除非自己手動打造紅外線編解碼的功能,請參考底下的參考資料。

參考資料:

  • Cooper Maa的IRRemote 紅外線遙控教學。
  • Ken Shirriff's blog的A Multi-Protocol Infrared Remote Library for the Arduino。
  • Adafruit Learning System的IR Sensor,介紹紅外線原理,不使用Arduino程式庫,自己撰寫函式接收與傳送紅外線訊號。
  • Adafruit Learning System的Using an IR Remote with a Raspberry Pi Media Center。
  • SB-Projects: IR Remote Control Theory。
  • 使用紅外線遙控器搭配Arduino UNO發送控制訊號。
  • GarageLab的Tutorial: Arduino IR sender and receiver。
  • Instructables的Arduino IR sensor and LEDs。
  • Hack a Day的Using an IR remote with your Arduino。
  • 邱小新の單晶片筆記的ir remote control NEC protocol。
  • 紅外線的原理與應用。