2010b

課題の内容

課題3

メンバー

・小柳

・中村

完成したロボット

110121_182341.jpg

初めはゴム鉄砲のように、ゴムの力で棒状の玉を打ち出そうとしましたが、うまくいきませんでした。そこで、棒状のパーツを回転させて、ホイールを打ち出せるようにしました。ホイール4発を連射することができます。一回転して、明るい点を探し、2回転目からそこに向かって、ホイールを発射します。ホイールの飛距離も長く、単発で発射することもできますが、プログラミングがうまくいかなかった為、目標の発射には至りませんでした。また、小さなギアが多すぎて、左タイヤのパワーが弱くなってしまいました。

 

110121_182359.jpg

発射装置

ホイールを入れるところを斜めにして1つのホイールがでた後、次のホイールが出てくるようにしました。斜めにすることで、打つ前にホイールが本体から落ちてしまうのを防ぐためにホイールを片側だけ固定できるように段差があります。

工夫した点

ホイールを発射するための機構が重くなってしまった為、タイヤの真上にセットすることで、バランスをとりました。また、真っ直ぐホイールを打つために少し曲がったパーツで打つことにしました。ディファレンシャルギアを使って一つのモーターで進む、曲がるの動作が出きるようにしました。

110107_172408.jpg

左右でギアの数を変えてあります。

110118_180909.jpg

ホイールを打つ機構です。モーターで直接ギアを回すことによって、アームが回転します。モーターの回転時間を調節すると連射もできます。

プログラム

小柳

(トレース)

#define Right(t) OnRev(OUT_A);Wait(t);Off(OUT_A);                  //右に曲がる
#define Left(t) OnFwd(OUT_A);Wait(t);Off(OUT_A);                   //左に曲がる
#define THRESHOLD2 55                                              //閾値2

task main()
{
 SetSensor(SENSOR_1,SENSOR_LIGHT);                                 //センサが光センサであると宣言

 while(SENSOR_2>-647){
   OnRev(OUT_A);
   if(SENSOR_1<THRESHOLD2){ 
   Left(5);
    }
   else if(SENSOR_1<THRESHOLD2){
   Right(5);
     }
    }Off(OUT_A);
}

(ホイール発射)

#define shoot OnRev(OUT_C);Wait(100);Off(OUT_C);  //ホイール発射

task main()
{
 SetSensor(SENSOR_2,SENSOR_ROTATION);             //センサー2を回転センサーに設定
 SetSensor(SENSOR_3,SENSOR_LIGHT);                //センサー3を光センサーに設定

 int l_o=0;                                       //光量の最大値をセーブ
 if(SENSOR_3>l_o){                           
 l_o=SENSOR_3;
                     }                                         //光量の最大値を測定

 ClearSensor(SENSOR_2);                           //回転センサーをセット
 OnFwd(OUT_A);                                    //左に回転
 until(SENSOR_2>54);                              //一回転したら

 Off(OUT_A);                                      //止まる

 OnFwd(OUT_A);                                    //左に回転
 until(SENSOR_3>=l_o);                            //最大値以上の光源を発見
 Off(OUT_A);                                      //停止
 shoot;                                           //ホイール発射
}

中村

(ホイール発射)

#define turn_left(t) OnFwd(OUT_A); Wait(t); Off(OUT_A);
#define TURNTIME 30

task main()
{
SetSensor(SENSOR_3,SENSOR_LIGHT);
int light_max=0;		//明るさの最大値
ClearTimer(0);		//タイマー(0)をリセット

while(true){

 if(Timer(0)<TURNTIME){	//タイマー(0)がTURNTIMEより小さいとき
 turn_left(200);		//その場で一回転する

   if(SENSOR_3>light_max){	//センサー1がlight_maxより大きい値を認知したら
   light_max=SENSOR_1;		//light_maxの値をセンサー1の値にする
   }

 }

 else if(Timer(0)>TURNTIME){	//最大値を求めた後、繰り返す
 PlaySound(SOUND_CLICK) ;        // 確認のため音をならす
 OnFwd(OUT_A); Wait(100); Off(OUT_A);
 OnRev(OUT_A); Wait(100); Off(OUT_A);		//前進する
 
 turn_left(200);		//回転して光の最大値(ぶつける相手)を探す

   if(SENSOR_3==light_max){		//センサー1が最大値を認知したら
   OnRev(OUT_C); Wait(10); Off(OUT_C);	//ホイールを打つ
    }
  }

 }
}

感想

小柳

ライントレースができたのはよかったですが、ホイール発射のプログラムができなかったのが残念でした。

中村

モーターを1つだけ使ってライントレースをするのが難しかったです。モーターを逆回転させてまっすぐに進むことはできましたが、黒線を認知してからの動きでどのように動かすのか解決できませんでした。最大値を計測してそれを利用するプログラムは勉強になりました。

コメント

書くべきことはおさえています。一人目のプログラムは、トレースと投射それぞれ別に作ったということでしょうか?一つにまとめてみてください。 FI

簡潔になっていますが、全体的にもう少し内容を増やしてください。 TAKA


添付ファイル: file110121_182359.jpg 185件 [詳細] file110121_182341.jpg 189件 [詳細] file110118_180909.jpg 174件 [詳細] file110118_180847.jpg 100件 [詳細] file110107_180730.jpg 110件 [詳細] file110107_172408.jpg 191件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-02-08 (火) 13:27:23 (3118d)