- 追加された行はこの色です。
- 削除された行はこの色です。
*目次 [#y1e85ce0]
#contents
*課題 [#fa34c355]
**ライントレースロボット [#cee1db93]
**黒い線に沿って動くロボット [#cee1db93]
各チームで作成したコースに沿って動くロボットを作成せよ。ただし、
速さと正確さを追求すること~
交差点で優先側を走っていない場合には、一時停止すること~
前方にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つこと~
コースを3周したら自動的に止まること~
**課題を行うにあたって [#dfa4d531]
以下の動作をするロボットを製作する~
・光センサーを用い、進行状況に応じて方向を変える~
・タッチセンサーによって他のロボットとの接触を感知する~
・交差点の数を認識し、3周すると自動で停止する
*ロボットの説明 [#c3b6a5e6]
#ref(TS3H0074001.JPG)
ラインを挟むように光センサーを取り付けた。~
これによってロボットがラインから外れるのを防止しスムーズにカーブを曲がることができる。
#ref(TS3H0073001.JPG)
写真より、光センサーの幅は約4.0センチ。~
光センサーの幅の調節は難しかった。~
広すぎると隣のコースのラインを読み取ってしまう。~
逆に狭すぎると2つともラインを読み取ってしまった。~
#ref(TS3H0074.JPG)
今回のロボットは前方に光、タッチセンサーを取り付けなければならなかった。~
そのため二つのセンサーうまい具合に取り付けることができず、タッチセンサーの小型化をする必要があった。~
#ref(TS3H0073.JPG)
*コース [#g15159c1]
*プログラム [#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