カーナビ複合機や機材コンポーネントを同 一メーカーの製品で統一したりすればリモコ ンを何個も持ち替えながら操作するはめにはならないのだろうけれど、リーズナブルな価格優先で選んだり気に入ったものを組み合わせて使っている場合には、 どうしても複数メーカーの製品が混在することは避けられない。 そこで普通なら学習リモコンの登場となる訳だが、たまたま自宅用に買ったシーリングライト のリモコンを全く使わないので廃棄しようとしたが、よく見てみると持ちやすくシンプルな形状でLEDも3個装備で強力となかなか使いやすいかも?と思えて きたので、 どうせ捨てるものならばと心置きなく改造にトライしてみることにした。
今回も以下のサイトで公開されているソースを参考にした。 感謝!
今回使用したマイコンはPIC16F1936、必要なI/Oポートは10個だけだったの
で、こんなに大きなパッケージの石を使う必要はなかったのだが、手持ちで外付けクリスタルなしでピン数が足りる石の手持ちがコレしかなかったというのが主
な理由。 Aポートは完全に遊んでいるし、Cポートも空きが多いので液晶モジュール等を繋げて動的にキーアサインが変わるのを表示するとかの拡張をするこ
とも余裕で可能です。 今回もPIC12F1822版と同じPicKit3とXC8コンパイラで開発しています。 大量にボタンが必要な方も、このマイコンなら何ら問題なく対応できる事と信じます(笑)
サンドペーパーでゴム接点キーのホットスタンプ印字を削り取った状態。
中身の基板からマイコンを剥がして再利用します。 多めにハンダを盛って二刀流ハンダコテで両側を加熱して溶けた頃を見計らって基板をトントンとやれば簡単に剥がせます。
配線を容易にするため基板に穴をあけて裏側に配線を通してDIPソケットにハンダ付けしてから2液タイプのエポキシで張りつけました。
K1とK2の間に見える黒い突起は本来2接点タイプでないボタン構造なのをシーソー動作させるために追加したもの、下側のゴムシートの形状を見て頂ければその理由を理解して貰えると思います。 基板パターンとPIC間の配線は0.2mmのポリウレタン線で行いました。
ボタンが1個足りない気がしたのでやや強引に増設(K9)してみました、左右にあと2個ほどまだ増やせそうです。(笑)
黄色に見えるカプトンテープの下に増設した(K9)タクトスイッチをホットメルトで固定しています。
メンテ時に分離できるように(K9)はコネクター経由で繋ぎました。
適当に端折ってますが黒い部分が本来の基板の回路で、青色が増設した部分、今回K10は実装しませんでした。
キーの割り付けはスライドスイッチで切り替え式の2面で、このように配置しました。
キチンとレタリングをすれば奇麗になって良いのですが、根性が尽きてしまったので安直にマジックで書いちゃいました・・・
何とも雑な仕上げとなってしまいましたが、最後に簡単なソフト的な解説をしておきます。
このPICの場合ポートの状態変化で割込を掛けられるのがポートBのみなので、このポートをボタン用の入力ピンにアサインするしか選択の余地はありません。
出力に関しては状態変化を察知する必要がないので別のグループに移動しても問題ありません(入力専用のピン1を除く)
上に示した回路図で上側のスイッチ群をスキャンする時にはRB7ポートをLにすることで押されたボタンに対応するセンス線(RB0〜RB4)がLに下がります、
下側のスイッチ群をスキャンする場合にはRB6ポートをLにします、このとき反対群のスイッチの同時押しはナシというお約束になっています。
キースキャンで押されているのが判読できた場合にはLEDを光らせてコマンドを送信します、送信後はRB6とRB7の両方ともLにすることで何れのキーが押されたとしてもセンス線がLに動くようにしてからスリープさせます。(ボタンが押されていないときは内蔵プルアップ抵抗によってセンス線は全てHになっています)
このセンス線の状態変化割込みを利用してスリープ状態から復帰します、もしスリープさせないと待機時の消費電流が30倍ほども必要になるので電池寿命の観点からもスリープ動作は必須でしょう。
main()関数の中では何れのボタンも押されていない場合には直ちにスリープ状態へと移行するようにしていますが、ボタン長押しの場合はスリ−プしないようにしています。 ちなみにスリープ状態で測定した消費電流は30μA程度でした。
また、入力ポートはチップ内蔵の弱プルアップオプションを有効にして、外付けのプルアッ
プ抵抗を不要にしています。 スライドスイッチがオンの場合にRC6ポートをLレベルに落としてしまうとチップ内部のプルアップ抵抗に無駄に電流が流れ続けて電池を消費してしまうので、
スライドスイッチを読むとき以外はRC6ポートをHレベルにする事で無駄な電流を流さないようにしています。
最終的なIR-LEDのドライブ回路ですが今回は元々基板にあった駆動回路を流用しました、残念ながらPICの出力ポートの駆動力では3個のIR-LEDをフル発光させる事はできないのでLED駆動用のトランジスタは必須です。
回路図では電源配線の記載を省略していますが、VDDには+3V〜+5V(電池の+極)を、VSSはグランド(電池のー極)に接続してください。
このキー配置のまま使える人はまず居ないと思うので、自分用にカスタマイズするための情報 を書いておきます。 私が今回調べた機器についてはPIC12F1822版の記事に各種リモコンコード解析結果を書いておきましたが、これに無い分については TOMCATさんが公開されている解析器を自作して各自解析をして下さる様お願いします。
割り当てるコマンドとコードが確定したら「PIC16F1938_SW_IR- Remote_main.c」のソースファイル中の「KeySense()」関数の中に定義してあるswitch文にある各caseの定義内容を書き換える事で自分のオリジ ナルのリモコンにする事ができます。 具体的には「Carrozzeria4byte();」か「Alpine4byte();」で動作モードを切り替えてから4バ イトの値をセットし「transmit();」で送信です。
それぞれのケースの中で 「while(RBn==0); //wait for key release 」('n'は数字0〜4)の行をコメントアウトして無効にしてあるコマンドは長押し(リピート)に対応します。 このソースでのリピートの間隔は現物合わせで決定したものなので 機器によって認識しない場合には微調整が必要になるかもしれません。
どうやら中華製のモニターを作ってる処が同じなのか、はたまたコピー天国ゆえのソフトの再利用?が進んでいるのかどうかは判りませんが、
数年前に買ったサンバイザーLCDモニターと全く同じコードでした、 信号フォーマットは「Alpine4byte();」を使ってください。 連動しては困るのでサンバイザー側には受光窓にマスキングテープを貼って対処しました。
LCDモニターのリモコンコード: lcdmonitor_code.html
MPLAB IDEとXC8コンパイラ(無償版)でコンパイル・動作確認しています。 参考にしたコードのポリシーに準じてご自由に改変して使ってください。
ソースコード類一式 → PIC16F1938_SW-IR-Remote.zip