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

投げたッ!!

工夫・苦労した点

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

コメントをどうぞ

  • ロボットの説明は大体書けています。
    後は、プログラムを完成させましょう。2の方はまだ貼られていませんし、
    1の方も前進せずに投げることになっています。
    また、if(SENSOR_1 > 45)の中にOff(OUT_A);はいらないと思います。 -- FI?  
  • わかりました。Off(OUT_A);をなくし、前進するプログラムを書き足しました。書き直しました。 -- A子? 2009-01-15 (木) 17:49:22

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



添付ファイル: fileCIMG0270.JPG 235件 [詳細] fileCIMG0269.JPG 282件 [詳細] fileCIMG0268.JPG 123件 [詳細] fileCIMG0267.JPG 222件 [詳細] fileCIMG0266.JPG 245件 [詳細] fileCIMG0265.JPG 247件 [詳細] fileCIMG0264.JPG 221件 [詳細] fileCIMG0263.JPG 225件 [詳細] fileCIMG0262.JPG 133件 [詳細] fileCIMG0261.JPG 217件 [詳細] fileCIMG0260.JPG 232件 [詳細] fileCIMG0259.JPG 247件 [詳細] fileCIMG0258.JPG 241件 [詳細] fileCIMG0257.JPG 129件 [詳細] fileCIMG0256.JPG 214件 [詳細] fileCIMG0253.JPG 236件 [詳細] fileCIMG0255.JPG 252件 [詳細] fileCIMG0254.JPG 217件 [詳細] fileCIMG0252.JPG 109件 [詳細]

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