各チームで作成したコースに沿って動くロボットを作成せよ。ただし、
速さと正確さを追求すること
交差点で優先側を走っていない場合には、一時停止すること
前方にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つこと
コースを3周したら自動的に止まること
以下の動作をするロボットを製作する
・光センサーを用い、進行状況に応じて方向を変える
・タッチセンサーによって他のロボットとの接触を感知する
・交差点の数を認識し、3周すると自動で停止する
今回の課題は小刻みの方向転換を繰り返すことを想定してタイヤを用いた。
「三輪」という案もでたが他のセンサーのスペースを考慮し、
「四輪」が最も安定すると判断した。
ラインを挟むように光センサーを取り付けた。
これによってロボットがラインから外れるのを防止しスムーズにカーブを曲がることができる。
マジックによる光の反射を考慮して光センサーを限界まで本体に近づけ光が入ってこないようにした。
写真より、光センサーの幅は約4.0センチ。
ラインの幅にあわせ、若干の余裕をもたせた絶妙な距離である。
今回の課題のなかでは光センサーの幅の調節が特に難しかった。
広すぎると隣のコースのラインを読み取ってしまう。
逆に狭すぎると2つともラインを読み取ってしまった。
写真の赤丸で囲ったのが光センサーである。
製作する過程で何度も光センサーの高さ・幅を変更しなければならず
その度、光センサーを組み替えるのは手間がかかった。
そのため「光センサーの高さ・幅を自由に変えられる設計にすればよかった」と後悔している。
今回のロボットは前方に光、タッチセンサーを取り付けなければならなかった。
そのため二つのセンサーうまい具合に取り付けることができず、タッチセンサーの小型化に努めた。
またプログラムの性質上、曲がるときなどに機体が激しく揺れてしまうので、アーム部分も必要最低限まで軽量化を図ったが、結局、誤作動するときはするのでてっとり早く、バネ的な役割をするゴムを強くした。
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); } }
while(SENSOR_2==1) //タッチセンサーが押される(他のロボットと接触) { Rev(OUT_A+OUT_C); //後進 Wait(30); Off(OUT_A+OUT_C); //相手が過ぎ去るのを待つ Wait(255); OnFwd(OUT_C+OUT_A); //移動再開 }
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に達すると停止 }
課題中に浮かんだが実際には使われなかったアイデアを紹介する
光センサーをシャフトに取り付けラインの幅に応じて移動させる。
これにより光センサーの幅を変えやすくなり、
短時間で自分たちの作ったコース以外にも対応させることができる。
つまり汎用性が格段に上がる
今回は光センサーを2個使うためセンサーを3つまでしか使えないこのロボットでは1つのタッチセンサーしか使えない。
そのためダブルセンサーを使うことができずにいた。
だが、上の図を方法を使うことで2つのタッチセンサーを使うことに成功した。
同様の方法で光センサーも一本のコードで接続できる。
欠点は1本のコードにつないだ2つのセンサーはそれぞれを異なるプログラムで動かせないことだ
コメントをお願いします