[[2016a/Member]]
 
*はじめに [#x7fabdda]
今回の課題は、ロボットに紙コップを運ばせることである。

紙コップは重ねて立たせなければならない。

*機体の説明 [#y5aa72c5]

ロボットの先端にある黄色いアームによりの先端についているタイヤにより
*プログラミングの説明 [#e886e53f]
 #define Middle 45 ライントレースの中央値

 task main()
 { 
 	setting();
 	STARTING_OPERATION();
 	repeat(2)
 	{
 		TRACE();
 		zensin();
 	}
 	//交差点からDへ向かう
 	TRACE();	
 	OnRev(OUT_C);
 	Wait(25);
 	TRACE();
 	//誤差修正
 	OnRev(OUT_A);
 	Wait(95);
 	Off(OUT_AC);
 	//dに到着
 	OnFwd(OUT_B);//コップつかむ
 	Wait(250);
 	start keep;
 	TURN_180();//180°回転
         TRACE();
 	zensin();
 	TRACE();
 	OnRev(OUT_A);
 	Wait(80);
 	Off(OUT_AC);
 	stop keep;
         down();
 	OnFwd(OUT_B);
 	Wait(250);
 	start keep;
 	OnFwd(OUT_A);//Qの方向を向く
 	OnRev(OUT_C);
 	Wait(200);
 	Off(OUT_AC);
 	OnRev(OUT_AC);//進む
 	Wait(100);
 	Off(OUT_AC);
 	//センサー使って進む
 	while(SENSOR_1 > Middle-4)
         OnRev(OUT_AC);
 	stop keep;
 	//放す
 	Off(OUT_AC);
 	down();
 }

 sub setting()
 {	
 	//初期設定(パワー、センサー)	
 	SetSensor(SENSOR_1,SENSOR_LIGHT);			
 	SetSensor(SENSOR_2,SENSOR_TOUCH);//モータB止める用
 	SetSensor(SENSOR_3,SENSOR_LIGHT);	
 	SetPower(OUT_AC,4);//タイヤ
 	SetPower(OUT_B,7);//紙コップをつかむアームの上下、開き
 }

 sub zensin()
 {
       OnRev(OUT_A);
       Wait(106);
       Off(OUT_A);
 }

 sub copjugde()*使ってない
 //コップが前にくるまで前進
 {
    while(SENSOR_3 < 46)
 	OnRev(OUT_AC);
 	Off(OUT_AC);
 	Wait(100);
 }

 task keep()*使ってない(紙コップの保持)
 //上でキープしておくただし、ラインとレースと並列動作させるためtaskで定義
 {
 	while(1)
        {
 		OnRev(OUT_B);
 		Wait(1);
 		OnFwd(OUT_B);
 		Wait(1);
 	}
 }

 sub TRACE()
 //トレース用メソッド
 { 
 	ClearTimer(0);
 	while(FastTimer(0)<=42){
 		if(SENSOR_1>Middle+4)//白 左旋回
 		{
 			OnFwd(OUT_C);
 			OnRev(OUT_A);
 			ClearTimer(0);
 		}
 		else if(SENSOR_1>Middle+2)//やや白 左折
 		{
 			Off(OUT_C);
 			OnRev(OUT_A);
 			ClearTimer(0);
 		}
 		else if(SENSOR_1>Middle)//直進
 		{
 			OnRev(OUT_AC);
 			ClearTimer(0);
 		}
 		else if(SENSOR_1>Middle-2)//やや黒 右折
 		{
 			Off(OUT_A);
 			OnRev(OUT_C);
 		}
 		else //黒 右旋回
 		{
 			OnFwd(OUT_A);
 			OnRev(OUT_C);
 		}	
 	}
 	Off(OUT_AC);
 	PlaySound(SOUND_FAST_UP);//トレース終了、交差点認識
 }

 sub down()
 //下に下げる動作
 { 
 	OnRev(OUT_B);
        Wait(200);
 }

 sub STARTING_OPERATION()
 //スタート地点の四角から脱出する
 { 
 	while(SENSOR_1<Middle)
 	{
 		OnRev(OUT_AC);
 	}
 	while(SENSOR_1>Middle)
 	{
 		OnRev(OUT_AC);
 	}
 	OnRev(OUT_AC);
 	Wait(50);
 	Off(OUT_C);
 	OnRev(OUT_A);
 	Wait(40);
 	while(SENSOR_1<Middle)
 	{
 		OnRev(OUT_AC);
 	}
 	Off(OUT_AC);
 }

 sub TURN_180()
 //waitで回転後180°回転し黒線を認識したら停止
 {
 	OnFwd(OUT_AC);
 	Wait(80);
 	Off(OUT_AC);
 	
 	OnRev(OUT_A);
 	Wait(130);
 	while(SENSOR_1>40)
 	{
 		OnFwd(OUT_C);
 		OnRev(OUT_A);
 	}
 	Off(OUT_AC);
 }

*感想・考察 [#h3d3e4b7]



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