[[2005/MemberOnly/進行状況C]]
* 課題3:光センサを使ったロボット(ライントレーサー) [#n6d5630f]
 モーター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つ
#ref(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);				//意味なし
 }	


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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS