#contents

*・はじめに [#peffd7fa]
今回の課題は、ライントレースロボットの作成。


自分たちでコースを作成し、出来るだけ早くコース上を正確にライントレースする。


そしてサブルーチンを使用して、出来るだけプログラミングを簡潔に書く。


#ref(robot.png)

今回の自分のミッションは、


◦A地点 → P直進 → Q直進 → Q直進 →R左折 → B地点 この区間をライントレースして


交差点では毎回止まる、である。


*・ロボットの構造の説明 [#afe80240]


今回のロボットは、取り付けた部品がライントレースに必要な部品のみ


しか取り付けていないのでとてもシンプルに仕上げることが出来た。


ロボットの組み立てが簡単であった分、色の明るさを調節するためにその部品を設置する高さを


何回も調整した。


#ref(なんでやねん.png)



*・プログラムの説明 [#pe9277a2]


課題1での反省を活かして定義を上手く使い、また、ロボットの動きを
細かく定義した。


**・定義 [#q588a878]

 #define THRESHOLD 45//光センサーのしきい値
 #define SPEED_H 30//直進する時のスピード
 #define SPEED_L 15//カーブや旋回する時のスピード
 #define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);
 #define go_forward  OnRL(SPEED_H, SPEED_H);
 #define turn_left1  OnRL(SPEED_L, -SPEED_L); 
 #define turn_left0  OnRL(SPEED_L, 0);         
 #define turn_right0 OnRL(0, SPEED_L);       
 #define turn_right1 OnRL(-SPEED_L, SPEED_L); 
 #define STEP 1//一回の動作にかける時間
 #define nMAX 150//通常のカーブとして許容できる繰り返しの最大値
 #define short_break Off(OUT_BC); Wait(1000); // 小休止
 #define CROSS_TIME 70//交差点通過にかかる時間
 #define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME);short_break;


**・サブルーチン [#i44dd8c7]


課題1では使用しなかったサブルーチンでプログラムをまとめる。


sub tyokushinn()
{
  sub tyokushinn()
  {
  SetSensorLight(S3);
  int nOnline=0; //続けて黒になった回数(これ以降カウンタとする)

  
   //黒を続けてnMAX回繰り返さない間、通常のライントレースをする 
    while (nOnline < nMAX) {
      if (SENSOR_3 < THRESHOLD-15) {
        turn_left1;
        nOnline++;  // カウンタを増やす
      } else {
        if (SENSOR_3 < THRESHOLD-7) {
          turn_left0;
        } else if (SENSOR_3 < THRESHOLD+7) {
          go_forward;
        } else if (SENSOR_3 < THRESHOLD+15) {
          turn_right0;
        } else {
          turn_right1;
        }
        nOnline=0;  // カウンタをリセット
      }
      Wait(STEP);
    }
    short_break; // 小休止

    PlaySound(SOUND_UP);
    Wait(1000);//交差点で止まったら1秒間音を鳴らす
}
  }

task main()
{
  task main()
  {

  tyokushinn();//1つ目の交差点まで進む
  OnFwd(OUT_BC,50);
  Wait(250);
  Off(OUT_BC);
  OnFwd(OUT_B,30);
  Wait(200);
  Off(OUT_B);



  tyokushinn();//2つ目の交差点まで進む
  OnFwd(OUT_BC,50);
  Wait(100);
  Wait(OUT_BC);



  tyokushinn();//3つ目の交差点まで進む
  OnFwd(OUT_BC,50);
  Wait(100);
  Off(OUT_BC);


  tyokushinn();4つ目の交差点まで進む
  OnFwd(OUT_BC,50);
  Wait(200);
  Off(OUT_BC);
  OnFwd(OUT_B,30);
  Wait(300);
  Off(OUT_B);
}


*・課題の結果 [#p1971303]

今回の自分のミッションである、A地点からB地点までの移動にかかった時間は



約1分45秒でした。目標時間が1分30秒を切ることだったので残念でした。



もう少し直進とカーブ・旋回する時のスピードを調整したかったです。



それと図で示した場所でロボットが何度も交差点と判断しないことがあった



ので改善したかった。



#ref(robot3.png)


*・感想 [#wef5f4dc]
今回は、ロボットの組み立て、プログラミングの両方ともシンプルにできたと思います。


サブルーチンも自分なりには使いこなせていたと思います。しかし、ミッションの成功率が


8割がた成功したものの2割は失敗していました。


到達時間もかかりすぎてしまったのでもう少し改善したかった。


この反省を次に生かしたい。

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