2017a/Member

目次

課題2

・下の図のようなコースを各チームで作成し、「ミッション」を遂行するためのロボットを作成せよ。

2017a-mission2.png

コース

私は今回左回りのプログラムを作った。

・Aスタート

・E直進

・F(SOUND_UP) 

・Q一時停止(SOUND_DOWN)&左

・R直進(SOUND_UP)

・S左折(SOUND_UP)

・G(SOUND_UP)

・H(SOUND_UP)

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

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

・R一時停止(SOUND_DOWN)&左折

・S直進(SOUND_UP)

・P左折(SOUND_UP)

・E一時停止(SOUND_DOWN)&左折

・A停止(SOUND_DOWN)

ロボットについて

私たちは基本構造は変えずに少しセンサーの位置をロボットに近づけた。

はじめはタイヤの間に光センサーを取り付けていたが、ロボットの陰で光センサーが黒と判断してしまったため写真のような位置にセンサーを取り付けた。

光センサーの後ろにある2本の棒は光センサーがずれないように支えるものである。

line_trace1.jpg
line_trace2.jpg

プログラムについて

概要

・私は黒線の左側をトレースするようにプログラミングしたため、光センサーが黒と判断した場合は 左に、白と判断した場合は右にそれぞれ曲がり、中間は直進するようにした。

・交差点では黒が続いたときのみタイマーをリセットせず、ある一定の時間を超えたときに止まるタイマー方式をとった。

・F,G,E地点の直角カーブとQ,R,S,P地点のカーブとでは黒が続く時間が異なるためサブルーチンを2つ作った。

プログラム

定義

 #define THRESHOLD 53  //しきい値を53に設定
 #define speed_F 20//前進するときの速さ
 #define speed_T 30//回転するときの速さ
 #define turn_left OnRev(OUT_C,speed_T);OnFwd(OUT_B,speed_T);//左回転
 #define turn_right OnRev(OUT_B,speed_T);OnFwd(OUT_C,speed_T);//右回転
 #define go_Fwd OnFwd(OUT_BC,speed_F);//前進
 #define STEP 1//一回の動作の時間

サブルーチン

 sub line_trace1() //直角カーブ用

  {
    SetSensorLight(S1);
    long t0 = CurrentTick();
    while (CurrentTick()-t0 < 150) {  //黒が0.15秒以上続いたとき停止する
    if (SENSOR_1 < THRESHOLD -12) { //黒に反応
      turn_left;
    } else if (SENSOR_1 > THRESHOLD +5) {  //白に反応
      turn_right;
      t0 = CurrentTick() //タイマーリセット
    } else { //中間
      go_Fwd;
      t0 = CurrentTick()
     }  
    Wait(STEP);
    }
  } 

 sub line_trace2()//緩やかなカーブ用  

 {
  SetSensorLight(S1);
  long t0 = CurrentTick();
  while (CurrentTick()-t0 < 100) {  //黒が0.1秒以上続くと停止する
    if (SENSOR_1 < THRESHOLD -12) { 
      turn_left;
    } else if (SENSOR_1 > THRESHOLD +5) { 
      turn_right;
      t0 = CurrentTick()
    } else { 
      go_Fwd;
      t0 = CurrentTick()
     }  
    Wait(STEP);
    }
  }

タスクメイン

 task main()
 {

AからFまでのプログラム

   go_Fwd;
   Wait(500);
    line_trace1();
   PlaySound(SOUND_UP);
   go_Fwd;
   Wait(500);
   Off(OUT_BC);

FからQまでのプログラム

    line_trace1();
   Off(OUT_BC);
   PlaySound(SOUND_DOWN);
   go_Fwd;
   Wait(200);
   Off(OUT_BC);
   turn_left;
   Wait(650);
   Off(OUT_BC);
   go_Fwd;
   Wait(200);

QからRまでのプログラム

    line_trace2();
   Off(OUT_BC);
   PlaySound(SOUND_UP);
   go_Fwd;
   Wait(600);

RからSまでのプログラム

    line_trace2();
   Off(OUT_BC);
   PlaySound(SOUND_UP);

SからGまでのプログラム

    line_trace1();
   PlaySound(SOUND_UP);
   Off(OUT_BC);
   go_Fwd;
   Wait(300);
   Off(OUT_BC);
   turn_left;
   Wait(100);

GからHまでのプログラム

    line_trace1();
   turn_left;
   Wait(1000);
    line_trace1();
   PlaySound(SOUND_UP);
   go_Fwd;
   Wait(500);

HからTまでのプログラム

    line_trace1();
   Off(OUT_BC);
   PlaySound(SOUND_DOWN);
   go_Fwd;
   Wait(200);

TからTまでのプログラム

    line_trace1();
   Off(OUT_BC);
   PlaySound(SOUND_DOWN);
   go_Fwd;
   Wait(500);

TからRまでのプログラム

    line_trace2();
   Off(OUT_BC);
   PlaySound(SOUND_DOWN);
   go_Fwd;
   Wait(200);
   Off(OUT_BC);
   turn_left;
   Wait(600);
   Off(OUT_BC);
   go_Fwd;
   Wait(200);

RからSまでのプログラム

    line_trace2();
   Off(OUT_BC);
   PlaySound(SOUND_UP);
   go_Fwd;
   Wait(600);

SからPまでのプログラム

    line_trace2();
   PlaySound(SOUND_UP);

PからEまでのプログラム

    line_trace1();
   PlaySound(SOUND_UP);
   go_Fwd;
   Wait(300);
   Off(OUT_BC);

EからAまでのプログラム

    line_trace1();
   Off(OUT_BC);
   PlaySound(SOUND_DOWN);
   go_Fwd;
   Wait(500);
   Off(OUT_BC);
  }

感想

今回のプログラミングで苦労したのはR地点の通過とG地点からH地点までのS字カーブだった。

特にS字カーブでは曲がり切る前にセンサーが黒線を超えて白に反応してしまい、うまくいかなかったため、そこを修正することにかなりの時間を要した。

しかしプログラム通りにロボットが動いたので時間をかけてよかった。

また今回はあまり速度を出せなかったがもう少し速度を出すにはどうすればいいか考えてみようと思う。


添付ファイル: fileline_trace2.jpg 42件 [詳細] fileline_trace1.jpg 50件 [詳細] file2017a-mission2.png 53件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-06 (日) 12:37:45