インタラクティブサーボモーターMを使ってみました。
サーボモーターっていうくらいだから、回転数を指定すれば正確に回転して止まる・・・
こう考えますよね。
では、まず
RotateMotor(OUT_B,60,90);
を実行してみると・・・明らかに90度以上回転して止まります。
プログラムの意味を考えると、4回実行すると、ちょうど一回転して最初の位置で止まるハズなのでが・・・
1回転と45度くらいの位置で止まります。(そうすると、一回の回転では100度位なんですかね)
同様に、逆回転させても・・・
RotateMotor(OUT_B,60,-90);
やっぱり、どう見ても90度を越えて止まります。
う~ん、何で!?
じゃあ、
RotateMotor(OUT_B,60,90);
RotateMotor(OUT_B,60,-90);
このプログラムで、90度右回転、すぐに90度左回転すれば・・・元に戻るだろう・・・
やってみると・・・戻りません。
元の位置を越えて止まります。
う~ん、NXCがEV3を(正式)サポートしていないので、EV3と同時にリリースされたモーターMをサポートしていないということなんでしょうか!?
このプログラムを何度も繰り返すと、スタート位置がどんどんズレてきます。
ちょっと、感覚的な調査ではなく、きちんと計測してみます。
まず、最初の位置(角度)は「0」
RotateMotor(OUT_B,60,90);
を実行した後の角度は「104」・・・何で104!?
さらに、
RotateMotor(OUT_B,60,-90);
を実行した後の角度は「-13」・・・何で -13!?
これは、全くサーボモーターとして、制御が効いていないのでしょうか!?
ということで、「使い物にならん」と、まとめようかと思ったのですが、もうちょっとやってみます。
RotateMotor(OUT_B,60,90);
RotateMotor(OUT_B,60,-90);
をループで何回か繰り返してみます。
すると・・・104度と -13度を往復します。
段々とズレていくかと思ったのですが・・・違っています。
で・・・ここまで、実験して、何となく
104=90+14
-13=0-13
ということで、指定した角度から13度~14度ズレているのではないかと思いつきました。
じゃあ、右に90度回転させるためには・・・と
RotateMotor(OUT_B,60,76);
を実行してみると・・・はいっ・・・90度回転して止まりました。(なるほど)
逆回転して0度で止めるためには・・・と
RotateMotor(OUT_B,60,-76);
を続けて実行してみると・・・
ダメです。0度を越えて、-13度で止まります。
う~ん
じゃあ・・・
RotateMotor(OUT_B,60,76);
RotateMotor(OUT_B,60,-63);
を実行してみると・・・
これでやっと、90度右回転して、そのあとに90度左回転してスタートした位置で止まります。
やっと、意図した動作ができるようになったのですが・・・
何で、このプログラムでそうなるのかが、よく分かりません。(汗)