ArduinoでカセットデッキGX-R60EXの赤外線リモコンを作る 実動 ― 2026/01/16
本プロジェクト「ArduinoでGX-R60EXのリモコンを作る 」も最後になりました.
SONYのダブルデッキ用のリモコンRM-J903(以前約千円で購入)のコードを読んで,Arduinoのスケッチに書き加えました.RM-J903のA,B両デッキとしても,またELGOOのリモコンでも動作します.(他のSONYリモコンでも使えるものはあると思いますが,未確認です.) ELEGOOのリモコンと比較したところ,RM-J903の場合,約5m離れても問題なくコントロールできることがわかりました.受信角度範囲も問題ないので,受光モジュール周りの改造はしなくても良くなりました.
なお,受光モジュールはVS1838Bのままですが,供給電圧を5Vから3.3Vに変更しました.
ということで,本プロジェクトは無事終了です.
(本改造に伴う故障,事故など一切のトラブルには責任を持ちません.改造,スケッチの使用は自己責任で行ってください.)
補足:ここで使った互換 Arduino nanoですが,当初Serial通信ができず戸惑いました.SerialのドライバーやCPUの問題かもしれませんが,Arduinoの専門家ではないので分かりません.とりあえず,MacのArduino IDEでArduino Duemilanove or Diecimila, ATmega328Pを選ぶと動作したので,そのままで使っています.Windows10ではうまくいきませんでした.?
補足2:Sony のコードを訂正しましたが,まだ不完全かもしれません.(20261.18)
赤外線受光モジュールをOSRB38C9AAに変えました.受光部が小さめで,前面にVS1838Bのような妙なでっぱりが無いので,取り付けが容易だからです.また,GX-R60EXの前パネルにあける穴はVS1838Bに比べて小さくて済みます.
補足3:さらに訂正しました.もう大丈夫だと思います.(2026.1.19)
補足4: 使いだしてから10日経ちましたが,順調です.
---- 最終のスケッチ (予告なく変更することがあります) -----
#include "IRremote.h"
int receiver = 19; // Signal Pin of IR receiver Pin 19 (すなわちA5)
int PinN;
/*-----宣言部分-----*/
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results; // create instance of 'decode_results'
/*-----( Function )-----*/
void translateIR() // takes action based on IR code received
{
switch (results.value)
{
// For SONY remote control B deck (Set the DECK selector B)
case 0x000F0E: PinN = 5; break; // RESET
case 0x00070E: PinN = 4; break; // MEMORY for IPLS
case 0x000D8E: PinN = 6; break; // FAST REWIND
case 0x00038E: PinN = 7; break; // FAST FORWARD
case 0x00004E: PinN = 9; break; // PLAY BACK
case 0x000F8E: PinN = 8; break; // A. MUTE
case 0x00058E: PinN = 10; break; //PLAY FORWARD
case 0x00078E: PinN = 11; break; //REC PAUSE
case 0x00018E: PinN = 12; break; //STOP
case 0x00098E: PinN = 12; break; //STOP (WAIT)
// For SONY remote control A deck (Set the DECK selector A)
case 0x0000AE: PinN = 5; break; // RESET
case 0x00072E: PinN = 4; break; // MEMORY for IPLS
case 0x000CC1: PinN = 6; break; // FAST REWIND
case 0x0002C1: PinN = 7; break; // FAST FORWARD
case 0x000EC1: PinN = 9; break; // PLAY BACK
case 0x000FC1: PinN = 8; break; // A. MUTE
case 0x0004C1: PinN = 10; break; //PLAY FORWARD
case 0x0006C1: PinN = 11; break; //REC PAUSE
case 0x0001C1: PinN = 12; break; //STOP
case 0x0009C1: PinN = 12; break; //STOP (WAIT)
case 0xFFE21D: PinN = 12; break; //("FUNC/STOP")
case 0xFF02FD: PinN = 12; break; //("PAUSE")
case 0xFFA25D: PinN = 11; break; //("POWER")
case 0xFF906F: PinN = 10; break; //("UP")
case 0xFFE01F: PinN = 9; break; //("DOWN")
case 0xFFA857: PinN = 8; break; //("VOL-")
case 0xFFC23D: PinN = 7; break; //("FAST FORWARD")
case 0xFF22DD: PinN = 6; break; //("FAST BACK")
case 0xFF6897: PinN = 5; break; //("0")
case 0xFF9867: PinN = 4; break; //("EQ")
case 0xFFB04F: PinN = 20;break; //("ST/REPT")
default:
Serial.println(" other button ");
} // End Case
delay(500); //
} //END translateIR
void setup()
{
Serial.begin(9600);
Serial.println("IR Receiver Button Decode");
irrecv.enableIRIn(); // Start the receiver
for (int i = 4; i <= 12; i++) { pinMode(i, OUTPUT); }
for (int i = 4; i <= 12; i++) { digitalWrite(i, LOW); }
}
void loop()
{
if (irrecv.decode(&results)) // IR signalは来ている?
{
translateIR();
Serial.println(PinN);
digitalWrite(PinN, HIGH); // PinN is pin number.
delay(100);
digitalWrite(PinN, LOW);
delay(200); // チャタリング防止
irrecv.resume(); // 次の信号
}
}
最近のコメント