2011a

チームメンバー

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

課題内容

課題2で作ったコース上にランダムに3個のテニスボールをおいて、ボールを中央のランタンに向かって運ぶまたは転がすロボットを作る。 ただし

  • 転がす場合はボールのあった位置から直接転がす。(押さずに運んだりしないこと)
  • 運ぶ場合はボールのあった位置から最短距離で運ぶ。
  • ロータリーの中央にランタンを置き、3個のボールをランダムに置く。

ju.jpg

ロボット紹介

全体

1.JPG

ハサミを2つ使うことによりしっかりと安定したボール運びをできるようにしました。

アーム部分

DSC_0739.jpg

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

センサーの位置

DSC_0737.jpg

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

DSC_0738.jpg

DSC_0745.jpg

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

プログラミング

オ(ボールを運ぶ)

#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(ボールを転がす)

#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)                //1周周り一番明るいところを測定する
 {
  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);
}

感想

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


添付ファイル: file1.JPG 209件 [詳細] fileDSC_0745.jpg 162件 [詳細] fileDSC_0740.jpg 93件 [詳細] fileDSC_0739.jpg 169件 [詳細] fileDSC_0738.jpg 181件 [詳細] fileDSC_0737.jpg 169件 [詳細] fileDSC_0736.jpg 119件 [詳細] fileju.jpg 167件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-08-05 (金) 16:04:41 (2941d)