■はじめに
前回は、自作赤外線リモコン信号送受信機の設計概略を紹介しました。今回は、製作編として、作例とプログラムを公開します。
■赤外線リモコン信号の解析 基本的なプログラムの考え方は、 KURO-RS からの信号を解析したプログラム
(以前に紹介した改造版 lcdproc の LCDd 用ドライバの kurors.c) と同じです。リモコン受信モジュールの信号が一定時間 H
または L であることに従って、リモコン送信側が 0, 1 あるいはデータの開始、終了を送っているかを判別します。
PIC
上のプログラムでは、タイマ割り込み内に判別プログラムを書きました。実際にプログラムをダウンロードして眺めるとわかりますが、ON / OFF
時間の比を調べ、4ビット受信するたびにシリアル・ポートに送信すると共に、EEPROM 内のデータとの照合をしています。
■通信プロトコル PIC16F628 の内部発振子を利用するため、19200bps, 8ビット, パリティなし、フロー制御なしとしました。コマンドは以下のとおりです。エコーバックはありません。
<ESC>p PORTA, 0 を 0 にする
<ESC>P PORTA, 0 を 1 にする
<ESC>q PORTA, 1 を 0 にする
<ESC>Q PORTA, 1 を 1 にする
<ESC>r PORTA, 2 を 0 にする
<ESC>R PORTA, 2 を 1 にする
<ESC>s PORTA, 3 を 0 にする
<ESC>S PORTA, 3 を 1 にする
<ESC>t PORTA, 4 を 0 にする
<ESC>T PORTA, 4 を 1 にする (open drain なことに注意)
<ESC>x 現在の PORTA, 3 の状態を返す
<ESC>X リモコン信号を送信する
<ESC>X を送って PIC から 'O' が返ってきた後、
送信するコード + '\n' (例: "400401000405\n") を送ると
赤外線リモコン信号が送信される
赤外線リモコンの信号を受信すると PIC からは、以下の文字を送ります。
L リーダ・コード受信
r リーダ・コード受信 (リピート・コード)
0-9,a-f 受信した4ビットのデータ
T トレーラ・コードを受信
P,Q,R,S トレーラ・コードを受信し、データを <code 1>, <code 2>, <code 3>, <code 4>
と解釈した (T の代わりに送る)
ただし、ソース・コード内で SEND_STATUS を定義した場合は、
PORTA, 3 が 0 のときには p を送る (現在の RA3 の状態を返す)
n,N リモコン信号受信エラー
リモコン信号の受信例は、以下のようになります。
r400401000405P → <code 1> ボタンを受信
r400401008485Q → <code 2> ボタンを受信
r400401004c4dR → <code 3> ボタンを受信
r40040d00bcb1S → <code 4> ボタンを受信, PORTA, 4 をトグル
La55a50afT → PIONEER CU-FD001 の <vol +> (非登録時)
La55ad02fT → PIONEER CU-FD001 の <vol -> (非登録時)
L1d00d926TrTrTrT → KENWOOD (RC-RP0702, VH7PC) の <vol +>
■基板を製作する ユニバーサル基板上に写真のような配置にしました。24ピンICソケットが手元になかったので、28ピンのものを使っています。また、基板の端に USB コネクタが来るようにICソケットの端のほうの足はカットしています。裏面の配線は、いきあたりばったりなので、参考までにしてください...

写真:ICを挿す前の様子

写真:配線を終え、ICを挿したところ

写真:パターン面の配線の様子。白い2本の電線は AC 100V、灰色が赤外 LED のアノード側、緑がカソード側 (GND)、茶色は赤外受光モジュールの GND, オレンジが受信した信号、赤が VCC。
警告:この回路では商用電源 (AC100V) を取り扱います。感電やショートなどがないよう十分に注意し、自己責任で楽しんでください。
■動作をテストする まだ、コンセントにはつながないでください。PC, 玄箱 PRO などにつなぎ、TeraTerm, cu などを使ってシリアル・ポートを開きます。適当なリモコンから送信して、何か文字が表示されれば OK です。次に、<ESC>X を送り、o が返ってきてから、受信された文字列+リターンを送って、機器が動作すれば、正常に送受信できています。
このあと、商用電源につなぐ前に、再度ショートなどがないことを確認してください。登録した (EEPROM に書いた) リモコンのボタンで、電源が ON/OFF されれば完成です。玄箱 PRO の lcdcompo と、LCDd (の kurors ドライバ) を入れ替えて、音楽を楽しみましょう。
■自分のリモコンに合わせるには 今のプログラムでは、電源ボタンに使いたいリモコンの信号が 40040100bcbd と受信される場合を想定しています(パナソニックの DVD レコーダの電源ボタンの信号)。kurors.c は 130 行目のように、
{"40040100bcbd", "POWER"}, /* power */
一つ目に左側にリモコン信号を、二つ目に lcdproc 内の key の名前を書きます。remocon.asm 内では 204 行目から、
org 0x2130
de 0x4 ; POWER button
de 0x0
de 0x0
de 0x4
de 0x0
de 0xd
de 0x0
de 0x0
de 0xb
de 0xc
de 0xb
de 0x1
de 0xff
のように、4ビットずつ書き、最後を 0xff とします。
■ダウンロードremocon.hex (PIC16F628 書き込み用 HEX ファイル) PIC16F628 用にアセンブルしています。PIC16F628A を利用する場合は、コンフィグレーション・ビットを確認してください。
remocon.asm
PIC 用のソース・ファイル。GPL v.3 で再配布をしてかまいません。
lcdcompo-0.1.tar.gz 玄箱PRO で実行する lcdproc client である lcdcompo の改造版。変更点は、上記のとおり、リモコンの電源ボタンが押されてアンプのスイッチが切れたときに mpd の再生を止めること。リモコンの再生ボタンが押されたときに、アンプのスイッチを入れることです。
kurors.tar.gz 以前に紹介した lcdproc をインストールしているときに差し替える、kurors.c と kurors.so をまとめたもの。ソースからコンパイルする場合は、
こちらのパッチを当てた状態で kurors.c を差し替えてください。
lcdproc_0.5.2p4_arm.deb ここで使っている変更を加えた lcdproc の Debian パッケージ。
<光永 法明>
コメントする