[[2011a]]

#contents

*課題 [#xbc01a5d]
課題2で作ったコース上にランダムに3個のテニスボールをおいて、ボールを中央のランタンに向かって運ぶまたは転がすロボットを作る。
**条件 [#m8d700fc]
-ボールのあった位置から直接転がす。
-運ぶ場合はボールのあった位置から最短距離で運ぶ。
-ロータリーの中央にランタンを置き、3個のボールをランダムに置く。


*メンバー [#b5ec64df]
-大丈V(ボールを転がす)

*ロボット [#s1bf7da0]
-最大の特徴は、ボールの捕らえ方。最初はアームでボールを囲う形だったが、タッチセンサーがうまく動作しなかったのでキャタピラでしっかりと捕らえるようにした。


*プログラム [#kf013ad2]
**大丈V [#hb9ab161]
 int lmax ;                       //光の最大値
 int tmax ;                       //光が最大の時間


 task main()
 {
    SetSensor(SENSOR_1,SENSOR_LIGHT);
    SetSensor(SENSOR_2,SENSOR_LIGHT);
    SetSensor(SENSOR_3,SENSOR_TOUCH);
 
    repeat(3){                     //以下を3回繰り返す  
        while(SENSOR_3 == 0){
            if(SENSOR_1 < 40){             //黒線を踏んだら
                OnFwd(OUT_A+OUT_B);Off(OUT_C);       //コンベアを回しながらライントレース
             }else{
              Off(OUT_A);OnFwd(OUT_B);OnFwd(OUT_C);
                   }
          }
 
      if(SENSOR_3 == 1){                //タッチセンサーが反応したら
            Off(OUT_A+OUT_B+OUT_C);
            lmax = 0;                  //最大値をリセット
            ClearTimer(0);               //タイマーをリセット
            while(FastTimer(0) < 340){         //340は1回転の時間
                OnFwd(OUT_A);OnRev(OUT_C);       //1周して
                if(SENSOR_2 > lmax){          //光の最大値を探す
                   SENSOR_2 == lmax;
                   tmax = FastTimer(0);         //光が最大だった時間を記憶
                    }
               }
        OnRev(OUT_A);                 //最大のところまで回転
        OnFwd(OUT_C);
        Wait((340-tmax));
        Off(OUT_A+OUT_C);
 
        OnRev(OUT_B);Wait(150);                        //ボールを前に出す
        OnRev(OUT_A);                 //ボールの横につき
        OnFwd(OUT_C);
        Wait(60);
        OnFwd(OUT_A+OUT_C);Wait(50);
        OnFwd(OUT_A);OnRev(OUT_C);Wait(150);      //打つ!
        OnFwd(OUT_A+OUT_C);until(SENSOR_1 < 40);       ライントレースに戻る
        OnFwd(OUT_A+OUT_C);until(SENSOR_1 < 40);       //ライントレースに戻る
    }
 }

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS