[[2017a/Member]]
#contents
*今回の課題について [#v9709070]
#ref(./course1.png,100%,a) 
1  E右折(SOUND_UP)

2 P一時停止(SOUND_DOWN)&左折

3 Q(SOUND_UP)&直進

4 R(SOUND_UP)&左折
 
5 T一時停止(SOUND_DOWN)&直進

6 T一時停止(SOUND_DOWN)&直進

7 H(SOUND_UP)

8 G(SOUND_UP)

9 S一時停止(SOUND_DOWN)&左折

10 P直進(SOUND_UP)

11 Q左折(SOUND_UP)

12 F(SOUND_UP)

13 E直進

14 A停止(SOUND_DOWN) 

という道順で進むロボットを作らなければならない。

ただし、以下の条件を満たさなければならない。

 ・なるべく速く正確に動くロボットになるように工夫すること。

 ・一時停止の交差点および丁字路ではSOUND_DOWNを鳴らした後、1秒間停止すること。

 ・直角コーナーおよび一時停止が不要は丁字路ではSOUND_UPを鳴らし、停止しないで進むこと。

 ・ロボットはサイズは、15cm四方以内とする(高さは無制限)。

 ・交差点、丁字路、直角コーナーについては、差し掛かった時点で判別するものとし、予め設定した走行時間のみで判定したり、走行距離のみで判定してはならない。
   
*ロッボトについて [#f4d447b5]
**概形 [#r0397754]
#ref(./senn2.jpg,10%,a)
15cm四方の枠内に収めなければならないという条件が存在したのでできるだけコンパクトなロボットを作りました。
**車輪 [#pd458f58]
#ref(./senn3.jpg,10%,a)
最初は前二輪、後一輪の三輪にしていましたが、後ろにタイヤをつけると小回りが利かなくなってしまうので、車輪を外し、後ろは支えるだけにしました。
**センサー [#xc1d8db6]
#ref(./senn1.jpg,10%,a)
センサーが本体から遠すぎたり近すぎたり紙から遠かったりするとすると、ロボットの動きが毎回変わってしまうので、センサーの位置を適当な位置に配置しました。

*プログラミングについて [#c422dabd]

 #define go_straight  OnFwd(OUT_AC); Wait(25); Off(OUT_AC);     //交差点直進

 #define cross_right  Off(OUT_AC); Wait(3); OnFwd(OUT_A );     //右折
 #define turn_right  Off(OUT_AC); Wait(3); OnFwd(OUT_A); OnRev(OUT_C);      //右回転
 #define right_angle  OnFwd(OUT_AC); Wait(25); Off(OUT_AC); OnFwd(OUT_A); OnRev(OUT_C); Wait(52);  Off(OUT_AC);     //右回転(直角)

 #define cross_left  Off(OUT_AC); Wait(3); OnFwd(OUT_C);     //左折
 #define turn_left  Off(OUT_AC); Wait(3); OnFwd(OUT_C); OnRev(OUT_A);     //左回転
 #define left_angle  OnFwd(OUT_AC); Wait(25); Off(OUT_AC); OnFwd(OUT_C); OnRev(OUT_A); Wait(77); Off(OUT_AC);     //右回転(直角)



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

  int a=0;
  while( a < 5 ){
   if(SENSOR_2 >= 50){
    turn_left; 
    } else if(SENSOR_2 >= 45 ){
    cross_left;
    } else if(SENSOR_2 >= 37 ){
    cross_right; 
    } else if(SENSOR_2 >= 30 ){
    turn_right;
    a++;
    }
   }     //ここまでE

  PlaySound(SOUND_UP);

  right_angle;
  int b=0;
  while( b < 4 ){
   if(SENSOR_2 >= 50){
    turn_left; 
    } else if(SENSOR_2 >= 45 ){
    cross_left;
    } else if(SENSOR_2 >= 40 ){
    cross_right;
    } else if(SENSOR_2 >= 30 ){
    turn_right;
    b++;
    }
   }     //ここまでP

  Off(OUT_AC);
  Wait(100);
  PlaySound(SOUND_DOWN);

  left_angle;
  int c=0;
  while( c < 4 ){
   if(SENSOR_2 >= 50){
    turn_right; 
    } else if(SENSOR_2 >= 45 ){
    cross_right;
    } else if(SENSOR_2 >= 40 ){
    cross_left; 
    } else if(SENSOR_2 >= 30 ){
    turn_left;
    c++;
    }
   }     //ここまでQ

  go_straight;
  int d=0;
  while( d < 4 ){
   if(SENSOR_2 >= 50){
    turn_right; 
    } else if(SENSOR_2 >= 45 ){
    cross_right;
    } else if(SENSOR_2 >= 40 ){
    cross_left; 
    } else if(SENSOR_2 >= 30 ){
    turn_left;
    d++;
    }
   }     //ここまでR

  go_straight;
  int e=0;
  while( e < 5 ){
   if(SENSOR_2 >= 50){
    turn_left; 
    } else if(SENSOR_2 >= 45 ){
    cross_left;
    } else if(SENSOR_2 >= 37 ){
    cross_light; 
    } else if(SENSOR_2 >= 30 ){
    turn_right;
    e++;
    }
   }     //ここまでT

  PlaySound(SOUND_DOWN);

  go_straight;
  int f=0;
  while( f < 6 ){
   if(SENSOR_2 >= 50){
    turn_left; 
    } else if(SENSOR_2 >= 45 ){
    cross_left;
    } else if(SENSOR_2 >= 37 ){
    cross_right; 
    } else if(SENSOR_2 >= 30 ){
    turn_right; 
    f++;
    }
   }     //一周してTに戻る
  
  PlaySound(SOUND_DOWN);

  go_straight;
  int g=0;
  while( g < 11 ){
   if(SENSOR_2 >= 50){
    turn_left; 
    } else if(SENSOR_2 >= 45 ){
    cross_left;
    } else if(SENSOR_2 >= 37 ){
    cross_right; 
    } else if(SENSOR_2 >= 30 ){
    turn_right;
    g++;
    }
   }     //ここまでH
 
  PlaySound(SOUND_UP);

  right_angle;
  int h=0;
  while( h < 60 ){
   if(SENSOR_2 >= 50){
    turn_left; 
    } else if(SENSOR_2 >= 45 ){
    cross_left;
    } else if(SENSOR_2 >= 37 ){
    cross_right; 
    } else if(SENSOR_2 >= 30 ){
    turn_right;
    h++;
    }
   }     //ここまでG
 
  PlaySound(SOUND_UP);

  right_angle;
  int i=0;
  while( i < 3 ){
   if(SENSOR_2 >= 50){
    turn_left; 
    } else if(SENSOR_2 >= 45 ){
    cross_left;
    } else if(SENSOR_2 >= 37 ){
    cross_right; 
    } else if(SENSOR_2 >= 30 ){
    turn_right;
    i++;
    }
   }     //ここまでS

  PlaySound(SOUND_DOWN);
  Off(OUT_AC);
  Wait(100);

  left_angle;
  int j=0;
  while( j < 4 ){
   if(SENSOR_2 >= 50){
    turn_right; 
    } else if(SENSOR_2 >= 45 ){
    cross_right;
    } else if(SENSOR_2 >= 40 ){
    cross_left; 
    } else if(SENSOR_2 >= 30 ){
    turn_left;
    j++;
    }
   }     //ここまでP

  PlaySound(SOUND_UP);

  go_straight;
  int k=0;
  while( k < 4 ){
   if(SENSOR_2 >= 50){
    turn_right; 
    } else if(SENSOR_2 >= 45 ){
    cross_right;
    } else if(SENSOR_2 >= 40 ){
    cross_left; 
    } else if(SENSOR_2 >= 30 ){
    turn_left;
    k++;
    }
   }     //ここまでQ

  PlaySound(SOUND_UP);

  go_straight;
  int l=0;
  while( l < 5 ){
   if(SENSOR_2 >= 50){
    turn_left; 
    } else if(SENSOR_2 >= 45 ){
    cross_left;
    } else if(SENSOR_2 >= 37 ){
    cross_right; 
    } else if(SENSOR_2 >= 30 ){
    turn_right;
    l++;
    }
   }     //ここまでF

  PlaySound(SOUND_UP);

  right_angle;
  int m=0;
  while( m < 10 ){
   if(SENSOR_2 >= 50){
    turn_left; 
    } else if(SENSOR_2 >= 45 ){
    cross_left;
    } else if(SENSOR_2 >= 37){
    cross_right; 
    } else if(SENSOR_2 >= 30 ){
    turn_right;
    m++;
    }
   }     //スタート地点に戻る

  Off(OUT_AC);
  PlaySound(SOUND_DOWN);
 }     //停止して終了

* 結果 [#g5b4d5d4]
前回の課題同様上手くいく時と上手くいかない時がありました。上手く行かなっかた時のほうが多かったのですが最終的には上手く行きました。一番難易度が高かったのは交差点を直進するのか、曲がるのかを判断させるプログラミングを組むことでした。

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