DIY IR-Remote Transmitter 赤外リモコン送信機の自作


このページではこれまで製作した機器の写真や設計情報を公開しています

The Introduction

自分で運転することがメインだったので、これまで車内で単品のリモコンを使う事など殆どなかったが、ステアリングに赤外リモコンを埋め込むというプロジェクトを始めたのを期に簡単に制作できる小規模のリモコン送信機をPICマイコンで作ることにした。

運転中に頻繁にリモコンで操作するような機能はそれほど多くないはずだが、純正のリモコン をノックダウンして組み込んでしまうと、めったに使わない機能が必要になったときに大変困ったことになってしまうので、純正と同じ送信コードを発生するマ イコンを自作することにした。 きっとスクラッチから開発する必要はないだろうと予想してネットを徘徊していたら・・・、ありました 大助かりなサイトが ふたつ。 しかも再利用自由! ひたすら感謝!

PICマルチメーカー対応赤外線リモコンコード解析器:
http://www.interline.or.jp/~tomcat/picrcn21.htm
PIC12C509使用赤外線リモコン送信器 :
http://www.interline.or.jp/~tomcat/picrcn09.htm
PIC16F1827のページ:
http://phys.sci.hokudai.ac.jp/LABS/yts/pic/1827/1827.html

これで、赤外リモコンに関する部分はほぼメドがついたので残るmTouch / CPS(Capacitive Sensing)関連の部分は何とかす るとして。静電容量スイッチならばメカニカルなスイッチが不要なので、例えば粘着テープに銅箔を貼っただけのテープを適当なスペースに貼るだけでもちゃん と機能するので、穴を開ける必要もないし、通常ではインストールが難しい場所やカバーの裏側やガラス面、はたまた薄いものなら内装の裏側からでもタッチが 検出が可能となりこれまでの常識を超えたインストール方法が発想可能になる。 ステアリングリモコンの場合もスポークに「シールみたいに貼るだけでスイッチが装着できる」なんて事が可能になる可能性も出てきました。



Development Environment: 開発環境について

学習リモコンを作って基板一枚で全部賄うという手もありますが、結局組み込むのは送信機だ けなので部品点数が少なくて小型に作れるほうがベターだと考えて、上記TOMCATさんの解析器を使用部品が少なくて済むように5V電源仕様にモディファ イして作ってリモコンコードを読み取り、その結果から8ピンのPICに送信用のプログラムを書いて入れることにしました。
2013年4月の時点でPICの開発環境で無償で使えるXC8コンパイラとIDE、それとPICkit3の組み合わせで開発します、自宅マシンはMacな のでParallels上の64bit Windows7環境にインストールしましたが、MPLAB X IDEを使えばOS-X環境でもいけそうです・・・

混沌とした開発環境のスナップショット(笑)


Selection of uP: 使用PICマイコンの選定

ターゲットのPICマイコンは小型のDIP8ピンと決めてましたが、新しいシリーズの PIC12F1822なら通称mTouchというCSM(Cap Sensing module:静電容量センサーモジュール)を使ってCPSでメカレスなリモコンも作れそうな気がしたのでコレに決定。 通常のメカスイッチを使えばキー マトリックスを組むことで6個のボタンが使えるし、CPSでも4個まで対応可能であり、現状これで十分として進めることにします。


IR Remote Code Analysis:リモコンコード解析器の制作

TOMCATさんが公開されているデザインをインバータ電源部分だけはしょって5V電源に 直結、残りはほぼそのまま制作、ホント助かります。 白いキャップをしたLEDのようなものは、後で追加した赤外線キャリア周波数を測定するためのセン サーです、この出力をオシロで波形を見れば十分なので特にバースト周波数の解析のプログラム等は作成していません。


IR Code Examples: 解析結果について

早速手持ちのリモコンを解析してみたところ必要なコードは全て読み取ることができました が、キャリア周波数と、スタートパルスの幅やON区間とOFF区間の比率や8バイト送信のパターン等までは判らないので、これはIRレシーバーにロジアナ を繋いでタイミングを測定しました。

ALPINE RUE-4202リモコン送信機の波形:

キャリア周波数=38kHz、データコンテナ=4バイト、家製協フォーマット

Click to Enlarge

アルパインのリモコンコード: alpine_code.html


carrozzeria CXC7714リモコン送信機の波形:

キャリア周波数=40kHz、データコンテナ=4バイト、一部コードは全8バイトを4バイトずつ2回に分けて連続送信、家製協フォーマット

カロッエリアのリモコンコード: pioneer_code.html


