目次

課題

黒い線に沿って動くロボット

各チームで作成したコースを1周するロボットを製作せよ。 交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する)

  1. 空き缶をコース上に戻して再びコースに戻って進む
  2. 空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む

ただし、

メンバー

田島・みのう

コース紹介

コース全面

ロボットの製作

製作したロボット

ロボット

工夫した点

今後改善すべき点

プログラムの作成(田島)

課題

作成したプログラム

int move_time

task main() {
 move_time = 0 ;
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_2,SENSOR_TOUCH);
 SetSensor(SENSOR_3,SENSOR_LIGHT);
 while(move_time < 8); {
   if ((SENSOR_1<45)&&(SENSOR_3<45)) {          //交差点にさしかかった場合
     move_time = move_time + 1                  //変数に1を足す
     Off(OUT_A+OUT_C);                          //停止する
     Wait(50);
     OnFwd(OUT_A+OUT_C);                        //前進する
     Wait(25);
   } else if (SENSOR_1<45) {                    //左側のセンサーが黒線に触れた場合
     OnFwd(OUT_C);                              //左側に曲がる
     OnRev(OUT_A);
   } else if (SENSOR_3<45) {                    //右側のセンサーが黒線に触れた場合
     OnFwd(OUR_A);                              //右側に曲がる
     OnRev(OUT_C);
   } else if ((SENSOR_1>45)&&(SENSOR_3>45)) {   //両方のセンサーが黒線の上に無い場合
     OnFwd(OUT_A+OUT_C); }                      //前進する
   if (SENSOR_2 == 1) {                         //缶にぶつかった場合
     OnFwd(OUT_B);                              //缶をはさむ
     Wait(25);
     Off(OUT_B);
     OnFwd(OUT_A+OUT_C);                        //前進する
     Wait(50);
     OnFwd(OUT_A);                              //回転する
     OnRev(OUT_C);
     Wait(160);
     OnRev(OUT_A+OUT_C);                        //後進する
     Wait(50);
     OnRev(OUT_B);                              //缶を離す
     Wait(25);
     Off(OUT_B);
     OnFwd(OUT_A);                              //回転する
     OnRev(OUT_C);
     Wait(160);
   if (move_time == 7) {                        //交差点を七回こえた場合
     Off(OUT_A+OUT_C);                          //タイヤを止める
     move_time = move_time + 1; }
  }
}

工夫した点

今後改善すべき点

プログラムの作成(みのう)

課題

作成したプログラム

#define THRESHOLD 45

// 変数宣言
int sensor; // 光センサ値
int cross_count; // 交差点通過数
int hold_can; // 缶所持フラグ
int first_cross; // 初回交差点未通過フラグ
int do_task; // ループ実行フラグ

#define close_hand OnRev(OUT_B);Wait(200);Off(OUT_B);
#define open_hand OnFwd(OUT_B);Wait(200);Off(OUT_B);

task main() {
	SetSensor(SENSOR_1, SENSOR_LIGHT);
	SetSensor(SENSOR_2, SENSOR_TOUCH);
	SetSensor(SENSOR_3, SENSOR_LIGHT);

	// 変数初期値代入
	cross_count = 0;
	hold_can = 0;
	first_cross = 1;
	do_task = 1;

	Off(OUT_B);

	while(do_task) {
		sensor = 0;
		if(SENSOR_1 > THRESHOLD) { sensor += 1; }
		if(SENSOR_3 > THRESHOLD) { sensor += 2; }
		
		if(sensor == 0) { // 両光センサが黒判定の時
			if(FastTimer(0)>200) {
				// 前回の両黒判定より2秒経過している場合は新たな交差点
				cross_count++;
				Off(OUT_A+OUT_C); // 一時停止
				Wait(100);
				ClearTimer(0);

				if(hold_can && first_cross) { // 缶所持、初回交差点未通過時
					first_cross = 0; // 初回交差点未通過フラグ削除
				} else if(hold_can && !first_cross) { // 缶所持、初回交差点通過時
					// 缶を交差点に置く
					PlaySound(SOUND_DOWN);
					OnFwd(OUT_A+OUT_C);
					Wait(100);
					OnFwd(OUT_A);
					OnRev(OUT_C);
					Wait(170);
					Off(OUT_A+OUT_C);
					open_hand;
					OnRev(OUT_A+OUT_C);
					Wait(60);
					OnRev(OUT_A);
					OnFwd(OUT_C);
					Wait(170);
					OnRev(OUT_A+OUT_C);
					Wait(60);
					hold_can = 0;
					PlaySound(SOUND_CLICK);
				}
			}
			OnFwd(OUT_A);
			OnFwd(OUT_C);
		} else if(sensor == 1) { // 右光センサが黒判定の時
			// 右旋回
			OnFwd(OUT_A);
			OnRev(OUT_C);
		} else if(sensor == 2) { // 左光センサが黒判定の時
			// 左旋回
			OnRev(OUT_A);
			OnFwd(OUT_C);
		} else { // それ以外の時(両光センサが白判定の時)
			// 直進
			OnFwd(OUT_A);
			OnFwd(OUT_C);
		}

		if(SENSOR_2 && !hold_can) { // タッチセンサ反応、缶未所持時
			// 缶を掴む
			PlaySound(SOUND_UP);
			Off(OUT_A+OUT_C);
			close_hand;
			hold_can = 1; // 缶所持フラグセット
			first_cross = 1; // 初回交差点未通過フラグセット
			PlaySound(SOUND_CLICK);
		}

	if(cross_count >= 7) { do_task = 0; } // 7回目の交差点通過でループ終了
	}

	// モータ自由、ブザー鳴動し停止
	Float(OUT_A+OUT_B+OUT_C);
	repeat(5) {
		PlaySound(SOUND_DOUBLE_BEEP);
		Wait(100);
	}
}

工夫した点

今後改善すべき点

反省・感想

コメントをどうぞ



添付ファイル: file100624sensor01.jpg 327件 [詳細] file100701robot01.jpg 277件 [詳細] file100624course.jpg 319件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-07-09 (金) 17:44:14