*課題2 [#of71d595]
黒い線に沿って動き紙コップを移動させるロボットを製作せよ。
#ref(2017b/Member/shun/Mission2/2017b-mission2.png,50%,ロボット)
Aをスタート→Bを直進→Cを右折→Fを直進→Rを左折(一時停止)→Pを直進→X地点の紙コップを取得してコースに戻る→Qを左折→Sを直進(一時停止)→Y地点に紙コップを置いてコースに戻る→Sを直進(一時停止)→Fを左折(一時停止)→Cを右折(一時停止)→D地点でゴール
*ロボットの説明 [#gd0fe1e7]
トレースの際にロボットが安定するようにモーターを取り付けた後輪2つに加え自由に動く前輪を2つ取り付けた。 [#r3fe7d8e]
#ref(2017b/Member/shun/Mission2/IMG_1885.JPG,30%,ロボット)
光センサーがロボットの中心部にできるだけ近づくように努力した。
また後輪は一番小さいギアと一番大きいギアをかみ合わせることでタイヤの回転を遅くした。
#ref(2017b/Member/shun/Mission2/IMG_1884.JPG,30%,ロボット)
コップを取るアームは下のように囲いを作りそれを上下に移動することで取れるようにした。
#ref(2017b/Member/shun/Mission2/IMG_1886.JPG,30%,ロボット)


*プログラミング [#tceae947]
**定義 [#r752f369]
スムーズなライントレースを可能にするために5段階の移動方法を定義した。
 #define go_straight OnFwd(OUT_AC); SetPower(OUT_AC,5);  //直進
 #define turn_right OnFwd(OUT_A);OnRev(OUT_C);SetPower(OUT_AC,5);  //右旋回
 #define turn_left OnFwd(OUT_C);OnRev(OUT_A);SetPower(OUT_AC,5);  //左旋回
 #define sift_right OnFwd(OUT_A);Off(OUT_C);SetPower(OUT_A,5);  //右折
 #define sift_left OnFwd(OUT_C);Off(OUT_A);SetPower(OUT_C,5);  //左折
**サブルーチン [#ybcfffef]
***トレース(線の右側) [#i3bc3866]

 sub torace()
 {
     SetSensor(SENSOR_2,SENSOR_LIGHT);
     SetSensorMode(SENSOR_2,SENSOR_MODE_RAW);
          ClearTimer(0);
        while(FastTimer(0)<32)
     {
         if(SENSOR_2>830)
          {
           turn_right;
          }
         else
          {
            if(SENSOR_2>800){
              sift_right
              ClearTimer(0);
            }else if(SENSOR_2<750){
              turn_left
              ClearTimer(0);
            }else if(SENSOR_2<770){
               sift_left
               ClearTimer(0);
            }else{
                 go_straight
                 ClearTimer(0);
            }
      }
    }
     Off(OUT_AC);
 }

***トレース(線の左側) [#g0fd5f8e]
 sub torace_left()
 {
     SetSensor(SENSOR_2,SENSOR_LIGHT);
     SetSensorMode(SENSOR_2,SENSOR_MODE_RAW);       
           ClearTimer(0);
        while(FastTimer(0)<32)
     {
         if(SENSOR_2>820)
          {
           turn_left;
          }
         else
          {
            if(SENSOR_2>800){
              sift_left
              ClearTimer(0);
            }else if(SENSOR_2<760){
              turn_right
              ClearTimer(0);
            }else if(SENSOR_2<780){
               sift_right
               ClearTimer(0);
            }else{
                 go_straight
                 ClearTimer(0);
             }
      } 
    }
      Off(OUT_AC);
 }


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