参考:eononワンセグのリモコンコード: eonon_code.html


後日追記:
 PIC Kit2まであったLogic-Analyzer機能がPIC-Kit3でも使える事が判明、これで正確なタイミングが測定できるはずなのでキャリア周波数や連続コードの間隔タイミング等もPIC-Kit3さえあれば自力でタイミング解析が可能です。

PIC-Kit3でロジアナ機能を使う ページへ

Software Development: ソフト開発について

今回はリモコン送信器側のPICマイコンのみを開発します。 あれこれといろいろと考えだ すとどうしても集中力が長く続かないし、毎晩すこしづつ検討しながら進めていくスタイルなのでなるべくアセンブラを使わないでC言語で記述することでサイ ズや実行速度よりも可読性を優先します、今回リアルタイム処理が必要だったのは赤外LEDを点滅するところだけだったのでこの部分だけはアセンブラ、あとは割り込み機能をうまく活用するこ とによりC言語で記述することができました。

自分でCPS版のコードを色々といじってみようと思っている方への助言ですが、 PIC12F1822だとピン数が最小限のため内部の動作状態を把握するのが困難なので、同シリーズのPIC12F1823等でLCDモジュール等に内部 状態等を表示しながらデバッグを終えたところで1822に最適化してから移植する方が確実だし、結局トータルでみると効率的だと思います。




mTouch (CPS) Version IR Transmitter:(静電容量センサー)タッチ・スイッチ版:

【静電容量タッチセンサ版回路図】


内蔵のクロック発信回路を使用し、タイマー0がオーバーフローするまでの間のCPS発振回 路のサイクル数をタイマー1でカウントすることで静電容量を計測します。タイマー0がオーバーフローした瞬間に割り込みがかかるので、割り込み処理関数 のなかでタイマー1を読み出して計測値を処理しています。 この計測値は周囲で人が動いたり振動している環境では常に変動しているので、誤動作しないよう にするためには何らかの工夫が必要になります、いろいろ実験してみましたが固定値では実用にならないという結論に達しました。
 そこで試行錯誤の末いちばん良好に動作したのが異なる時定数で移動平均を取って比較判断する方法でした、株式投資をやった事がある方ならご存知かと思い ますが長い期間での移動平均と短い日数の移動平均の値を株価のグラフに重ねて描いたチャートで長期移動平均線を上から下に短期移動平均線が下抜けて交差す る(デッドクロスといいます)いわゆる「売り」のポイントがまさにタイマー1の計測値ではタッチボタンが押された箇所に相当します。

CPSカウント値の時間変化イメージ

上のグラフはボタン操作に対するCPSのカウント値の移動平均の変化を表したものです、実際に判定に使用するスレッショルド値は長時間移動 平均値より少しだけ下側にシフトさせて細かいゆらぎで誤動作しないようにします。 この方法なら温度や湿度などの環境変化や近くに物が置かれた等のゆっく りな変動に対して 長時間移動平均は自動で追従するので定期的なキャリブレーション等の必要がありませんし、短区間の移動平均に対しても複数の計測値を使うので静電気等一瞬 のノイズ発生等による誤動作が生じにくくなり、一般に難しいと言われているタッチセンサー活用を実用的なものにすることができました。  ちなみに現在のソースコードでは短期を4点、長期を512点にして移動平均をとっています。 この静電容量方式の難点としては 操作していないときも常にCPS回路を動作させていなくてはならないので待機状態でもPIC12F1822の場合 で0.5mA程の電流を消費するため、ボタン電池などの少容量の電池駆動には適さないという点です。 8ピンのPIC12F1822では最大で4つまでの タッチセンサーを使え、さらに入力ポート(pin4)がひとつ余るので、回路図のようにpin4に振動センサ・スイッチ等を繋いてスイッチの状態変化で割込をかけるようして走行時のみスリープから復帰するようにすれば実用的には十分な電池寿命にできる可能性は残っていると思います。 現状のソースコードでは振動センサに対応していないので、このスイッチは不要です。

4つのセンサーバッドは絶縁が確保されていれば金属部と密着していない限りうまく反応しま す、今風のUXを考慮すればセンサーバッドを十字に配置してジェスチャーで上下/左右方向へスワイプするのを検出するようにすれば「近代的でスマートな」 格好いいリモコンになれる可能性を秘めてます(笑) 試してみたところ旧型のiPODのような「回転操作」はぎこちなくていまいちでした、多ピンのPIC を使えばCPSのチャンネル数も増えるので回転とかの操作もスムースに検出できるようになると思います。

