TOPへ 2.タッチセンサの使用

1.モータの制御


ここでは初歩的なプログラムとして、モータを動かすプログラムを学習します。 またRobotCのプログラム作成の流れを学習し、慣れていきましょう。


1.ロボットの作成

左右にモータを1つずつ使用したロボットを作成します。
例として、ここではNXT付属のロボット組立て図に記載されたロボットを用います。(p8〜22参照)
robot.jpg(29812 byte)


2.ロボットを直進させる

次にプログラムを作成します。
ここでは4秒前進してから、4秒後退して止まるプログラムを作成します。 RobotCを起動して、次のプログラムを作成してください。ここでは作成プログラムを motor1.c とします。
motor1.c
task main(){
	motor[motorB] = 100;
	motor[motorC] = 100;
	wait1Msec(4000);

	motor[motorB] = -100;
	motor[motorC] = -100;
	wait1Msec(4000);

	motor[motorB] = 0;
	motor[motorC] = 0;

	return;
}

このプログラムの解説をします。

motor[motorB] = 100
この文はNXTの出力ポートBのモータのパワーを100に指定する命令です。
[ ]内をmotorAにすると出力ポートAが、motorCにすれば出力ポートCのモータのスピードが指定できます。
また代入する値を変えることでパワーを変えることができます。 指定できる値は-100〜100までで、+側で正回転,−側で逆回転,0でブレーキ(停止)となります。

wait1Msec(4000)
4000msec = 4sec 動作を待機させます。

コンパイルとダウンロードを参考にプログラムをダウンロードし、 プログラムを動かすを参考にプログラムを動作させて下さい。
プログラムどおりに動作しましたか? おそらく直進するはずなのに曲がってしまったと思います。 これは左右のモータの個体差により実際に動かすスピードが異なっているからです。 従って、直進させる場合は左右のモータでそれぞれスピードを調整する必要があります。

これでロボットを前進・後退させることができました。またプログラムのコンパイルなども分かったと思います。


3.ロボットが曲がる

次にロボットが曲がるプログラムを作成します。
ここでは正方形に曲がるプログラムを作成します。正方形に曲がるには『 前進→右折→前進→… 』という繰り返しが必要になります。 この場合はfor文が有用です。また90度曲がるために何秒間モータを回せばいいのかが重要となります。 このような場合にはマクロを用いると便利です。
それでは次のプログラムを作成してください。ここでは作成プログラムをmotor2.cとします。
motor2.c
#define TURN_TIME 220
#define MOVE_TIME 750

task main(){
	int i;
	for(i=0;i<4;i++){
		motor[motorB] = 100;
		motor[motorC] = 100;
		wait1Msec(MOVE_TIME);

		motor[motorB] = -100;
		motor[motorC] = 100;
		wait1Msec(TURN_TIME);
	}
}

おそらくこのプログラムでは90度曲がらないと思います。モータの個体差や床の摩擦、電池の消耗などに依るからです。 この場合、wait1Msec()の引数を変えるのではなく、あらかじめ定義した定数(マクロ)を変える方が一般的です。 マクロを使用することで、プログラムの調整が容易になり、また見やすくなります。


4.課題

3.のプログラムを直進できるように左右のパワーを調整し、同時に90度曲がるようにMOVE_TIMEとTURN_TIMEを調整して、 50cmの正方形を描いて走行するようにしなさい。

TOPへ 2.タッチセンサの使用