紅外線接收器腳位

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

)

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

 

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

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

遙控功能 - 紅外線接收器之腳位 //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 微型系列 //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。
  • 紅外線的原理與應用。

Toplist

最新的帖子

標籤