キャンピングカーのシュピーレンにはDC12Vのカークリーナーを常備しているが、空気枕用のポンプ(電池式)とタイヤ用コンプレッサ(DC12V)は別で、万が一を考慮し、旅行時のみ車に乗せている。
正月早々、ソースネクストからのメールで、「1台4役カークリーナー」(池商)が、タイムセールで65%引きの4,980円で売られていることを知り、1台で掃除機@だけでなく、空気枕やタイヤの空気入れAにも使えるとあり、ついポチり。
地震の発生前に注文していたが、地震により配達が遅れるかと思っていたが、当初の予定日の前日には到着した。早速、DC12Vのシガーソケットに繋いで動作を確認したところ、クリーナーの吸引力はまあまあで音もそれなり。フレキシブルなロングノズルもついているので狭いところでも使えそう。また、コンプレッサは目安となるエアーゲージBがついているので便利だが音はかなり大きい(空気枕は約1分、タイヤ・自転車の空気入れもOK)。さらに、DC12V電源ケーブルは4.2mあるので装着タイヤまで届きそう。そして、LEDライトCもついているので夜間でも使えそう。ただし、連続使用時間は10分以内となっている。
abc869までで、変形NECフォーマットリモコンであるIODataリモコンをPICで実現した。これを参考に類似のNECフォーマットリモコンもチョット変更するだけで実現できそうである。 しかしNEC系では space(0)の長さ(時間)が変わるが、SONY系は mark(1)の長さ(時間)が変わるフォーマットで、abc856で紹介した解読器では正しいビットデータが得られない。また、SONYフォーマットでは、ボタンを押している間中、同じリモコンコード(フレーム)を45ms毎に繰り返し送信している。
|
NECフォーマットでSONY信号解析 |
そこで、PICを使ってSONYリモコンコードを解読し、リモコンとして作ることにした。解読に使用する受信用のハードはabc856のものをそのまま使っても良いが、いずれ送信にも使いたいので、赤外線送受信機能を持つコンパクトな物を新たに作ることにした(今回は受信のみ利用)。なお、I2CによるLCD表示部は汎用利用出来るよう、別ブロックで作成することにし、今回は実装していない。
PICの設定はabc856とほぼ同じだが、LCD表示部がないのでI2Cは設定していない。念のためにMCCの設定も紹介しておく。
なお、DSMとCLCも設定したが、送信用なので今回は使っていない(今回は設定しなくても良い)。
プログラムはabc856をベースに、SONY信号解析部を追加した。当初、NECとSONYの解析切替にはスイッチ入力を使用したが、リーダー部の長さが異なる(NEC:約9000 uS/SONY:2400 uS)ことを利用して、自動でフォーマットを判断することにした(あくまでNECとSONYだけ識別)。
プログラム開発で苦労したのは、PIC16F18424メモリの少なさである。ROMで4バイト(4092/4096)、RAMで1バイト(511/512)しか残っていない。当初はSONY解析部をNEC部と同様の内容で追加したところ「メモリ不足エラー」がでたので、共通で使える部分をまとめたところ、なんとかメモリ容量内におさめることができた。さらに、プログラムエリアを増やそうとサブルーチンを作成したところ、今度は「RAMが足りない」とエラーが出る。コードデータサイズを減らすとRAM不足エラーが出なくなるが、今度はリモコンデータ読取時にデータメモリ不足となる可能性がある。まだ修正できるが余地があるが、面倒なので、サブルーチンを使うことをあきらめた。当初のスイッチ入力によるフォーマットの指定も、今後の改良時に使うかも知れないので、ソースファイルにはそれらの痕跡をコメントとして残した。
最終的に、赤外線リモコンのNEC(IO)フォーマットとSONYフォーマットを自動で判断し、その赤外線コードを解析し、表示することが出来た。
なお、Sonyフォーマットの場合、ボタンを押している時間が長いと「Buffer Full」エラー(データは取得済み)となるので注意!。
[USB接続パソコンのテラターム画面]
NEC(IO)信号を自動解析 |
SONY信号(12)を自動解析 |
SONY信号(15)を自動解析 |
SONY信号(20)を自動解析 |
|
※ 本プログラム作成にあたり、赤外線コード取得方法を参考にさせていただいた「初めてのPIC」さんに感謝。
※ 本レポートの参考・利用は、あくまでも自己責任でお願いします。