[[2012b/Member]]

*課題2レポート [#x1bc2c40]

**ロボットの説明 [#ne3e01a2]
#ref(2012b/Member/aspect/Mission2/2013-02-06_13-03-24_30.jpg,35%,製作したロボット)
今回製作したロボットの特徴はマシン前方に超音波センサがついていることです。
このマシンは箱を反対側のコートに送るときに箱を回転ますが、マシンギリギリで箱をつかんでしまうと回転させることができません。
そこでこのセンサを使用することで掴みたい位置で箱を掴むことができます。
また、この機能は送られてきた箱も検出できるので動作の誤差を減らすことにもつながります。


#ref(2012b/Member/aspect/Mission2/2013-02-06_13-05-59_239.jpg,35%,製作したロボット)
このロボットは箱を掴むとき、2本のアームではさんでいます。箱に接している部分は細い車輪なので狭いです。箱を反対側のコートに送るときに箱を回転させる軸になる部分です。


**プログラムの説明 [#yd6a67a1]
 #define SPD 40
 #define SPD_H 30   //進むスピード 
 #define SPD_Ah -15 //アームの閉じる速度
 #define SPD_Ar 15  //アームの開く速度
 #define TIM_W 800  //動作準備のための待機時間
 #define trasew1 OnFwdReg(OUT_BC,40,OUT_REGMODE_SYNC);Wait(1);
 #define trasew2 OnFwd(OUT_C,40);Off(OUT_B);Wait(1);
 
 task main ()
 {
	SetSensorLight(S1);      //ライトセンサー定義
 	SetSensorLowspeed(S2);   //超音波センサー定義
 	SetSensorTouch(S3);      //タッチセンサー定義
 
 	int pattern = 1;         //パターン設置
 	long t0 = CurrentTick();
 	int t1 = 0;
 	int count = 0;
 	
 	while(true)
 	{
 		switch(pattern)    //"pattern"の開始
 		{
 		
 		case 1: //箱に至るまでの直進
 			if(SensorUS(S2) > 8)
 			{
 				if(t1 <= 300)
 				{
 					t1++;
 					OnFwdReg(OUT_BC,SPD,OUT_REGMODE_SYNC);
 					Wait(1);
 				}
 				else
 				{
 					t1 = 0;
 					trasew2;
 				}
 				break;
 			}
 			
 			pattern = 2;
 			break;
 
 		case 2: //箱を掴んで壁に向く
 			
 			if(count == 1);
 				{
 					OnFwdReg(OUT_BC,SPD,OUT_REGMODE_SYNC);
 					Wait(550);
 				}
 			
 			Off(OUT_BC);
 			Wait(TIM_W);
 			if(count == 0)
 			{
 				OnFwd(OUT_A,-20);
 				Wait(TIM_W);
 				pattern = 5;
 				break;
 			}
 			
 			
 			OnFwd(OUT_A,-50);
 			Wait(TIM_W);
 			pattern = 5;
 			break;
 			
 		case 5:
 			if(count == 0)
 			{
 				OnFwdReg(OUT_BC,-SPD,OUT_REGMODE_SYNC);
 				Wait(3600);
 				OnFwd(OUT_B,30);
 				OnFwd(OUT_C,-30);
 				Wait(1600);
 				Off(OUT_BC);
 				Wait(TIM_W);
 				pattern = 3;
 				break;
 			}
 				OnFwdReg(OUT_BC,-SPD,OUT_REGMODE_SYNC);
 				Wait(4200);
 				OnFwd(OUT_B,30);
 				OnFwd(OUT_C,-30);
 				Wait(1560);	// 1450
 				Off(OUT_BC);
 				Wait(TIM_W);
 		t0 = CurrentTick();
 				pattern = 3;
 				break;
 
 		case 3: //タッチセンサーが接触するまで前進してそこからまた箱に向き直す
 			if(SENSOR_3 == 0)
 			{
 				if(t1 <= 10000000)
 				{
 					t1++;
 					OnFwdReg(OUT_BC,SPD,OUT_REGMODE_SYNC);
 					Wait(1);
 				}
 				else
 				{
 					t1 = 0;
 					trasew2;
 				}
 				break;
 			}
 			Off(OUT_BC);
 			OnFwd(OUT_A,30);
 			Wait(TIM_W);
 			Off(OUT_A);
 			if(count == 0)
 			{
 				OnFwdReg(OUT_BC,-SPD,OUT_REGMODE_SYNC);
 				Wait(3000);	// 2400
 				OnFwd(OUT_B,-30);
 				OnFwd(OUT_C,30);
 				Wait(1200);	//1200
 				count ++ ;
 				Off(OUT_BC);
 				pattern = 1;
 				break;
 			}
 			
 			
 			OnFwdReg(OUT_BC,-SPD,OUT_REGMODE_SYNC);
 				Wait(1550);
 				OnFwd(OUT_B,-30);
 				OnFwd(OUT_C,30);
 				Wait(1100);
 				Off(OUT_BC);
 				pattern = 4;
 				break;		
 			
 		case 4:
 			if(SensorUS(S2) > 8)
 			{
 				if(t1 <= 90)
 				{
 					t1++;
 					OnFwdReg(OUT_BC,SPD,OUT_REGMODE_SYNC);
 					Wait(1);
 				}
 				else
 				{
 					t1 = 0;
 					trasew2;
 				}
 				break;
 			}
 			Wait(TIM_W);
 			OnFwdReg(OUT_BC,SPD,OUT_REGMODE_SYNC);
 			Wait(TIM_W);
 			Off(OUT_BC);
 			OnFwd(OUT_A,-30);
 			Wait(TIM_W);
 			OnFwd(OUT_B,-30);
 			OnFwd(OUT_C,30);
 			Wait(800);
 			OnFwdReg(OUT_BC,SPD,OUT_REGMODE_SYNC);
 			Wait(880);
 			Off(OUT_BC);
 			Wait(30000);
 			break;
 		}
 	}
 }



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS