Dies Aliquanti

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Buffalo RemoteStationを赤外線リモコンの受信用に使う

Buffalo RemoteStationの解析のおまけの話です。前回、Windows+Rubyで、PCから赤外線リモコンで外部の装置を制御できるようになりましたが、「学習」用に受信した赤外線データをチェックして、PCを動かすことはできないか?と思ってちょっと実験してみました。
 RemoteStationは、受信した240バイト分のデータをPC側で、記憶しておき、それをそのまま送信することで赤外線リモコンの出力としています。

まず、受信したデータを、記憶しているデータとそのままつき合わせてみます。

んー、不一致の数が適当に決めたスレッショルド以下だったら、一致判定としようと思いましたが、時々メチャメチャ不一致の値が大きくなりますね・・・データを眺めてみると、受信データに「リピート」(長押し)のコードが入っているようです。とりあえず200ビットほど'0'が続いたらそのあとは捨ててしまうように直します。

ぬ~、だいぶ確率は下がりましたが、やはり時々不一致の数が増えます…もう一度データを眺めてみると、1バイトなかのデータの並びが、LSB firstみたい。MSB firstで比べてた… orz

適当に直します(ビット順の反転ってRubyではどうやるのがスマートなんでしょ?) だいぶ、よくなりました。RemoteStationは受信データを「解釈」せずに、0.1ms程度でサンプルしたデータを送ってくるらしいので、場合によっては0→1、1→0のエッジがずれます。
そこで、本来の赤外線データよりも十分にサンプリングレートが速い、と仮定します。
 受信データと、参照用のデータをビットごとに比較し、一致した場合は、そのビットは一致(硬判定)とし、一致しなかった場合は前後のビットがともに一致する場合は一致(軟判定)としました。240ビット分調べて、不一致判定が0(もしくは数ビット)ならば、参照するデータに一致と最終的に判断します。ここまで、面倒くさいことをするくらいなら、データを「解釈」(家電協、NEC,ソニーフォーマットなどがあるらしい)してしまったほうがいいかも?

 ともかく、何とか受信データの判別ができるようになったので、Windowsのメディアセンター2005を動かしてみます。メディアセンター2005は起動や操作をすべてキーボードショートカットで操作できます。Rubyから、COMオブジェクトとしてWScript.Shellを呼び出し、Sendkeysでショートカット・キーを送ってみると、結構まともに動きます。悪くないですね。RemoteStation自体が、連続した赤外線データ受信には適していない(もともとそのための製品ではないですし)ようで、キー操作の間隔を少しあけなければならないです。制御プログラムのほうでも、受信データの判定がそこそこ重いと思うので、受信用のスレッドと判定用のスレッドを分ける(Ruby1.8xでは意味ないか・・・)とかする必要がありそうですが、実験としてはうまくいきました。
 メディアセンターのリモコンは死亡率が高い(3年間で2つ壊れた)ので、代替手段を持つのは、悪くないですね。

では、では。



コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://diesaliquanti.blog.fc2.com/tb.php/599-ce11e159
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

まとめ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。