CNCフライスに掃除機を接続する(補足)

以下の記事を補足です.ソフトウェア編
sosoru.hatenablog.jp

概要

掃除機をリモコンで操作するために,赤外線信号パターンを市販のリモコンキットで模倣した.
元々,掃除機自体がリモコンでオンオフ出来るようになっていたが,送信機が破損していた.特殊な操作をすれば,送信機から赤外線パターンを読み取れるので,市販のいわゆる学習型のリモコンキットに覚えさせて,操作できるようにした.この際,送信機のパターン発生や,リモコン周りのソフトウェアでトラブルが生じたのでメモっておく.

今回使用したファームウェアについて,ソースコードgithubで変更点を公開している.有志で変更版を公開している人がいるから問題ないはず.
GitHub - sosoru/RemoconServant_sosoru: BTO社赤外線リモコンキットのファームウェア 改変版

送信機の故障

2つに割れたリモコンは片面一層で修復は容易であったが,結局,ICの破損によって常用できる状態ではなかった.
破損といっても,リモコンの送信スイッチの検出端子(スイッチを押すと端子にパルスが入力される)と,ICの赤外線送信パルス出力端子を指の静電容量でカップリングすることで,正常な送信パルスを生成できる.
f:id:sosoru_m:20170324190156j:plain:w400
なぜ,このような操作が正常動作のトリガーになっているか不明だが,正常な送信パルスが得られるので,赤外線リモコンキットに覚えさせればリモコン機能を模倣できる.

赤外線リモコンキット

PICベースで書かれていて,ユーザーがプログラム書き込み機無しでファームウェアを書き換えられる赤外線リモコンキットがBTO社から販売されている.
PICの空きピンも十分にあり,筐体が別売りなので加工もしやすいので,今回の用途にとてもフィットしているので採用.
欠点はプログラムメモリの空きがそのままでは非常に少ないことと,ソースコード自体が1ファイルで2000行を超えており,様態をつかみにくいことである(microchipの元々長いサンプルコードをベースにしたもので,コメントも割と豊富ではある.)

リモコンパターンのエンドトレーラーパルス

リモコンキットを使用し,掃除機のパターンを学習させたが,掃除機側でパターンを正常に認識できない.オシロスコープでオリジナルのパターンと学習したパターンを比較したところ,トレーラーの後ろの約8msecのところにヒゲパルスがある.(長さ1Tに相当).このパルスは家電協会の規格には乗っ取っていない.幸い赤外線リモコンキットはPICのソースコードが公開されているので修正可能.
ソースコードを修正し,エンドトレーラーパルスの後,8msec後に1TのONパルスを立てることで,この問題は解消された.
f:id:sosoru_m:20170324190555j:plain:w500
↑矢印部が問題のパルス

赤外線リモコンキットにオリジナルリモコンのスイッチ機能を追加する

元々のリモコンはスイッチの押下を検出できるが,赤外線リモコンキットにはそのような機能はない.しかし,ソースコードが公開されており,PICベースのプログラムを書き換え可能なので,ユーザーで実装できる.幸い,空きピンもあるのでハード的な実装コストは低く,容易に組み立てられた.
ただし,ソフト側はいくつか苦労を強いられる点があった.

  • IDEのバージョン

上にも記載したが,最新のIDEはMPLABXらしくMPLABではない(?)赤外線リモコンキットのソースコードコンパイルする場合,コード上の#pragma系命令が古く,最新のコンパイラでは通らない.ソースコードにはIDE設定ファイルが含まれているので,バージョンが一致するコンパイラを使用する.

  • メモリ不足

プログラムメモリ,RAM,ともに割り当て領域を変更しないと新しい実装を入れられなかった.特にRAM割り当て領域の空きはゼロに等しく,1byteのグローバル変数を定義するだけでリンカスクリプトが通らない.今回の場合,赤外線送信機能のみ必要なので,受信機能は削除し,コンパイルを通した.

  • プログラムメモリに書き込む定数の処理

定数にromをつけておけばプログラムメモリ上にデータが配置される.この定数を使用するとき型不一致との警告が出る場合がある.
一見,許容できそうにも思えるが,この警告が出た場合,その定数は使用できていないと考えた方がよく,注意深く検証するべき.

箱について

文字がかすれているのは切削ミス.表記は掃除機の元々の表記を引用しており,「じゅうたん」と「ゆか・たたみ」は中と弱設定に対応する(ファジー制御している?).
赤いボタンを押すと掃除機が動作し,黒いボタンを押すと停止する.側面には故障した送信機からレンズを流用しており,信号を拡散してくれている.
電源はNCフライス制御用のPCからUSB給電している.PCが起動していないとリモコンを使用できないが,切削時のみ使用するので問題ない.
リモコンキットはUSBで給電とデータ転送を兼ねているので,LinuxCNCからUSB側にコマンドを送れば,切削開始時と終了時に掃除機がオンオフするよう連携できる.(自動で切ってくれる機能はあってもいいかもしれないが,今のところ,連携する必要はあまり感じない.)

f:id:sosoru_m:20170225235814j:plain:w200

参考

赤外線リモコンキットについて
株式会社 ビット・トレード・ワン | USB接続 赤外線リモコンキット
Assembly Desk - USB接続 赤外線リモコン

赤外線リモコンパターンのフォーマットについては以下が詳しい
赤外線リモコンの通信フォーマット

pgmからromに落とす方法は以下を参照した
まいまいこん: PIC C18 メモ( Warning 2066 )