*目次 [#y1e85ce0]
#contents
*課題 [#fa34c355]
**黒い線に沿って動くロボット  [#cee1db93]
各チームで作成したコースに沿って動くロボットを作成せよ。ただし、

速さと正確さを追求すること~
交差点で優先側を走っていない場合には、一時停止すること~
前方にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つこと~
コースを3周したら自動的に止まること~

**課題を行うにあたって [#dfa4d531]
以下の動作をするロボットを製作する~

・光センサーを用い、進行状況に応じて方向を変える~

・タッチセンサーによって他のロボットとの接触を感知する~

・交差点の数を認識し、3周すると自動で停止する

~
*コース [#h02bc282]
*ロボットの説明 [#c3b6a5e6]
#ref(TS3H0074001.JPG)
ラインを挟むように光センサーを取り付けた。~
マジックによる光の反射を考慮して光センサーを限界まで本体に近づけ光が入ってこないようにした。~
これによってロボットがラインから外れるのを防止しスムーズにカーブを曲がることができる。

#ref(TS3H0073001.JPG)
写真より、光センサーの幅は約4.0センチ。~
ラインの幅にあわせ、若干の余裕をもたせた絶妙な距離である。~
今回の課題のなかでは光センサーの幅の調節が特に難しかった。~
広すぎると隣のコースのラインを読み取ってしまう。~
逆に狭すぎると2つともラインを読み取ってしまった。~

~
#ref(TS3H0074.JPG)
今回のロボットは前方に光、タッチセンサーを取り付けなければならなかった。~
そのため二つのセンサーうまい具合に取り付けることができず、タッチセンサーの小型化に努めた。~

~
#ref(TS3H0073.JPG)




*プログラム [#m328d11c]
**プログラムの概略 [#t0382f98]
#ref(図1修正.png)
**ラインに沿って進むプログラム [#j8bf0167]

 task main ()
 {
    SetSensor(SENSOR_1, SENSOR_LIGHT);            //センサー1に光センサーをセット
    SetSensor(SENSOR_2, SENSOR_TOUCH);                        //センサー2にタッチセンサーをセット
    SetSensor(SENSOR_3, SENSOR_LIGHT);                        //センサー3に光センサーをセット
 while(true)
 {
 while (SENSOR_2==0)
 {
      if((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD))    //左右の光センサーがどちらもラインを感知しない場合
          {   OnFwd(OUT_A+OUT_C);                             //前進
          }
      if(SENSOR_3 < THRESHOLD)                                //右側の光センサーがラインを感知した場合
          { OnFwd(OUT_A);                                     //右に進路変更
            OnRev(OUT_C);
          }
      if(SENSOR_1 < THRESHOLD)                                //左側の光センサーがラインを感知した場合
          { OnFwd(OUT_C);                                     //左に進路変更
            OnRev(OUT_A);
          }
      if((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD))    //左右の光センサーがラインを感知した場合(交差点)
          {   Off(OUT_A+OUT_C)  ;                             //一時停止
               Wait(50);
              OnFwd(OUT_A+OUT_C) ;                            //前進&交差点を渡る
              Wait(70);
          }
    }

**他のロボットと接触した時のプログラム [#k42a2f2d]
 while(SENSOR_2==1)                                           //タッチセンサーが押される(他のロボットと接触)
 {
   Rev(OUT_A+OUT_C);                                          //後進
   Wait(30);
   Off(OUT_A+OUT_C);                                          //相手が過ぎ去るのを待つ
   Wait(255);
   OnFwd(OUT_C+OUT_A);                                        //移動再開
  }

**3周すると停止するプログラム [#s3ac052e]
 task main()
 {
 int count;                                                   //変数として「count」を定義
 count=0;                                                     //「count」の初期値を0とする
 int count_max=X;                                             //[X]には任意の値を代入(3周するなかでの交差点の総数)
    while (count<count_max);                                         //X以下のときの動作
    { if((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD))
          {   Off(OUT_A+OUT_C)  ;
              Wait(50);
              OnFwd(OUT_A+OUT_C) ;
              Wait(70);
              count=count+1;                                  //交差点を通過するたびに「count」の値が1ずつ増加
          }
    }
 Off(OUT_A+OUT_C);                                            //「count」の値がXに達すると停止
 }
 
 

*コメント [#q56f6b17]
コメントをお願いします
#comment

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