アルパイン用CPS版ソースコード類一式 → IR_REMOTE_TX_CPS_ALPINE.ZIP

カロッツェリア用CPS版ソースコード類一式 → IR_REMOTE_TX_CPS_PIONEER.ZIP


mTouch Version Hardware: CPS版ハードウェアの制作

CPS版の場合、回路は非常に簡単なので、その気になれば空中配線でも作れない事はない程 にシンプルだが、振動による金属疲労でハンダが割れる事も多いので一応基板に載せる事を薦める。また静電容量が物理的に変形したり振動したりすると変動し てしまうので安定に動作する為にもしつかりと固定する事が望ましい。下の画像ではDIPパッケージのPIC12F1822を最小サイズのユニバーサル基板 にハンダ付けし、 裏側に表面実装タイプのトランジスタと抵抗をハンダ付けしています、抵抗は2125サイズのチップ抵抗を使って試作しました。 PIC基板の外に空中配線 してある見慣れない部品はHD−DVDのリモコンを破壊したとき捨てずに取っておいた振動スイッチ。

基板の表側:

cps_top

基板の表側:


cps_bottom

画像では小さくて判りづらいと思うが、デバッグ中の動作確認のために回路図には書いて無いが1608サイズのチップLEDと抵抗も取り付けている。





Mechanical Switch Version IR Remote Transmitter:メカニカル・スイッチ版:

【メカスイッチ版回路図】


CPS方式の場合、待機状態でも原理上どうしてもその動作を止める訳にいかないのですが、 メカニカルスイッチ方式ならばPICマイコンにはポート状態の変化で割り込みをかけてスリープ状態から復帰するという機能があるので待機時の消費電流を 大幅に低減できます。 PIC12F1822の場合なら実測で20μA以下にできましたし、PIC12LF1822にすれは1μA以下になると思います。  実際にボタンを押す頻度を考慮すればPIC12LF1822にする程の長期にわたって放置することはあり得ないので大きな違いは出ないだろうと判断し今回 はPIC12F1822で行く事にしました。 何らかのボタンが押されると、割り込みでスリープ状態から復帰し、ROWアドレスを変えながらキースキャン をして読み取ります、キーマトリックスにダイオードを入れていないので同時押しパターンに制約がありますが、二個押しと三個押しまでを駆使すれば6個の ボタンで最大12個のコマンドを割り当てることができます。 メカスイッチ方式の計算上での電池寿命は最長一年程となります。

メカスイッチ版ソースコード類一式 → IR_REMOTE_TX_SW.ZIP

メカスイッチ版ハードウェアの制作

とりあえず、6個あるキーの多重押し含めて、下図のように機能を割り付けてみました。

ソフトウェアが開発できたところで、いよいよ組み込み用のハードウェアを制作します、 今回はウレタン・ステアリングのスポークという狭い場所にタクトSWを6個とPICマイコンに電池を収めなくてはならないので、 両面スルホールのユニバーサル基板を使用し両面に実装しました。  先にタクトSW裏側でキーマトリックス接続を配線してから、その配線を跨ぐようにDIPパッケージのPIC12F1822をハンダ付けします、 抵抗は2125サイズのチップ抵抗を使いました。

基板の表側:

基板の裏側:



Layout Example: 基板パターンの例(参考)

(タクトSWは二本足の自挿タイプを使用)


Software Configuration:プログラムの書き込み

一旦ハンダ付けしてしまうと、書き込みソケットは使えないのでICクリップ等を駆使して書 き込む事になります、大概の場合「これで完成」とか思っても後になって変更したくなる点が出てくるもんです(笑)、 そこで私の場合このようなダウンロードケーブルを自作して対処しています・・・


Installation: 実際に車両への搭載

最終的には電池寿命と生来のメカ物好きという理由からメカスッチ版を愛車に搭載しました→ ステアリングにインストールした記事へ



2013, Apr. 20th [この資料の利用上の注意事項]
 本資料はカーオーディオ関連機器用途を想定して、hilo個人が趣味で回路設計 したものであり、性能及び動作等の一切を保証するものではありません。   従って本資料に基づいて機器を製作した際に、機器が動作しない、もしくは、 期待した性能が得られない等の障害が発生したり、万が一に事故等が発生したと しても、当方は一切の責務を関知しないものであります。  従って実際に機器の製作を行う際は、あくまでも各自、個人の責任において行 ってください。
[Caution:] (Please use above documents, At Your own risk!)
→メインページ(Return to Main-Page) inserted by FC2 system