2007b/MemberOnly/進行状況A


課題3:懐中電灯に向かってブロックを投げるロボット

今日のアクセス数 1
総アクセス数 1189
目次

課題

インストの「top secret」を参考にして、ブロック(一番太いホイール)を投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。 (重複しないように一人一つ以上のプログラムを作成すること)

  1. 全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。
  2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。
  3. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。

ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。

(期限:1月9日午後6時)

ロボット

全体

画像の説明
画像の説明 センサー二つで進行方向を定める

ブロックの発射構造

画像の説明 ブロックを発射台にセットした状態
画像の説明 ブロックはモーターによって回転した長いバットのような部品を使うことで打ち出す(写真の長い部品がバットの役割を担う
画像の説明

ギアの構造の説明

画像の説明1、まず、ギアにかませる
画像の説明2、1でかませたディファレンシャルギアに伝える
画像の説明3、ディファレンシャルギアからタイヤに動力を伝える
画像の説明 ストッパーによって進行方向を制御する。反対側も同様

ソースコード

最も明るい方向にホイールを投げるプログラム

担当者:桑名

#define THRESHOLD  55			//  閾値の設定
task main ()
{
	SetSensor(SENSOR_1,SENSOR_LIGHT);			// センサー1:光センサー
	SetSensor(SENSOR_3,SENSOR_LIGHT);			// センサー3:光センサー
	
	while(true){
	if(SENSOR_1 > THRESHOLD){
	if(SENSOR_3 > THRESHOLD){
		Off(OUT_A);			// センサー1とセンサー2のどちらも明るいと
		Wait(50);			// 判断すると停止
		OnRev(OUT_C);			// バットを奥まで戻す
		Wait(10);
		Off(OUT_C);
		OnFwd(OUT_C);			// バットを振ってホイールを飛ばす
		Wait(45);
		Off(OUT_C);
	  } else {
		OnFwd(OUT_A);		// センサー3が反応するとその方向に回転
		}
	  } else {
	  	if(SENSOR_3 > THRESHOLD){
	  	OnRev(OUT_A);			// センサー1が反応するとその方向に回転
	  	  } else {
	  OnFwd(OUT_A);			// どちらのセンサーも感知していない時は回り続ける
	  			}
	  		}
	  	}
}

条件:懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。

担当 北田

task main(){
  SetSensor(SENSOR_1, SENSOR_LIGHT);//右側光センサー
  SetSensor(SENSOR_3, SENSOR_LIGHT);//左側光センサー
  while(1){
    if(SENSOR_1<=35&&SENSOR_3<=35){//懐中電灯の光が当てられてないとき
      Off(OUT_A);//止まっている
    }
    else if(-15<=SENSOR_1-SENSOR_3&&SENSOR_1-SENSOR_3<=15){//懐中電灯の光が正面のとき
           OnFwd(OUT_A);//直進
           Wait(40);
           OnRev(OUT_A);
           Wait(40);
           Off(OUT_A);
        }
        else if(SENSOR_1-SENSOR_3>15){//右のほうが明るい時
           OnFwd(OUT_A);//右に進む
           Wait(40);
           Off(OUT_A);
        }
        else{//左のほうが明るい時
           OnRev(OUT_A);//左に進む
           Wait(40);
           Off(OUT_A);
        }
   }
}

懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。

担当 北田

task main(){
 int i=0;
 SetSensor(SENSOR_1, SENSOR_LIGHT);//右側光センサー
 SetSensor(SENSOR_3, SENSOR_LIGHT);//左側光センサー
 while(1){
   if(SENSOR_1<=35&&SENSOR_3<=35){//懐中電灯の光が当てられてないとき
     Off(OUT_A);//止まっている      
   }
   else if(-15<=SENSOR_1-SENSOR_3&&SENSOR_1-SENSOR_3<=15){//懐中電灯の光が正面のとき
       i++;
     	  if(i>2){//かつしばらく待っても光が動かないとき(iが2になったとき)
      	  OnRev(OUT_B);//ブロックを発射する
      	  Wait(100);
      	  Off(OUT_B); 
     	  i=0;
   	  }
       }
       else if(SENSOR_1-SENSOR_3>15){//右のほうが明るい時
          OnFwd(OUT_A);//右に進む
          Wait(40);
          Off(OUT_A);
       }
       else{//左のほうが明るい時
          OnRev(OUT_A);//左に進む
          Wait(40);
          Off(OUT_A);
       }
  }
}	

考察

苦労した点

カタカタ音が鳴ってきちんと動かない事があり、デファレンシャルギアを用いた駆動部の製作には苦労した。

工夫した点

ホイールの投げ方はバットで打ち出す形にした。これに依ってきちんと前方にそして比較的長距離飛ばせるようになった。

感想

桑名:ロボットとプログラム共に問題が沢山あって大変だったが、満足出来る所まで行けたのは良かった。 北田:ギアの構造を理解することができた。

コメント

よろしければコメントお願いします。

  • 「最も明るい方向」を探す際には、絶対的な明るさではなく、他の方向に比べて相対的に明るいという条件を使いましょう。 -- 松本 2008-01-09 (水) 23:34:37
  • 機構についての説明が不足しています。その機構ではなぜそのように動けるのか、ということをはっきり書きましょう。 -- クノ? 2008-01-22 (火) 00:22:52


添付ファイル: fileP1000012.JPG 247件 [詳細] fileP1000011.JPG 127件 [詳細] fileP1000009.JPG 232件 [詳細] fileP1000008.JPG 237件 [詳細] fileP1000007.JPG 256件 [詳細] fileP1000006.JPG 232件 [詳細] fileP1000005.JPG 239件 [詳細] fileP1000004.JPG 231件 [詳細] fileP1000003.JPG 243件 [詳細] fileP1000002.JPG 273件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-02-07 (木) 13:11:22 (4217d)