[[2011a]]


#contents

*チームメンバー [#eaf74067]

-オ(運ぶ)
-MIYA(転がす)

*課題内容 [#na7bce20]

課題2で作ったコース上にランダムに3個のテニスボールをおいて、ボールを中央のランタンに向かって運ぶまたは転がすロボットを作る。
ただし
-転がす場合はボールのあった位置から直接転がす。(押さずに運んだりしないこと)
-運ぶ場合はボールのあった位置から最短距離で運ぶ。
-ロータリーの中央にランタンを置き、3個のボールをランダムに置く。

&Ref(ju.jpg);

*ロボット紹介 [#i567d96e]
**全体 [#fe56d250]

&Ref(1.JPG);


ハサミを2つ使うことによりしっかりと安定したボール運びをできるようにしました。
**アーム部分 [#c61048fb]

&Ref(DSC_0739.jpg);

道を探すセンサーは本体の真ん中に、
光を探すセンサーはできるだけ上に、
タッチセンサーはボールがタッチできたらすぐつかめるようにアームの真ん中にしました。


**センサーの位置 [#b436a834]

&Ref(DSC_0737.jpg);

ランタンの光を探すセンサーの光が広がらないように横にブロックを付けました。

&Ref(DSC_0738.jpg);

&Ref(DSC_0745.jpg);

ボールがタッチセンサーに当たったらすぐボールをつかめるようにしました。

*プログラミング [#v5f31fd3]
**オ(ボールを運ぶ) [#a2991919]

 #define go(t) OnRev(OUT_A+OUT_C); Wait(t);
 #define back(t) OnFwd(OUT_A+OUT_C); Wait(t);
 #define hidari(t) OnFwd(OUT_A); OnRev(OUT_C); Wait(t);
 #define migi(t) OnFwd(OUT_C); OnRev(OUT_A); Wait(t);
 #define off(t) Off(OUT_A+OUT_C); Wait(t);
 #define catch_on OnFwd(OUT_B); Wait(10); Off(OUT_B);
 #define catch_off OnRev(OUT_B); Wait(10); Off(OUT_B);
 #define THERSHOLD 50
 int T = 200;
 int lmax1 = 0;
 int lmax2 = 80;
 int tmax = 0;
 int a = 0 ;


 task main()
 {
    SetSensor(SENSOR_1, SENSOR_LIGHT); //1番センサーを付ける
    SetSensor(SENSOR_2, SENSOR_LIGHT); //2番センサーを付ける
    SetSensor(SENSOR_3, SENSOR_TOUCH); //3番センサーを付ける
    ClearTimer(0);
    while(true)
    {
        start go_line;
        until((Timer(0) > 10000) || (a == 1) || (SENSOR_3 == 1)); //三つの条件まで前に行く
        off(0);  
        stop go_line;
        if(a == 1)         //関数が1になったら
        {
            start search;
            until(SENSOR_2 <= THERSHOLD);
            stop search;
            off(5);
            a--;
            continue;
        }
        else if(Timer(0) > 10000)  //Timerが1000秒過ぎたら
        {    
            break;
        }
        else if(SENSOR_3 == 1)   //タッチセンサー(センサー3)がボールを認識したら
        {
            catch_on;
            hikari_sagsu();
            gotolight();
            continue;
        }
            
    }
 off(0);
 }
 sub hikari_sagasu()         //一番明るい光を探す
 {
    ClearTimer(1);
    while(FastTimer(1) < T)
    {
        hidari(1);
        off(0);
        if(SENSOR_1 > lmax1)
        {
            lmax1 = SENSOR_1;
            tmax = FastTimer(0);
        }
    }
    off(0);
 }
 task go_line()            //前に行く
 {
    while(true)
    {
        if(SENSOR_2 <= THERSHOLD)     //THERSHOLDより暗ければ
        {
            go(0);
        }
        else if(SENSOR_2 > THERSHOLD)   //THERSHOLDより明るければ
        {
            a++;
            off(0);
        }
    }
 }
 task search()         //道を探す
 {
    hidari(10);
    migi(20);
    hidari(50);
    migi(50);
 }
 sub gotolight()       //一番明るい光がある所にに行く
 {
    migi(T-tmax);
    off(10);
    go(0);
    until(SENSOR_1 >= lmax2);
    off(0);
    catch_off;
    back(0);
    until(SENSOR_2 <=THERSHOLD);
    off(0);
 }


**MIYA(ボールを転がす) [#b4c29ec2]
 #define THRESHOLD 40
 task main(){
       SetSensor(SENSOR_1, SENSOR_LIGHT);     //センサー1を光センサーと定義
       SetSensor(SENSOR_2, SENSOR_TOUCH);     //センサー2をタッチセンサーと定義
       SetSensor(SENSOR_3, SENSOR_LIGHT);     //センサー3を光センサーと定義
 
      while(true){
            start folow_line;
            until(SENSOR_2 == 1);
            stop folow_line;
            start ball_kick;
            Wait(1000);
            stop ball_kick;
               }
 }
 task folow_line()
 {
     while(true){
              if(SENSOR_1<THRESHOLD){         //センサー1が黒線上の時   
                     OnFwd(OUT_A);Wait(15);
             }if(SENSOR_1>THRESHOLD){         //センサー1が黒線上に無い時
                     OnFwd(OUT_C);Wait(15);
                    }
 }
 task ball_kick()
 {
   int l=0;
   int l_max=0;
   int t_max=0;
 
  OnFwd(OUT_B); Wait(50);
  ClearTimer(0);
    while(FastTimer(0) <= 400)
  {
   OnFwd(OUT_A);
   OnRev(OUT_C);
  if(SENSOR_1>l_max){l_max=SENSOR_1;t_max=FastTimer(0);}
  }
  OnFwd(OUT_C);
  OnRev(OUT_A);
  Wait(400-t_max);
  Off(OUT_A+OUT_C);
 
  OnRev(OUT_B); Wait(50);
  OnFwd(OUT_A+OUT_C); Wait(10);
  Off(OUT_A+OUT_C);
 }
*感想 [#kefa2b4c]

-ロボットを作ることやプログラミングするのは難しくてパートナーに教えてもらったりして頑張ることができてよかった。最終的にはうまくできなかったのが残念です。(MIYA)
-センサーを三つ、モターを三つしか使えないのが難しかった。それに、タッチセンサーがボールを認識するようにするものが一番難しかった。
- それぞれの変数が何のための変数なのかきちんと説明しましょう。 -- [[松本]] &new{2011-07-24 (日) 08:41:28};

#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS