学習リモコンの作成
はじめに
前回は赤外線リモコンの基本機能を作りましたが、目的の機器を操作するためにリモコンのデータを解析して、PICに書き込んで、という手順を踏むのはかなり大変です。
EEPROM (24xx64/256)を使うためのサブルーチンも作ったし、赤外線受光モジュールも手に入ったので、これまでのまとめとしてTVなどの赤外線リモコンのデータを受信、メモリに記憶しておいてボタン操作で送信できる学習リモコンを作ることにしました。相変わらずナントカの一つ覚えですが、出来上がりは例によってケータイ(正しくはピッチ)の「ガワ」に組み込んで、電話型学習リモコンが完成しました。
使ってみての感想です・・だいたいTV、照明、コンポで使う事が多い感じです。結構便利なのでワタシ的には重宝しているのですが、どのページのどのキーに何を記憶させたかをつい忘れてしまうので、それを自分のアタマに学習させるのが大変だったりします・・・(笑)
各部写真
←リモコン基板 両面スルーホール基板を電話の基板に合わせて切り取り、薄型のタクトスイッチを埋め込んでいます。受光モジュールといくつかの部品は基板裏面に実装しています。
出来上がり→ ←部品全体 (左から)
・ケース(表)
・バッテリー、スイッチ押釦
・リモコン基板
・ケース(裏蓋)
回路図
PICは16F84を10MHzで使用します。赤外線受光モジュールには秋月で入手したCRVP1738を使いました。また、データメモリにはEEPROMの24LC64を使います。待機時の消費電力を下げるため、受光モジュールとメモリの電源はPICの出力ピンから得るようにしました。この方法だとかなりノイズが乗ってしまうみたいで、リモコンデータの受信に失敗する原因を突き止めるのに一日かかってしまいました。ノイズ除去のためCRVP1738のVsとGND間のコンデンサは必須です。
操作キーはBポートの0 〜3と4〜7をマトリクス状にしてSWを繋げます。RB0〜3はSWとLEDを共用で接続していますが、SWの入力を見るときはポートを入力に、LEDを点灯するときはポートを出力に切り替えてピンを節約しています。JPはメモリ消去用のジャンパです。
赤外線LEDの出力段はバラした不要リモコンのドライバをそのまま流用しました。
プログラム
割り込みを使用します。ポートB割り込みはキー押下によるウェイクアップ、タイマ0割り込みは無操作によるタイムアップカウントのために用います。
操作が5秒以上行われなかった場合、CPUと周辺回路は省電力モードに切り替わり、消費電流は1μA以下に抑えられます。リモコンデータを記憶させる手順として、リモコンデータの解析(信号タイミングの調査)をまず行い、次にそのタイミングに従って再度入力されたデータをメモリにセーブするという方法をとっています。ですからデータを記憶させる場合、2回続けて本機に向けてリモコンを操作する必要があります。
赤外線信号を「ベタ」で記録することができればあらゆるリモコン方式に対応できるのですが、PICのメモリ不足のため、この方法は諦めて、ビット(1or0)データにデコードしたものを最大16bytesで記録するようにしました。ソースの記述はいつものようにPA.EXE拡張インストラクションを使用しています。
※PA.EXEは秋月のPICプログラマキットに付属していますが、こちらにて最新版が公開されています。
操作方法
- ページLEDで表示されるページが現在のページです。
●●●(ページ1)、●●●(ページ2)、●●●(ページ3)・・・●●●(ページ7)
のように表示されます。各ページに14個のデータを記憶できるので、最大14×7=98個のデータを記憶できます。- ステータスLED
点灯中は操作可能です。消えている場合は省電力モードになっています。
短く2回点滅=Ready(次の操作OK)、長く3回点滅=エラー です。- ページキー
1回押すごとにページが切り替わります。- データの記憶
メモリキーを押し、Ready表示されたら記憶させたいリモコンを本機に向けて目的の操作をします。続いてReady表示されたらもう一度リモコンを本機に向けて目的の操作をします(ちょっと面倒ですが2回やってください・・)。次に記憶させたいキー(1〜14のどれか)を押せば記憶完了です。記憶させる前にページキーでページを切り替えてもかまいません。
エラー表示された場合、もう一度同じ操作を行ってみて、それでもダメな場合は残念ながらそのリモコンは本機で対応できない物です。- データの送信
現在のページで、押されたキー(1〜14)に記憶されたデータを送信します。- その他
5秒以上何も操作しないと省電力モードに切り替わります。
メモリ内容を全て消去したい場合、rb6と7を同時にGNDに接触(回路図内のJPをショート)させるとメモリクリアが行われます。クリア中はステータス点灯、ページLEDは消灯します。Ready表示され、ページLEDが点灯すればクリア完了です。