赤外線リモコンの複製2(38 kHzをソフトウェアで制御)

前回のリモコン機能では 38KHzの変調を555タイマーICによってハードウェア的に生成していました。 今回はもう少し工夫してArduinoのみでこの周波数を出すことに挑戦します。 これにより。Arduinoのボードと赤外線LED、抵抗一本のみで 赤外線リモコンを作製いたします。

Updated on Apr. 11, 2010.
動作状況の動画(YouTube)
ArduinoのリセットボタンでTVをon/offしている様子です。

ハードウェア

回路は簡単です。Arduino Pin No. 2---irLED(+)/(-)---R(47Ω)---GND と接続してください。50Ωは60mAでRに3 V、irLEDに2 Vの概算からです。

ソフトウェア作成

まず、38kHzを出すためのディレイを概算してみます。 1/38kHz=26.3 usecですのでこの周期でon/offを繰り返せば良いと考えられます。 しかし、Arduinoでコードを処理して実行するための遅れ時間等の 影響がありますので、実際にはこの前後で周波数を振ってみて、 動作する遅れ時間を割り出す必要があります。 試してみたところ、digitalWriteは時間遅れが 大きく、悪影響がありそうでした。 そこで、Pin No.2への出力を PORTD=B00000100で行うことといたしました。 Tdelay=26.3 usec/2=13 usecごとにon/offし、 "1"を出力している時間が2.4 msecですので T4Repeat=2400/26≒91として Leaderのコードは以下のように書けます。


void Leader(){ 
  for (int i=0; i<T4Repeat; i++){ 
       PORTD=B00000100;
      delayMicroseconds(Tdelay);  //on for Tdelay
        PORTD=B00000000;
      delayMicroseconds(Tdelay);  //off for Tdelay
      }    
    digitalWrite(2, LOW);    // LEDpin8に0Vを出力。
      delayMicroseconds(T1);                  // 600usec offのまま。
}

全体のコードはここからコピーしてください。 T2Repeat等は遅れを考慮して少し少なくしています。


最後に液晶TV(TOSHIBA REGZA, CT-90338)のリモコンをコピーしてみます。 ルネサステクノロジーに きちんとした規格が書かれています。

32bit中、最初の16bitが機器名、次の8bitがデータ、最後の8ビットが確認のための データを反転させた信号となっています。 実際に電源on/offボタンを読み取ってみたところ、 最初の16bitも8bitとその反転の繰り返しとなっていることがわかりました。 これで、異なる機器の間で誤動作が生じる可能性を下げることができます。 このようにシステマティックに見てみますと プログラムの作成も簡単ですね。 まとめますと送信すべき信号は以下の通りです。


Regzaのリモコン(CT-90338)の電源ボタンから送付される信号。


タイミングチャート。stopの周辺はあまり自信が無いです。


上記組み合わせでTVに信号を送信します。

上記の38 kHzのソフトウェアによる発振と Regzaの信号(Leader + 00000010 11111101 01001000 10110111+terminator)を組み合わせて TVの電源をon/offする赤外線信号を発信するプログラムを書きました。 スケッチからコピー可能です。



戸田システムウェア

ここで公開するアイデア/装置は安全性を保障しておりません。 用途に応じた設計を行い、十分な安全検査を行ってからご利用ください。 本サイトの情報の営利目的での利用はご遠慮ください。 本サイトの内容の無断転載を禁じます。© 2010 TYK