これまでの実験でジャイロセンサーが動作したことは判りました・・・
とてもゆっくり回転する(しかもなるべく等速度で・・・)ロボットであれば、回転角を検知することができるかもしれません・・・
でも、さすがに、あれでは実戦に使えません。
じゃあ、どうするかというと・・・
さっきのプログラムでは1秒毎に角速度を計測していました。
この計測する時間間隔を短くします。
まず、半分(0.5秒毎)にしてみます。
ループの中の待ち時間を500msにします。
Wait(500);
そして、積分の値を
j+=i/2;
に変更します。
これは
j+=i×0.5;
のことです。
先ほどよりも精度が上がったハズです。 (あくまでハズ)
やってみると・・・なんか精度が上がったような、上がってないような・・・(笑)
じゃあ、いっその事、ループの待ち時間を100msにしてみます。
Wait(100);
j+=i/10;
に変更して、実行してみます。
さらに精度が上がったハズです。
まあ、実際は、上がったような、上がっていないような・・・(笑)
ここで、はたと気が付きました。
i/10 の計算は変数i も10も整数なので、整数で計算されます。
もし、変数i が一桁なら i/10 は必ず「0」です。
これでは、精度が出ません。
だから、
j+=i;
に変更します。 そうすれば、変数j には10倍の数値が入ります。
最後に変数j を表示するときに10分の1にします。
task main()
{
SetSensorHTGyro(S1);
int i,j=0;
while(true)
{
Wait(100);
i=SensorHTGyro(S1,-8);
j+=i;
TextOut(0,LCD_LINE1," ");
NumOut(0,LCD_LINE1,i);
TextOut(0,LCD_LINE2," ");
NumOut(0,LCD_LINE2,j/10);
}
}
結局こんなプログラムになりました。
実行してみると・・・
最初は1行目の表示は「0」、2行目の表示も「0」ですね。
センサーを90度右回転してみると・・・
2行目の表示が「90」位になりました。
センサーを左回転して、元の方向に戻すと・・・
2行目の表示が「0」に近い値(「-2」とか)になりました。
今度は左に90度回転してみます。
2行目の表示が「-90」位になりました。
センサーを右回転して、元の方向に戻すと・・・
やっぱり「0」にはなりませんが・・・まあ、1桁の数値です。
じゃあ、調子に乗って・・・
ループの待ち時間を10msにしてみます。
そうすると・・・
おぉ! 結構正確に表示できてるよ!
ちゃんと「0」に戻る・・・素晴しい!
ということで、ジャイロセンサーが使えることが判りました。
使い方によっては、コンパスセンサーよりも役に立つと思います。
少なくともチーム「M&Y」の中では、ジャイロセンセーはコンパスセンサーよりも絶大な信頼を得てます。(笑)