2008b/MemberOnly/進行状況A

懐中電灯に向かってブロックを投げロボット

課題内容

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

1. 全方向から懐中電灯の方向を探しだし、懐中電灯の手前50cmまで進んで懐中電灯を狙ってブロックを投げる。懐中電灯は動かさない。

2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいて懐中電灯を狙ってブロックを投げる。

懐中電灯の代わりに携帯のライトなどを利用してもよい。モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。ただし、平面的な方向だけでなく懐中電灯の高さまで含めた方向を探す場合にはモータを3個使用してもよい。

制作過程

土台

CIMG0253.JPG

しっぽが可愛いvV

CIMG0254.JPG

参考ページを見ながら作成しました。

CIMG0256.JPG

タイヤは黄色×黒で決定!

CIMG0255.JPG

安定のために黄色い足を付けてみました。

問題点:黄色い足が絨毯に引っかかる。。。

CIMG0258.JPG

足を取り外し、摩擦を減らすために黒くて丸いものを装着!

光センサー

CIMG0259.JPG

光センサーは一つだけ使うことに決定!

投げるとこ

CIMG0265.JPG

今回はこれ↑を投げることに決定!

CIMG0263.JPG

黄色い足を進化させて投げる手にしました!!

工夫・苦労した点

完成体

CIMG0261.JPG

ちょっとがたがた言うのが欠点、、、

投げる様子

投げる前

CIMG0260.JPG



投げた後

CIMG0264.JPG

プログラム1

#define THRESHOLD 42  //光の明るさを定義
task main()
{
     SetSensor(SENSOR_1, SENSOR_LIGHT);  //光センサーを定義
     
     while(true)
     {
          if(SENSOR_1 < THRESHOLD)  //定義した光よりも暗い場合
          {
               OnFwd(OUT_A);  //時計周りに回転する
          }
          else
          if(SENSOR_1 < THRESHOLD && SENSOR_1 < 45)
          {
               OnFwd(OUT_A);   //光の方向に進む
               Wait(10);
               OnRev(OUT_A);
               Wait(10);
           }
          else  
           {
               if(SENSOR_1 > 45) //定義した光よりも明るい場合
          {                     //止まってブロックを投げる
               OnFwd(OUT_C);
               Wait(5);
               Off(OUT_A+OUT_C);
              
           }   
    }
 }
}

(制作者:A子)

動く様子

CIMG0266.JPG

光を探して・・・

CIMG0267.JPG

投げたァー!!

工夫・苦労した点

光の閾値を決めるのが大変でした。懐中電灯から50cmという規定が特に難しかったです。

プログラム2

//2つのしきい値を決定

#define BORDER_1 40	//光を検知するしきい値
#define BORDER_2 50	//50cmまで近づいたことを検知するしきい値

// ループから抜け出すためのフラグ用変数
int flag = 0;

task main (){
	SetSensor ( SENSOR_1, SENSOR_LIGHT );	//センサー1は光センサーですよ
	
	while ( flag == 0 ){		//投げるまで(合図があるまで)ループする
		if ( SENSOR_1 < BORDER_1 ){	//正面が暗かったら、
			OnFwd(OUT_A);		//モーターを正回転
		}else{				//正面が明るければ、
			OnRev(OUT_A);		//モーターを逆回転
		} //end if
		
		if ( SENSOR_1 > BORDER_2 ){	//じゅうぶん近づいたら、
			Off(OUT_A);		//前進するのを止めて、
			OnFwd(OUT_C);		//投げつける。
			Wait(15);
			OnRev(OUT_C);		//腕を元の位置にもどす。
			Wait(10);
			Off(OUT_C);
			flag++;		//ループ終了の合図。
		} //end if
	} //end while
} //end task main

(制作者:スアマ)

動く様子

CIMG0269.JPG

光を探し中

CIMG0270.JPG

投げたッ!!

工夫・苦労した点

タイヤを回すための特殊な機構をうまく動かすのはとても難しかった。

コメントをどうぞ

プログラムをよくがんばっていると思います。
一つ目に関して:真ん中あたりの
SENSOR_1 < THRESHOLD && SENSOR_1 < 45よりも
SENSOR_1 > THRESHOLD && SENSOR_1 < 45の方が
適切ではないでしょうか。
二つ目に関して:二つ光センサを使うとより正確にどちらに曲がればいいかを
判断できると思います。 FI



添付ファイル: fileCIMG0270.JPG 359件 [詳細] fileCIMG0269.JPG 393件 [詳細] fileCIMG0268.JPG 176件 [詳細] fileCIMG0267.JPG 339件 [詳細] fileCIMG0266.JPG 394件 [詳細] fileCIMG0265.JPG 375件 [詳細] fileCIMG0264.JPG 337件 [詳細] fileCIMG0263.JPG 345件 [詳細] fileCIMG0262.JPG 193件 [詳細] fileCIMG0261.JPG 335件 [詳細] fileCIMG0260.JPG 374件 [詳細] fileCIMG0259.JPG 367件 [詳細] fileCIMG0258.JPG 371件 [詳細] fileCIMG0257.JPG 170件 [詳細] fileCIMG0256.JPG 330件 [詳細] fileCIMG0253.JPG 322件 [詳細] fileCIMG0255.JPG 324件 [詳細] fileCIMG0254.JPG 336件 [詳細] fileCIMG0252.JPG 139件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-02-02 (月) 19:23:43