*ロボコン [#g2ca337f]
**目標 [#g18b43a3]
#ref(2012b/Member/maji/Mission2/robocon2012b.png)
両側に置いてある3個の箱を木材の上を越えて入れ換える。
**ロボットの概要 [#a7e43b93]
***全体像 [#na1f3e19]
#ref(2012b/Member/maji/Mission2/DSC_0172.jpg,15%)
-全体的に長くなってライントレースの時、木材に当たってしまうのが難点でした
***アーム部分 [#c771ebeb]
&ref(2012b/Member/maji/Mission2/DSC_0201.jpg,20%);
&ref(2012b/Member/maji/Mission2/DSC_0206.jpg,20%);
-ウォームギアを使い二つのギアを逆方向に回すことでアームが開閉する
-アームが閉じきりこれ以上動かなくなった時、2枚目の写真のギアがアーム全体を持ち上げる
-1つのモーターでアームを閉じるのと持ち上げる動作をさせた
-アームの先端の黒い部品は重りで、これがないとアームが軽すぎて閉じる前にアーム全体が持ち上がってしまう
-逆に、これ以上重くすると箱が持ち上がらなくなってしまうので微妙なところです
&ref(2012b/Member/maji/Mission2/DSC_0179.jpg,20%);
***光センサー [#see3d3c6]
&ref(2012b/Member/maji/Mission2/DSC_0196.jpg,20%);
&ref(2012b/Member/maji/Mission2/DSC_0202.jpg,15%);
-前面のスペースをアームの部分に取られてしまったので、光センサーを土台の裏につけることにした
***バンパー [#l36543ec]
&ref(2012b/Member/maji/Mission2/DSC_0188.jpg,30%);
&ref(2012b/Member/maji/Mission2/DSC_0178.jpg,15%);
-初めはタッチセンサーをアームの先端につけていたが、反応しなかった
-てこの原理を使いうまく力が伝わるようにした
**プログラム [#eaddf821]
-スタートから木材の向こう側へ渡すまで
 #define go_back OnFwd(OUT_AC);	// 後進
 #define lift_up OnFwd(OUT_B);	//アームを閉じる
 #define lift_down OnRev(OUT_B);	//アームを開く
 #define THRESHOLD 45	// しきい値
 #define go_forward OnRev(OUT_AC);	// 直進
 #define turn_left1 OnFwd(OUT_A);OnRev(OUT_C);	// 左旋回
 #define turn_left0 OnFwd(OUT_A);Off(OUT_C);	   // 左折
 #define turn_right1 OnFwd(OUT_C);OnRev(OUT_A);	// 右旋回
 #define turn_right0 OnFwd(OUT_C);Off(OUT_A);		// 右折
 #define STAY_BACK_TIME 120	// 持ち上げる際に一度退く時間
 #define APPROACH_TIME 60		// 箱に近づく時間
 #define OPEN_TIME 30		// アームを完全に開閉する時間
 #define KEEP_TIME 80		// 箱を完全につまむまでの時間
 #define QUARTER_TURN_TIME 120	// 半回転
 
 task main()
 {
 	ClearTimer(0);
 	SetPower(OUT_B, 7);
 	SetSensor(SENSOR_2, SENSOR_TOUCH);
 	
 	
 	
 	until(SENSOR_2)				//------------------------//
 	{						//箱にバンパーが当たるまで後進して、
 		OnFwd(OUT_AC);			//当たったら少し前進
 	}						//------------------------------//
 	Off(OUT_AC);
 	OnRev(OUT_AC);
 	Wait(STAY_BACK_TIME);
 	
 	SetPower(OUT_AC, 5);			//
 	turn_left1;					//半回転
 	Wait(QUARTER_TURN_TIME);			//
 	Off(OUT_AC);								
 	
 	lift_down;					//---------------------------//
 	Wait(100);					//アームを開き箱まで前進
 	Off(OUT_B);					//
 	go_forward;					//
 	Wait(280);					//---------------------------//
 	Off(OUT_AC);
 
 	
 	lift_up;					//箱を持ち上げる
 	Wait(550);
 	Off(OUT_B);
 	int timer = 0;	//続けて黒になった回数
 
 	while(true){
 		// 黒い時
 		if (SENSOR_3 < THRESHOLD -4){
 			ClearTimer(0);
 			while(SENSOR_3 < THRESHOLD -4){
 				turn_right1;
 			}
 			timer = FastTimer(0);	//タイマーリセット
 		// 灰色の時
 		} else if (SENSOR_3 < THRESHOLD +8){
 			go_back;
 		// 白い時
 		} else {
 			turn_left1;
 		}
 		
 		if(SENSOR_2==1){			//---------------------------//
 			go_forward;			//木材にバンパーが当たったら、少し前進
 			Wait(50);			//して木材にアームが向くように半周旋回
 			Off(OUT_AC);			//する
 			turn_left1;			//
 			Wait(100);			//---------------------------//
 			Off(OUT_AC);
 			}
 
 		if (timer >= 50) {		//0.5秒以上黒が続いたら //------------------------------------//
 			PlayTone(440, 30);				 //木材にバンパーが当たらなかったら、直角
 			timer = 0;					 //を判断して木材にアームが向くように旋回
 			kado++;	//直角の回数をカウント		 //する
 									 //
 			if (kado == 1) {	//1つ目の直角にきたら	 //
 				turn_left1;				 //----------------------------//
 				Wait(35);
 				go_back;
 				Wait(30);
 				timer = 0;
 				break;
 			}
 		}
 	}
 	lift_up;					//----------------------------//
 	Wait(200);					//アームを上げながら木材にギリギリまで
 	go_forward;					//近づき箱を下ろす
 	Wait(50);					//----------------------------//
 	lift_down;
 	Wait(300);
 }

**感想 [#b4ede89a]
プログラムが途中までしかできなくて、先生の「本体と同じ位の時間をかけてプログラムを作れ」と言う言葉がよくわかった。4人チームなのに、1人の人に頼り切っていたのでチームで分担したらもっと時間が作れたんじゃないかと感じました。

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