今回はちょっと楽屋裏の話から始めたい。この日記中の画像は従来、通常のAPSカメラで撮影したものをスキャナで読み取り、jpgファイルに落とし掲載してもらっていた。一回の話で2、3枚しか撮らないので24枚撮りのフィルムだとなかなか撮り切れない。ほのちゃんの写真を撮ったり、こうしろうの所属している野球チームの写真を撮ったりしてコマを埋めていたのだが、かなり日数が掛かってしまっていた。これが原因で、実際にMindStormsをやった日とWebスペシャルに掲載される日が大きくズレたりしていた。

 それがこのたび、この状況が改善されることとなった。デジタルビデオカメラが我が家にやってきたのである。このDVカメラは100万画素の静止画をメモリースティックに記憶することができるので容易にPCに画像を取り込める。詳細を説明すると長くなるので割愛するが、私が購入したのではなくて、なぜか(ありがたいことに)やってきたのである。ともあれ、これからはタイムリーなMindStroms日記をお送りできることになった。学校祭で、こうしろうが演じる『杜子春』の仙人もこれでバッチリ録画できる。

10月14日 「今日は回転センサー使ってみようよ。かずも一緒にやろうぜ。」とこうしろうと回転センサーの所有者かずちゃんに声をかけた。「その前にNQCの命令でFloatっていう命令が気になるんだけど…。」、「うん、ぼくも気になる。滑らかに止まるってやつだね。」とこうしろう。「こやつ、マニュアルちゃんと読んでやがるな。」と感心した。回転センサーの前にFLoat命令を試してみることになった。かずはどっかへ行ってしまった。

task main()
{
 OnFwd(OUT_A+OUT_C);
 Wait(200);
 Off(OUT_A+OUT_C);
 Wait(100);
 OnFwd(OUT_A+OUT_C);
 Wait(200);
 Float(OUT_A+OUT_C);
}

Off命令だと、モーターは突然、ピタッと停止する。「XXさんの車の運転みたいだね。」とこうしろう。Floatだと滑らかにアンチロック・ブレーキのように止まるはずである。無限軌道車で試してみたのだが、結果に大きな違いはなかった。「キャタピラ式の車だと差がわかんないね。また後で試してみよう。」と回転センサーに移行した。

 右に3回転して左に2回転するロボットアームみたいなものを作ろうということで、久しぶりにこうしろう、かず、そして私の3人よる共同作業となった。無限軌道車の上にモーターをのっけて、回転軸に回転センサーをかまし、先端に手のような形のパーツを取り付けた。



そして、今度は私がちょこっとプログラムしてみた。

task main()
{
 SetSensor(SENSOR_1,SENSOR_ROTATION);
 ClearSensor(SENSOR_1);
 OnFwd(OUT_A);
 until (SENSOR_1 > 16 * 3);
 Off(OUT_A);
 Wait(200);
 ClearSensor(SENSOR_1);
 OnRev(OUT_A);
 until (SENSOR_1 < -16 * 2);
 Off(OUT_A);
}

モーターの1回転を回転センサーは16という数値で表す。正方向の回転は正の値を返し、逆回転は負の値を返す。ClearSensorはセンサーの値をゼロ・クリアする。OnFwd(OUT_A)とuntil (SENSOR_1 > 16 * 3)で右に3回アームを回し、OnRev(OUT_A)とuntil (SENSOR_1 < -16 * 2)で左に2回アームを回している。defineで1回転分の値16を定数定義しておくほうがプログラムとしては上等だろう。クルッ、ピタッとアームが歯切れ良く回転、停止する様は見ていて気持ちの良いものであった。金庫の鍵を開けるのに使えそうなアクションである。

 モーターの回転を止めるOffの代わりに先ほどのFloatを使ってみると、確かに滑らかに止まった。というよりもなかなか止まらず、1、2回余計に回ってしまった。Floatの働きは確認できたが、このロボットにはミスマッチな動きであった。