2011a

チームメンバー

課題内容

課題2で作ったコース上にテニスボールを置き、ロータリーに置いてあるランタンに持っていく又は蹴る。

ロボット紹介

ロボットの全体図

0.JPG

ア−ム

1.jpg
22.JPG
3.JPG
11111.JPG
22222.JPG
6.png

プログラム

tama(蹴る)

#define THRESHOLD 45
task main()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_TOUCH);
while(true){
 start follow_line; //ライントレースを始める
 until(SENSOR_3 == 1); //タッチセンサーが押されるまで実行する
 stop follow_line; //ライントレースをやめる
 start boll_kick; //ランタンを探し、ボールを蹴る
  Wait(1000);
 stop boll_kick; } //10秒待ってから止める
}
task follow_line() //ライントレースのプログラム
{
while(true){
 if (SENSOR_2 < THRESHOLD){OnFwd(OUT_A); Off(OUT_C);}
 else{OnFwd(OUT_C); Off(OUT_A);}
 }
}
task boll_kick() //ランタンを探し、ボールを蹴るプログラム
{
int l_max=0; //光の最大値を記憶するための変数を定義
int t_max=0; //光が最大値になった時間を記憶するための変数を定義
OnFwd(OUT_B); Wait(50); //アームを下ろす
ClearTimer(0); //タイマーをクリアする
 while(FastTimer(0)<=400) //4秒間繰り返す
{
  OnFwd(OUT_A);
  OnRev(OUT_C); 
 if(SENSOR_1>l_max){l_max=SENSOR_1;t_max=FastTimer(0);} //もしl_maxより大きい値を感知したら、その値をl_maxに入れ、その時間をt_maxに記憶する
}
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(400-t_max); //ランタンの方向へ向ける
Off(OUT_A+OUT_C);
OnRev(OUT_B); Wait(50); //アームを上げる
OnFwd(OUT_A+OUT_C); Wait(30); //ボールを蹴る
Off(OUT_A+OUT_C);
}

ホン(運ぶ)

#define go_straight(t) OnRev(OUT_A+OUT_C); Wait(t);
#define back(t) OnFwd(OUT_A+OUT_C); Wait(t);
#define go_left(t) OnFwd(OUT_A); OnRev(OUT_C); Wait(t);
#define go_right(t) OnFwd(OUT_C); OnRev(OUT_A); Wait(t);
#define stopp(t) Off(OUT_A+OUT_C); Wait(t);
#define catch_on OnFwd(OUT_B); Wait(10); Off(OUT_B);
#define catch_off OnRev(OUT_B); Wait(10); Off(OUT_B);
#define THERSHOLD 40int a = 0 ;//線を探す時に使う変数、普通はa=0でa=1になると線探しstart
int T = 400;
int lmax1 = 0;
int lmax2 = 48;
int tmax = 0;
task line()
{
	while(true)
	{
		if(SENSOR_2 <= THERSHOLD)
		{
			go_straight(0); //センサーが基準値より暗くなるとgo
		}
		else if(SENSOR_2 > THERSHOLD)
		{
			a++; //基準値より明るくなると変数aが1になって線をさす。
			stopp(0);
		}
	}
}
task search()
{
	go_left(10);
	go_right(20);
	go_left(40);
	go_right(60);
     go_left(90);
	go_right(120);//センサー一つで道を探すために左右に回る幅をどんどん大きくして道を探しました。これで交差点も解決で着ました。//
}
sub search_lmax()
{
	ClearTimer(1);
	while(FastTimer(1) < T)
	{
	go_left(0);
	if(SENSOR_1 > lmax1)
		{
			lmax1 = SENSOR_1;
			tmax = FastTimer(0);
		}
	}
	stopp(0);
}
sub gotolight()
{
	go_right(T-tmax);
	stopp(10);
	go_straight(0);
	until(SENSOR_1 >= lmax2);
	stopp(0);
	catch_off;
	back(0);
	until(SENSOR_2 <=THERSHOLD);
	stopp(0);
}
task main()
{
	SetSensor(SENSOR_1, SENSOR_LIGHT);
	SetSensor(SENSOR_2, SENSOR_LIGHT);
	SetSensor(SENSOR_3, SENSOR_TOUCH);
	ClearTimer(0);
	while(true)
	{
		start line;
		until((Timer(0) > 10000) || (a == 1) || (SENSOR_3 == 1));
		stopp(0);
		stop line;
		if(a == 1)
		{
			start search;
			until(SENSOR_2 <= THERSHOLD);
			stop search;
			stopp(5);
			a--;
			continue;
		}
		else if(Timer(0) > 10000)
		{	
			break;
		}
		else if(SENSOR_3 == 1)
		{
			catch_on;
			search_lmax();
			gotolight();
			continue;
		}
			
	}
	stopp(0);
}

感想

最初はボールに当たってもセンサーが反応しないことがあったが、先生のアドバイスを参考にセンサーの位置を変えたところ、うまく反応するようになった。

コメント



添付ファイル: file22222.JPG 213件 [詳細] file11111.JPG 234件 [詳細] file22.JPG 257件 [詳細] file8.JPG 108件 [詳細] file6.png 241件 [詳細] file5.JPG 104件 [詳細] file4.JPG 108件 [詳細] file3.JPG 228件 [詳細] file2.JPG 142件 [詳細] file1.jpg 232件 [詳細] file0.JPG 227件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-08-05 (金) 11:54:15