2011年2月11日金曜日

KEIAN KTV-FSPCIEのリモコンでパソコン操作

KTV-FSUSB2が簡単に改造できたので、今度はKTV-FSPCIEの改造に挑戦しようと思って購入したのですが、KTV-FSPCIEのリモコン利用法が面白そうだったので、こちらを先きにやることにしました。
■使う物
  • KTV-FSPCIE付属のリモコンと赤外線受光部
  • 不要なUSBケーブル
  • 不要な3.5mmオーディオケーブル、またはイヤホン
  • その他:絶縁テープ、半田ごて、テスター
  • 他にケーブルストリッパー、収縮チューブがあると便利
不要なケーブルがない場合は100均などで適当なのを探して買ってくればOK。USBはケータイ充電用として売られてるケーブルでも可。

ケーブル加工
①赤外線受光部
端子の付近で切断。切ったら周りのカバーを剥いて銅線を出します。テスターで端子のどの部分が何色の線に対応しているかを確認します。


②USBケーブル
電源供給のために使うので、PCへ接続する側のUSB端子の付いたケーブルを加工します。
カバーを剥くと何本も出てきますが必要なのは電源5V(赤ケーブル)とGND(黒ケーブル)なので、他は切り捨てます。充電用のケーブルだとデータ通信をしないため、初めからD-/D+がないはずです。


③オーディオケーブル
赤外線受光部の信号をPCのマイク入力端子から取り込むために使います。
左右チャンネルごとに分かれてますが、接合時に混合させます。

ケーブル接続
ポイントだけ書くと
  1. 赤外線受光部の電源部分に、USBのVcc(5V)を接続
  2. 赤外線受光部の信号部分に、オーディオの左右チャンネルを接続
  3. 赤外線受光部のGND部分に、USBとオーディオ両方のGNDを接続


ケーブルのつなぎ方に間違いなないか確認したら、一旦テストしてみます。
ケーブルを指でよじるなり、テープで止めるなりして仮接続の状態にし、USB端子をPCのポートへ挿し、テスターで通電を確認。

ケーブル接合前に
収縮チューブを使う場合はあらかじめチューブにケーブルを通しておきます(電源部分、信号部分の二ヶ所に使う細い物と、最後にケーブル3本を束ねる太いもの)。
収縮チューブを使わない場合は各部位に絶縁テープを巻いてください。


半田で接合
初めに電源、信号部分の接合を行います。
接合する芯線の先端を釣り針のようにU字型に曲げ、それを互いに引っ掛けて連結させたら、指先やペンチで外れないように締め付けます。


半田ゴテを使って半田を流し込む。

収縮チューブを被せ、ライターで炙って固める。

残りのGND芯線を連結し、半田で接合。(あと、写真には写ってないですが、USBケーブルの不要線の切り口が気になったので、綺麗に切ってから絶縁テープを巻いときました。)

最後に収縮チューブを被せ、固めたら完成

ようやく完成しました。ここまでやるのに何度か失敗しましたが、ケーブルは切ればやり直しが効くので助かります。

ケーブルの接合は自分なりに試行錯誤して今の形にたどり着きました。これが正しいやり方という確証はないので、試そうとしてる方は参考程度に見てください。

ソフト導入編
  • 赤外線リモコンの信号を解析・認識するソフト
    WinLIRC
    http://sourceforge.jp/projects/sfnet_winlirc/
  • WinLIRCから指示を受け取って、PCの操作をするソフト
    IREx (下記からirex17.zipを入手)
    http://gbpvr.com/pmwiki/pmwiki.php/Hardware/WinLirc
USBとオーディオケーブルをPCに繋いでおき、WinLIRCを起動。初めは設定ファイルがないのでエラーが出ます。OKボタン押す。Setup画面が開き、InputPluginで「AudioCapture.dll」を選択。Plugin Setupを押して音声入力に使っているデバイスを選ぶ。完了して画面を閉じるとタスクパーにアイコンが常駐します。

IRGraph.exeを起動し、リモコンを赤外線受信に向けてボタンを押すと、信号を受け取ってるのが画面で確認できます。

IRRecord.exeでリモコンの解析
コマンド プロンプトを立ち上げ、IRRecord.exeのあるパスへ移り、下記のコマンドを実行。
IRRecord.exe -d AudioCapture.dll ../ktv.cfg

初めにずらずらメッセージが出ますがEnter。
次にこんなメッセージが出るのでEnter押してから、その通りにリモコンを操作。(和訳はエキサイト翻訳)
Now start pressing buttons on your remote control.

It is very important that you press many different buttons and hold them
down for approximately one second. Each button should generate at least one
dot but in no case more than ten dots of output.
Don't stop pressing buttons until two lines of dots (2x80) have been
generated.
今度は、遠隔操作でボタンを押し始めてください。

あなたが多くの異なったボタンを押して、約1秒間それらを押さえるのは、非常に重要です。 各ボタンは出力の10以上のドットではなく、少なくとも1つのドットを発生させるはずです。
ドット(2×80)の2つの線が発生するまでボタンを押すのを止めないでください。
さらに
Please keep on pressing buttons like described above.
上で説明されるように、ボタンを押し続けてください。
上手くいくと解析結果が表示されます。失敗してると、次の操作に進まず違うメッセージが出てきます。その場合は一旦終了して頭からやり直します。

次に各ボタン名とそのボタンの信号を要求するメッセージが出ますので、「ボタン名入力→Enter→リモコンのボタンを押して信号を赤外線受信部に照射」を繰り返し、各ボタンの信号を学習させます。
Please enter the name for the next button
ひと通りボタンの登録が終わったらEnterで終了。

IRRecord.exeと同じフォルダにktv.cfgが出来ているはずです。テキストエディタで開いて「../ktv.cfg」となっている部分を、ktvなど分かりやすい名前に書き換えておきます。この名前がIRExで使うリモート名になります。

タスクトレイのWinLIRCを右クリック>Toggle Window>Reconfigureボタン Setup画面を開く。Configの欄に先程できた ktv.cfg を指定。OKで閉じる。WinLIRCの設定はこれで完了。リモコンのボタンを押して信号を検知すると、タスクトレイのアイコンが緑色に点滅します。

IRExの設定
サンプルのirexe.cfgが付属しているので、remoteの部分を上で設定したリモート名「ktv」、keyの部分を学習させたボタン名に書き換え、好きなコマンドを割り当てれば使えるはずです。IRExとWinLIRCは同時に常駐させます。

cfgファイル最適化
記録した信号は生データなのでIRRecord.exeで最適化処理をかけるとレスポンスが向上するそうです。
IRRecord.exe -a ktv.cfg > ktv_new.cfg

PC操作はできましたが・・・

一応、リモコンで操作できるところまでは来たのですが、
WinLIRCの反応があまり良くないです。
まず信号を学習させる段階で信号の検知がうまくできてないようで、やり直しの連続。cfgファイルを最適化させようとしてもとfailedだらけ。ケーブルを見なおしたり設定をいじったり、違うPCの別のサウンドカードに挿したりと色々試しては見たものの問題の原因はわかりませんでした。
AudioCapture.dllのReadMeによると「受信したデータがデコードされないなら、サンプリング周波数を上げてみて」と書いてあったので周波数を上げてみたら多少反応が良くなったような気がします。