改良型 学習リモコン (Networkでリモコン操作)
2006.10 | 回路図修正 |
2003.04.07 | ソースファイルを条件付き公開に変更 |
2001.10.27 | 公開 |
はじめに
PICを使った学習リモコンの制作を以前に紹介しましたが、学習できないリモコンの種類がいくつかあり、ページをご覧になった方々から「どれくらいの機種に対応しているのか?」「学習できない場合があるのはなぜか?」などのご質問を頂きました。
これまでのバージョンでは、既知のしかもプログラムで想定した標準方式によるフォーマットのリモコン信号でなければ正しく受信(学習)できず、決して良い出来ではなかったと思っています。
今回はデータ記録の方式を変更して、受信したデータをそのまま(いわゆる「ベタ」)で記録するようにして、1つのコマンドで記録できる情報量も256bit(スタートビットを含めて32bytes)に増やすこととしました。
これによって、独自の方式を使っているリモコンや、長いコマンド(たとえばエアコンの制御や、ビデオの予約コマンドなど)を送信するリモコン等、かなり多くの家電製品に対応できたと思っています。
(学習できるリモコンの種類にも若干の制約はありますが・・・詳しくは後述します)また、キー入力(リモコンのボタンとなる)部分はある程度の拡張性を持たせて、環境制御装置(神経筋疾患患者さんなどが電気製品等を操作するための装置)などの外部機器からの制御も行いやすいようにしてみました。
最近、「ユビキタス」などという言葉をよく耳にしますがこれが普及するには相当時間がかかるのではないかなぁと思っています。現在のところ我が家で相互通信やネットワークに繋がる家電(機器)といえば電話、モデム、パソコンくらいしかありません。ゲーム機もオンライン接続できるようになっていますが、普通の家庭ではまだまだこんなところでしょう。(2003年現在)
巷ではネットワーク家電がちらほら出てきていますが、これ以前の家電製品は唯一赤外線リモコンが外部からの操作をするための方法になっています。
せっかくリモコン制御できるものが沢山あるのですから、ネット接続型のI/Oコントローラと学習リモコンを接続して、ネットワーク家電コントローラとして使ってみるのも面白いと思います。
回路図
新・学習リモコン回路図(1000*750 GIF 14KB)
- PICの動作クロックが10MHzでは少々苦しいため、今回は20MHz版を使用しました。
- シリアルメモリも前バージョンの24LC64(64k)から24LC256(256k)に変更しました。
メモリは1つまたは2つ載せられます。- 状態確認を、LEDと圧電ブザーで行うようにしました。
- キー入力は6bit(1〜63個)の2進数で指定します。
各ピンはHiにプルアップされていますので、Hi(またはハイインピーダンス)のピンを'1'、Lowにしたピンを'0'として表記すると、
111111 = 入力なし, 111110 = key1, 111101 = key2, 111100 = key3, ・・・・, 000000 = key63
となります。入力なし以外の状態になると、そのキー番号が入力されたことになります。
複数のピンをHi→Loにする際、ピン間のタイムラグは2μs以内に収めてください。
また、キー番号の確定には各ピンの信号状態を最低10μs以上保持するようにします。据え置きに近い形を前提に作ったのでAC電源アダプタの使用が望ましいです。電池で使用する場合は電源スイッチを付けて、使わない時はOFFにするといいでしょう。
キー入力(学習リモコンで記憶/送信するコマンドを選ぶスイッチ)については、用途や利用形態などにより、最適な方法を選択して作ってください。ロジックICを使うと結構複雑になるので、いっそPICなどを使ってキー入力bitを生成するような入力装置をつくったほうが楽かもしれません。
以下に簡単な例を示します。
![]() |
基板写真 : まだケースに入れていません。PICNICとのインタフェース用にゲートIC(74HC00) を2つ載せています。 |
部品(パーツ)について
赤外線受光モジュールは、Active Low(信号受光時にLow出力となる)の物を使います。
今回はCRVP1738を使用したため受光モジュールの中心周波数(fo)は38kHzとなっています。赤外線リモコンのキャリア周波数は、メーカーや機器によって異なりますが、家電一般には38kHzや40kHzが多く使われるようです。
受光モジュールはそのfo近辺で感度が良くなるように作られているので、たとえば38kHzのモジュールで40kHzの信号を受信しようとすると上手くいかない場合もあると考えられます。幸いCRVP1738は40kHzの信号もちゃんと受信してくれたので良かったですが、学習させたい対象のリモコンのfoがわかっていて、その周波数のものしか使わないのであれば、それに対応したfoの受光モジュールを使用すると良いでしょう。38kHzも40kHzも使いたい場合には、なるべく許容範囲の甘いモジュールを選定する事がポイントになります。(2003.8 追記)(2006.10 回路図修正)
受光モジュールの種類や電源の品質によっては受信信号にノイズが乗ってしまい、学習に失敗する事があるようです。
対策として、受光モジュールの電源部にLCフィルタを入れるようにしました。赤外線LEDは光電子のEL-1L7を使いました。ピーク波長は940nmです。受光モジュールもそうですが、ピーク波長が極端に異なるリモコン機器には対応できない可能性があります。
圧電ブザーは、3〜5Vの電圧を与えると「ピー」と鳴ってくれるタイプの物です。
面倒くさくてプログラムで発振させる部分を書いていないので、圧電スピーカーでは鳴りません。
プログラム
リモコンデータを学習する際には25.6us(39kHz)のタイマー割り込みを使い、受信した信号の'1'と'0'の時間をそれぞれ2バイトのカウンタでカウントします。カウンタの値は送信用に2倍して、順次シリアルメモリに転送します。
メモリは256k(32kバイト)を32ブロックに分け、1ブロックあたり1024バイトのエリアを1つのコマンド記憶領域として扱います。
つまり1回の学習で記憶できるデータ量は、信号の'Hi'と'Lo'の1セットで1bitを表現した場合、スタートビット(リーダ)を含めて256bitということになります。メモリ#0のメモリアドレス0000hからの1ブロックは受信時のワークバッファとして使い、確定後にセーブ先ブロックにコピーするようにしました。したがって実装するメモリチップが1つで最大31種類、2つで最大63種類のコマンドが記憶できます。
メモリを1つしか実装しない場合、32番以上のキーを指定しても無効とします。
また、最大7つまでのコマンド記憶容量でよければ、24LC64を1ヶだけの実装でOKと思います(未確認)・・(^^;記憶したデータを送信する処理では、メモリから順次読み出したカウントデータに従ってビットの'1'と'0'を赤外線LEDの点滅に置き換えます。12.8us(39kHzの倍サイクル)の割り込みによってLEDをオンオフし、39kHzのキャリアを生成しています。割り込み処理毎にカウンタから1を引き、0になった時点でそのビットの処理を終わり、続くビットのカウント値を得ます。
送信するときのキャリア周波数は上記のとおり、39kHzという半端な値にしています。これは38kHzと40kHz両方の機器に対応させるための苦肉(?)の策でして、受信する機器側の許容範囲に大いに甘えてしまうという方法なのですが、意外にちゃんと受信してくれるようです。我が家の赤外線リモコン家電は全てOKでした。 (^^)v
★新・学習リモコンプログラムソース&Hexファイル の公開について 2003.4.7
記録・送信できる赤外線信号について
本機が記録できる赤外線信号の条件を示します。
- キャリア(搬送波)で変調されたパルス波であること。
- キャリア周波数が受光モジュールの許容範囲であること。
(使用する受光モジュールの特性に依存します。例:38〜40kHz)- 赤外線の波長帯域も受光モジュールの許容範囲内であること。
- 信号のHiとLoで1bitを表現するとした場合、記録しようとする信号が256bit以内であること。
- 信号のHiまたはLoの幅が、25.6us〜52.4msの範囲内であること。Loが52.4ms以上続いた場合はコマンドの受信終了とみなします。
本機が送信する信号を受信可能な機器の条件を示します。
- 本機で使用する赤外線LEDの波長で受光できること。
- キャリア周波数 39kHzで受信可能であること(プログラムの修正で送信キャリア周波数の変更はある程度可能ですが)。
その他
- リピートコード(前に送ったコマンドの繰り返しを意味するコード。例えばボリュームUPのボタンを押し続けると音量アップのコマンドに続いてリピートコマンドが繰り返し送られる)のように、連続して送られるコマンドには対応していません。
コマンド間のインターバルが52.4ms以上空く場合には受信した最初のコマンドのみ記録される仕様としています。
操作方法
◎初期化
- 受信SWを押しながら電源を入れるとメモリの初期化を行います。初期化が終わると「ピピピ」と鳴ります。(初期化は最初の一回だけ行って下さい。初期化するとそれまで記憶していた内容は消去されます)
◎受信(学習)手順
- 受信SWを押します。
- 「ピ」と鳴り、LEDが点灯します。
- この状態で学習させたいリモコンを本機の受光モジュールに向けて(できるだけ近くで!)操作してください。リピートコードが続くとエラーになる場合があるので、リモコンのボタンはポチッと手早く押すようにしてください。
(この場面で受信SWを押すと受信をキャンセルします)- 「ピ」で正常受信、「ピーピーピー」はエラーです。
- 次に記憶させたいキーを押す、または入力装置でキーを指定します。
(この場面で受信SWを押すと記憶をキャンセルします)- 「ピピー」と鳴りLEDが消え、記憶が完了します。
◎送信手順
- 目的のキーを押す、または入力装置でキーを指定します。
なお、送信時に音は鳴りません。コマンドの送信中はLEDが点灯します。
赤外線信号を遠くまで到達させる
部屋の中などで、より遠くまで信号を到達させるための方法としてLEDの電流を増やす事が考えられます。通常、赤外線LEDの順電流に対する発光出力(Po/If)はリニアに増え、EL-1L7の場合ですとTw=100usのパルス電流では1Aが最大定格となっています。
また、あらゆる方向にある機器を制御させるには、LEDの数を増やして万遍なく信号を照射するという方法があります。
本機を部屋の隅に設置した場合を考えて、部屋の家電(エアコン、照明、TV、VTR、天窓など)を制御するために赤外線LEDの数を増やしてみました。ちょっと不格好ですね・・・
LEDは放射状になるよう3〜4本を配置して、ドライブするトランジスタもそれに見合ったIc,Pcの物に変更します。
PICNICと接続(ネットワークで家電コントロールをやってみる)
秋月で販売されているPICNIC(PIC Network Interface Card)と本機とを接続し、LAN経由でリモコン操作ができるようにしてみました。
PICNICのデジタル出力ポートで信号のHiとLoを切り替えるには基本的に1ピンづつでしか操作できないため、リモコンのキー入力に直接接続は行わずNANDゲートを通す形にして、6bitのキー番号を1ピンづつ設定した後、SENDピンをHiにした時点でキー番号が有効となり、リモコンの送信が行われるようにしています。
PICNICの初期状態でSENDに接続するピンが入力設定になる場合、ゲートの状態が不安定になるのでSEND入力はプルダウンとするようにしました。(2001.10.10)応用として、例えばインターネットの常時接続環境であれば、外出先(iモードとか)からPICNICに付属している温度センサを使い部屋の温度を調べて適温でない場合はエアコンのスイッチをONにするとか、予約を忘れたTVの録画を開始するなど、いろいろと楽しい事ができそうです。
PICNICのサンプルプログラムを参考にして、リモコンの操作プログラム(VB6)を作ってみました。
私は家に居るときはほとんどPCの前に座っている状態なので(笑)、すごく便利です。
ボタンクリックのプロシージャでは回路図中P0〜P5に接続したピンを設定した後、
SENDピンをOFF→ON→OFFとすることでA0〜A5の同時設定を行います。
PICNICと接続しているところ。全部むき出しでちょっと怖い。。
経過報告
(その1 2001.10.24)
PICNICとリモコンをケースに収めました。リモコンのほうは丁度良い大きさのケースがなかったので、発泡塩ビ板を切って作りました。
赤外線LEDのところにはアクリルの半球を被せて体裁を繕っています(東急ハンズにて透明の物を購入。裏からクリアパープルで塗装)。
(その2 2001.10.27)
2日ほど前に発売されたタカラの「デジQ」のコントロール信号を学習させてみました。
プロポの電源を入れておいて、リモコンの学習スイッチを押すとすぐに受信完了の状態になります。プロポの送信信号は解析していないのではっきりとは言えませんが、適当な間隔でデジQへのコントロール信号をリピート送信しているようです。
本リモコンで学習できるのはデジQにおける1単位のコマンド(?)相当なので、プロポの状態を「直進」「左旋回」「右旋回」などいずれかに固定しておいて、リモコンの学習スイッチを押すとその信号の一部が記録されるので、それを送信してあげると少し(0.5秒くらい)だけデジQを動かすことができます。
マウスをカチカチするとチビチビ進むチョロQもかわいいものです。
おわりに
今回の改良にあたっては、国立療養所八雲病院の作業療法士である田中先生(ホームページ「ひらけごま」)から貴重なご意見を多数頂きました。この場を借りて御礼申し上げます。
また、筋萎縮などでリモコン操作の難しい方に手軽に使って頂けるよう、本リモコンに接続して1スイッチでの操作を可能にするような入力装置も制作していらっしゃいます(近々公開?)ので、関心のある方は上記ホームページを訪問してみて下さい。さらに、メール等でのご質問や情報交換させて頂いた方々、赤外線リモコンに興味をもたれている方がかなり多くいらっしゃるという事も制作の励みになりました。ありがとうございました。