2005/MemberOnly/進行状況C

課題3:光センサを使ったロボット(ライントレーサー)

モーター2つ

モーター2つのライントレースロボットのプログラムです。

#define BLACK 45 //黒い線
#define A 10 //微少時間

task main()
{
	SetSensor(SENSOR_1, SENSOR_LIGHT);
	SetSensor(SENSOR_3, SENSOR_LIGHT);

	while(true){
		if(SENSOR_1>BLACK && SENSOR_3>BLACK){ //2つのセンサが黒い線の上ではない時
			OnFwd(OUT_A+OUT_C);
			Wait(A);
		}
		else if(SENSOR_1< BLACK){ //左側のセンサが黒い線を感知した時
			while(SENSOR_1< BLACK){ //黒い線を感知している間
				OnFwd(OUT_C); //半時計回り
				OnRev(OUT_A);
				Wait(A);
			}
		}
		else if(SENSOR_3< BLACK){ //右側のセンサが黒い線を感知した時
			while(SENSOR_3< BLACK){ //黒い線を感知している間
				OnFwd(OUT_A); //時計回り
				OnRev(OUT_C);
				Wait(A);
			}
		}
	}	
	Float(OUT_A); //意味なし
}
モーター1つ
lego.jpg

モーター1つのライントレースロボットです。

#define A 40				//明るさの基準
#define B 40				//走る時間の基準
#define C 10				//トレース時間の基準1
#define D 10				//トレース時間の基準2

void run()					//走る関数
{
	OnFwd(OUT_A);
	Wait(B);
	OnRev(OUT_A);
	Wait(B);
}
void trace(int x)			//トレース関数
{
	repeat(D){
		OnFwd(OUT_A);
		Wait(C);
		if(x < A)	return;
	}
	repeat(D*2){
		OnRev(OUT_A);
		Wait(C);
		if(x < A)	return;
	}
}
task main()
{
	SetSensor(SENSOR_1,SENSOR_LIGHT);
	
	while(true)					//無限ループ
	{
		if(SENSOR_1 < A)			//線の上なら
		{
			run();
		}
		else						//線の上でないなら
		{
			trace(SENSOR_1);		
		}
	}
	Off(OUT_A+OUT_C);				//意味なし
}	

感想

モーター2つのロボットはすんなり行きましたが、1つのロボットはそうはいきませんでした。
初めは、どうすればモーター1つで左右に曲がることが出来るんだと悩みに悩みました。
他にもギアの数が多いとパワーが弱かったり等、色々な苦難を乗り越え、一応完成しました。
が、大したことない出来でしたね。ははは

添付ファイル: filelego.jpg 192件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-02-13 (月) 20:14:06