前回のリモコン機能では 38KHzの変調を555タイマーICによってハードウェア的に生成していました。 今回はもう少し工夫してArduinoのみでこの周波数を出すことに挑戦します。 これにより。Arduinoのボードと赤外線LED、抵抗一本のみで 赤外線リモコンを作製いたします。
Updated on Apr. 11, 2010.回路は簡単です。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とその反転の繰り返しとなっていることがわかりました。 これで、異なる機器の間で誤動作が生じる可能性を下げることができます。 このようにシステマティックに見てみますと プログラムの作成も簡単ですね。 まとめますと送信すべき信号は以下の通りです。
上記の38 kHzのソフトウェアによる発振と Regzaの信号(Leader + 00000010 11111101 01001000 10110111+terminator)を組み合わせて TVの電源をon/offする赤外線信号を発信するプログラムを書きました。 スケッチからコピー可能です。
ここで公開するアイデア/装置は安全性を保障しておりません。 用途に応じた設計を行い、十分な安全検査を行ってからご利用ください。 本サイトの情報の営利目的での利用はご遠慮ください。 本サイトの内容の無断転載を禁じます。© 2010 TYK