腕コンで LEGO をコントロールするのだ!
MIDI での RCX 制御成功に味をしめて、今度は Ruputer での RCX 制御に挑戦し、とりあえず動くようになった。LEGO MindStorms を持っていて Ruputer も持っている人が世界中合わせて何人いるかを考えると不安になるが、こういったことが可能である事をここで公開することにする。
Ruputer とは SII が販売している腕時計型コンピュータだ。ファイルシステムを備えており、複数のアプリケーションやデータをファイルとして扱う事が出来る。特筆すべきは開発環境を SII 自身が無料で公開している事だ。そのためユーザによってさまざまなアプリケーションが作成されている。また赤外線送受信が可能で、PC との接続だけでなく TV リモコンとしても使用出来る。
今回はこの Ruputer の赤外線送受信機能を利用して、RCX を直接制御してみた。
Ruputer は発売直後に購入し今まで死蔵していたのだが、RCX を IR Tower で制御しているのを見て、Ruputer で RCX をコントロールできたら面白いだろうなあと思っていた。しかし Ruputer アプリは開発した事が無くこれは夢物語だと考えていた。どちらかというと Windows CE 機での赤外線制御を世界の中の誰かが実現してくれないかと思っていた。
そこに MindStorms情報局で有名な Jin Sato さんから連絡があり、Ruputer で RCX を動かそうとしていることが分かった。ソースを頂き1日調査して、送信のみだが Ruputer の赤外線出力で RCX の制御に成功した。
結構短時間で送信に成功したのは、何と言っても SII の提供している Ruputer に対する豊富なドキュメントによる所が大きい。ドキュメントとサンプルプログラムを見る事で、大体やらねばならない事が分かった。もちろん Jin さんの作成したソフトがあってのことなのだが。この場を借りて感謝したい。
Web ページを色々と見てみたが、赤外線での直接制御方法については断片的な情報しか得られなかった。結局自分で調べる必要に迫られた。まずは IR Tower の分解から行ってみた。
中の基板を見ると 74HC132 が 2つとアナログ系回路だけで構成されていた。74HC132 は 2 入力シュミットトリガの NAND ゲートだ。ということは IR Tower は PC からのシリアル信号をそのまま搬送波にのせて送受信しているだけだと思った。
搬送波やシリアルのプロトコルに関しては Lego Mindstorms Internals に載っていた。それによると搬送波は TV リモコンで良く使われている 38KHz で、シリアルは 2400bps / 8bit / 奇数パリティ / ストップビット1 だ。
Ruputer も 38KHz 搬送波赤外線を送受信できる。ただし直接 I/O を操作して赤外線発光 ON/OFF させないといけない事が分かった。という訳で 2400bps のシリアル送信をソフトで制御すれば OK なのだ。これはワンチップマイコン PIC シリーズ等を扱った人ならすぐに出来るだろう。
問題は 2400bps のタイミングをどのように作成するかだ。通常は内蔵タイマを使用して割り込みに合わせて 1bit ずつ出力させるのだが、Ruputer では 64Hz のタイマがユーザに開放されている最小間隔のタイマになる。これでは 2400bps を実現できないので、必殺のソフトウェアループによるタイミング作成を行う事で解決した。
とりあえず RCX を制御してみる
赤外線による送信部分を作成し、例の Kekoa さんの Web ページに載っているコマンドを送信してみた。RCX はコマンドを受信したら応答を赤外線で返す。赤外線は基本的に半二重なので RCX が送信している間は Ruputer からの送信を待つ必要がある。やはり受信も出来るようにしないとつらい。
送信に成功してから1週間後の週末に半日かけて受信機能を追加。たまに変な値を受け取るが、まあまあ応答を受け取る事が出来るようになった。そこで判明したのだが、Kekoa さんの Web ページに載っている Reply コードと違う値を RCX が返している時がある。Reply データに関しては自分で調べて表にする等必要かもしれない。
最初のプログラムの提供者 Jin Sato さんにはその後ソフトの修正をして頂き、今回のソフトは共同開発作品として公開することにして頂いた。
とにかく赤外線シリアルは目に見えない、測定器が無い、でデバッグが難しい。しかしうまく動作すると非常に面白い。今のソフトは不満だらけなので、時間を見つけてチョコチョコ改良を加えていく予定だ。
Pathfinder 系のモータ A と C を制御するサンプルプログラム。Ir を制御するマシン語部と RCX コマンドプロトコルを制御するC言語部とアプリケーションを独立させているので、自由に改造してもらえると嬉しい。まだまだ改良の余地があるので、Ir 制御部分などは今後もバージョンアップしていく予定である。
Jin Sato さんの MindStorms情報局にもっとナイスなソフトが公開されているので、そちらもぜひダウンロードしてもらいたい。より汎用性のあるコントローラに仕上がっている。