しかしMINDSTORMSで使われているモータはOFF時には結構静止トルクがあるように感じているので、ストッパ無しに挑戦だ!モータ2個で前に進ませてやるぜ!
何も考えずに一番長いビーム4本で本体を作り、片方にRCXを仕込んだ。モータを本体の端にそれぞれ取り付け、プーリでタイヤを回す事にした。RCXと反対側にあるモータからのリード線は1本だと本体が伸びた時に届かないので、一度顔の真ん中で中継してRCXにつなげた。
本体はあっさり出来た。後はソフトだ。今まで作ったものの様に、単に回せばいいだけじゃない。片方のみモータONしてWAITし、今度はもう片方のみをONしてWAITする必要がある。
何も考えずにWAITを同じ5にしてみた。すると前方のモータにより進む距離よりも後方のモータで本体が縮む距離の方が短いことが分かった。最初はRCXの付いている方が重いのでその分力が必要なのだと思ったが、進行方向を逆にしても同じだ。
本体が縮んでいる時の方が伸びている時よりも必要な力が少ないという事に気づくのにしばらく時間が必要だった。確かに平べったいものを起こすよりも、三角形を押しつぶして平らにする方が重力の関係で楽だよな。
というわけで本体を伸ばす時よりも縮める時のWAIT時間を長くしてやった。モータパワーを最大の8にして、伸ばす時のWAITを5に、縮める時のWAIT時間を13にして、しゃくとり虫のように伸び縮みして前に進むようになった。
しかしこのままではWAIT時間で制御しているので、障害物等で縮む動作が完全に行われなかった場合は、本体の開きがどんどん広がって、ぺったんこになってしまう。やはり、縮む時間は固定でなく、閉じるまで動くようにしないといけないな。
というわけで、縮みきった時にセンサが反応するように改造を試みた。角度がLEGO部品の配置となかなか合わないので難しかった。結局RCXから伸ばしたブロックで、反対側の本体に取り付けたタッチセンサを直に押すようにした。
問題はプログラムだ。RCX CODEでどう書けばいいんだ?どうも[WAIT UNTIL]を使うといいようだ。本体が伸びる時は今までどおり[WAIT 5]で進ませ、縮む時はタッチセンサがONするまで待てばよいのだ。
しかし[REPEAT FOREVER]の中に[WAIT UNTIL]が入ってくれない!何度やっても入ってくれないので、結局はユーザプログラムを定義して、その中で[WAIT_UNTIL]を使い、ユーザプログラム自体を[REPEAT FOREVER]の中に入れた。これでプログラムも完成だ。
問題無くしゃくとり虫動作をするようになった。障害物などで進行が止まった場合でもぺったんこになる事は無くなった。LEGO MINDSTORMSで初めてセンサとソフトが役に立ったものを作ったような気がする。それにしてもキャプチャカードが欲しい。