這是一篇修復器材最順利, 花費時間做少, 心情最好的文章, 呵呵. (每次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。
- 紅外線的原理與應用。