*課題3 [#n87b8124]

半径1m以内にある空き缶を探して、25cmの距離からボールを転がしてその空き缶に当てるロボットを製作。ただし25cm以内に空き缶がある場合には、30cmまで離れる。

**機体説明 [#ee10824c]


 特徴

-前輪である二つの車輪を動かすことで車体を回転、前後に移動することが出来る。
-上方に取り付けたアームを上下に動かすことで坂を作り、ボールをレールの上で転がし、目標の物体に向かって発射させることが出来る。

#ref(img3141.JPG)

**プログラム [#gf905ffb]

 //車体が一回転するのにかかるカウント(Spn) = 28
 //目標に向けての軌道補正 +- 2
 //SPD=60で1m進むのにかかる時間=3600ms
 //1cmあたり36ms
 
 
 #define Level 100	//物体いる範囲のしきい値
 #define SPD 60	//スピード
 #define Cls_Pos OnFwd(OUT_B,SPD);OnFwd(OUT_C,-SPD);Wait(1000);Off(OUT_BC);Wait(1000);PlayTone(1320,50);	//後輪の調整
 #define Turn_Right OnFwd(OUT_B,SPD);OnFwd(OUT_C,-SPD);	//時計回りに回転
 #define Turn_Left OnFwd(OUT_B,-SPD);OnFwd(OUT_C,SPD);	//半時計回りに回転
 #define Shot OnFwd(OUT_A,20);Wait(1000);	//ボールを発射
 #define Spn 28	//一回転するのにかかるカウント数
 
 
 task main(){
 
 
 //////	カンを見つける	//////
 
 
	SetSensorLowspeed(IN_1);
	Cls_Pos
	int C = 0;
	int E = 0;
 
 //車体を一回転させる間に物体を検出する
 
	while( Spn > C ) {
		C++;
		if ( SensorUS(IN_1) > Level) {
			Turn_Right
			TextOut(0,LCD_LINE1,"Searching Now...");
		} else {
			E = C;
			Turn_Right
			PlayTone(880,50);
		}
	NumOut(80,LCD_LINE2,SensorUS(IN_1));
	NumOut(80,LCD_LINE3,E);
	Wait(1);
	Float(OUT_BC);
	}
 
	Wait(1000);
 
 //一回転しても物体を見つけられない場合、電源を落とす
 
	if (E == 0){
		TextOut(0,LCD_LINE7,"NOT FIND!!");
		PlayTone(440,700);
		Wait(2000);
		TextOut(0,LCD_LINE8,"Turn off");
		Wait(500);
 
 //物体を検出後、車体を物体に向ける
 
	} else {
 	
		int A = 0;
		int R = Spn - E + 2;
		NumOut(80,LCD_LINE6,R);
		Wait(1000);
		PlayTone(1320,30);
		while( R > A ) {
			A++;
			Turn_Left
			TextOut(0,LCD_LINE4,"Find!");
			Wait(55);
			Float(OUT_BC);
			NumOut(80,LCD_LINE7,A);
		}
 
		Wait(1500);
		PlayTone(1320,30);
 
 
 //////	カンにボールを当てる	//////
 
 
		int BackTime = 0;
		int FwdTime = 0;
		int F = SensorUS(IN_1) - 30;
		int B = 30 - SensorUS(IN_1);
 
 //物体との距離が25cm以内の時は30cmになるまで離れる
 
		if(B>0){
			BackTime = 36*B;
			OnFwdSync(OUT_BC,-SPD,0);
			Wait(BackTime);
			Off(OUT_BC);
 
 //物体との距離が25cmよりも離れているとき
 
		} else {
			FwdTime = 36*F;
			OnFwdSync(OUT_BC,SPD,0);
			Wait(FwdTime);
			Off(OUT_BC);
		}
	Wait(1000);
	PlayTone(1320,30);
	Shot
	}		
 }

 プログラムの大まかな流れ

-最初に少し車体を回転させる。
↓

-車体を回転させながら超音波センサーを使い、目標を探す。
↓

-ちょうど一周し終わったら、今度は逆回転に回って、目標に車体を向ける。
↓

-目標との距離から、発射するのに最適な間合いを取る。
↓

-アームをおろしてボールを転がす。


 メンバーと異なる点
-カウントを使っている点、一回転する間に目標をとらえたカウント数を記憶しておいて、次に回転するときの指標にする。
-誤差をなくすために最初に一回車体を回している。また物体の幅が大きいと誤差が生じるので、補正をかけている。


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