*ロボットの紹介 [#y20b66da]
+このロボットは見た目は普通でもきっとやるときはやる子です。
+できるだけ小さくすることを目指し作りました。
+缶を挟むアームはひとつだとバランスが悪くなり、缶が倒れることも多いのでアームをふたつにしました。

*コース攻略法 [#d4dffbe8]
+コースの攻略はできなかった。
+最初はタッチセンサーで缶をつかもうと思ったが、缶が軽すぎセンサーが反応しなかったので、タイマーを使い全てを時間で区切って操作しようとした。
+だが、タイマーで区切ったせいか自分のプログラミングのせいかわからないが、ある一定の場所でライントレースをしなくなってしまい最後までゴールする事は出来なかった。

*プログラムの説明 [#lfa418c3]
 #define THRESHOLD 35 //しきい値
 #define HIPOWER 7
 #define LOWPOWER 1
 #define set_power_H SetPower(OUT_AC,HIPOWER);
 #define set_power_L SetPower(OUT_AC,LOWPOWER);
 #define go_forward1 set_power_H;OnFwd(OUT_AC);
 #define go_forward2 set_power_L;OnFwd(OUT_AC); 
 #define turn_left1 set_power_L;\
  OnFwd(OUT_C);OnRev(OUT_A);  //左旋回
 #define turn_left0 set_power_L;\
  OnFwd(OUT_C);Off(OUT_A);  //左回り
 #define turn_right0 set_power_L;\
  OnFwd(OUT_A);Off(OUT_C);  //右回り
 #define turn_right1 set_power_L;\
  OnFwd(OUT_A);OnRev(OUT_C);  //右旋回
 #define moter set_power_L;OnFwd(OUT_B);
 #define STEP 1
 #define nMAX 3
 #define short_break Off(OUT_AC);Wait(10);
 #define CROSS_TIME 30
 #define cross_line go_forward1;\
  Wait(CROSS_TIME);short_break
 #define time0 400
 #define time1 1800
 #define time2 2200
 #define time3 3300
 #define time4 3700
 #define time5 4600
 #define time6 4900
 #define time7 6000

 sub line_trace1()  //普通のライントレース
 {     
        if (SENSOR_2 < THRESHOLD -6) {
       turn_left0;
      } else 
       if (SENSOR_2 < THRESHOLD -3) {
        turn_left1;
      } else if (SENSOR_2 < THRESHOLD +3) {
         go_forward1;
      } else if (SENSOR_2 < THRESHOLD +7) {
         turn_right0;
      } else {
         turn_right1;
        }
         Wait(STEP);
  }

 sub line_trace2()  //急な回転のライントレース
 {     
        if (SENSOR_2 < THRESHOLD -1) {
       turn_left1;
      } else 
       if (SENSOR_2 < THRESHOLD +3) {
        turn_right1;
      } else {
         go_forward1;
        }
         Wait(STEP);
  }

 sub line_cross()  //交差点を通過
 {      
       int nOnline=0;
        while(nOnline < nMAX){
         if (SENSOR_2 < THRESHOLD -6) {
       turn_left1;
       nOnline++;
      } else {
       if (SENSOR_2 < THRESHOLD -3) {
        turn_left0;
      } else if (SENSOR_2 < THRESHOLD +3) {
         go_forward1;
      } else if (SENSOR_2 < THRESHOLD +7) {
         turn_right0;
      } else {
         turn_right1;
       }
     nOnline=0;
       }
       Wait(STEP);
     }
       short_break;
       turn_right1;Wait(nMAX*STEP*10);
       cross_line; 
       nOnline=0;
 }

     task main()
 {
       SetSensor(SENSOR_2,SENSOR_LIGHT);
          ClearTimer(0);

        go_forward1;Wait(35);
        turn_left1;Wait(100);

        while(FastTimer(0) <= time0) {
          line_trace1();  //普通のライントレース
 }
        moter;Wait(50);

        while(FastTimer(0) <= time1) {
          line_trace1();  //普通のライントレース
 } 
        PlaySound(SOUND_UP);

        while(FastTimer(0) <= time2) {
          line_cross();
 }
        PlaySound(SOUND_UP);

        while(FastTimer(0) <= time3) {
          line_trace2();  //急な回転のライントレース
 }
        PlaySound(SOUND_UP);
 
        while(FastTimer(0) <= time4) {
          line_cross();
 }
           PlaySound(SOUND_UP);
 
        while(FastTimer(0) <= time5) {
          line_trace2();  //急な回転のライントレース
 }
           PlaySound(SOUND_UP);
 
        while(FastTimer(0) <= time6) {
          line_cross();
 }
            PlaySound(SOUND_UP);
 
        while(FastTimer(0) <= time7) {
          line_trace1();  //普通のライントレース
 }
            PlaySound(SOUND_UP);

        turn_right1;Wait(100);  //缶を放す動作
        go_forward1;Wait(100);
        turn_left1;Wait(200);
        OnRev(OUT_B);Wait(50);Off(OUT_B);
        OnRev(OUT_AC);Wait(100);

        while(true){
          line_trace2();
    }
 }
*まとめ [#ja9e4202]
+今回の課題では最後まで行く事が出来なかった。

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