#contents
*課題2:黒い線に沿って動くロボットの作成 [#u7ac9691]
光センサーを使って黒い線に沿って動くロボットを作る。
タッチセンサーを使って他のロボットとぶつかったら道を譲るようにする。
交差点で優先側を走っていないときには、一時停止する。
 
**メンバー紹介 [#t22ae3b2]

小鉢   ロボット担当 

コリン  ホムペ担当 

プログラムは二人で協力して考えて、コリンが入力してます。
実際、コリンは混乱することが多いので、小鉢がかなり考えてくれてます。感謝☆

**使用するロボットについて [#cf08e12a]
 
#ref(2008a/A4/課題2左/2-robo.JPG,50%,全体図)

↑全体図  カブトムシみたい。角のついた方が前です。

見ての通りタイヤを使ったロボットです。

前回の似顔絵ロボットで、キャタピラを使ったのだけど、電池の消耗が激しくて大変だったので、反省してタイヤにした。


#ref(2008a/A4/課題2左/2-ura.JPG,50%,裏から見た図)

↑裏から見た図

青いブロック二つが光センサで、前方に黄色いブロックのついた灰色のブロックがタッチセンサ。

向かって右の光センサはセンサ端子3に接続、向かって左の光センサはセンサ端子1に接続。
向かって左の光センサはセンサ端子3に接続、向かって右の光センサはセンサ端子1に接続。
光センサの間は、黒いラインを挟めるくらいにあけた。ラインから外れると黒い色を感知したセンサ側が白い色の方にいくので、二つセンサを付けることで、ラインとレースを安定したものにした。

タッチセンサはセンサ端子2に接続。

向かって右のタイヤはA出力のモータに接続、向かって左のタイヤはC出力のモータに接続。

**コース [#ff776a48]

#ref(2008a/A4/課題2左/michi.jpg,150%,コース全体図)

急なカーブが多い。
急なカーブが多いコース。

曲がるときに、本来の道に近い道の黒い色を感知してしまうことが多いので、難易度が高いコースになった。特に、上部の交差点の優先道路じゃない方で、一時停止してから発進するときが、難しい。

**プログラム [#a8de38c5]

 task main()
 {
 SetSensor(SENSOR_2 , SENSOR_TOUCH);   //センサ端子2に接続されたセンサがタッチセンサと設定       
 SetSensor(SENSOR_1 , SENSOR_LIGHT);   //センサ端子1に接続されたセンサが光センサと設定   
 SetSensor(SENSOR_3 , SENSOR_LIGHT);   //センサ端子3に接続されたセンサが光センサと設定

 SetPower(OUT_A,7);   //A出力のモータの出力を7にする
 SetPower(OUT_C,7);   //C出力のモータの出力を7にする

 while(true)
 {
 OnFwd(OUT_A+OUT_C);   //A出力とC出力のモータを正回転させる


 if(SENSOR_1 < 40)   //光センサの値が40未満になったらC出力のモータを負回転させるように設定
 if(SENSOR_1 < 40)   //左の光センサの値が40未満になったらC出力のモータを負回転させるように設定
 {            //ロボットの右側が黒いところから外れたら左に回転する。
 OnRev(OUT_C);     
 }

 if(SENSOR_3 < 40)   //光センサの値が40未満になったらA出力のモータを負回転させるように設定
左の光センサが黒い色を感知したら左に曲がる。

 if(SENSOR_3 < 40)   //右の光センサの値が40未満になったらA出力のモータを負回転させるように設定
 {            //ロボットの左側が黒いところから外れたら右に回転する。
 OnRev(OUT_A);
 }

 if((SENSOR_1 < 40)&&(SENSOR_3 < 40))
右の光センサが黒い色を感知したら右に曲がる。

 if((SENSOR_1 < 40)&&(SENSOR_3 < 40)) //光センサの値が40未満になったら
 {
 Off(OUT_A+OUT_C);
 Off(OUT_A+OUT_C);    //A出力とC出力のモータを1秒止めてから
 Wait(100);
 OnFwd(OUT_A+OUT_C);
 Wait(100);
 OnFwd(OUT_A);      //A出力のモータを0.4秒正回転させる
 Wait(40);
 OnFwd(OUT_A+OUT_C);   //A出力とC出力のモータを1・3秒正回転させる
 Wait(130);       
 }

光センサが両方黒い色を感知したら一秒止まる。コースの関係で、微調整をしなければならないので、少し位置を変える。


 if(SENSOR_2 == 1)
 {
 PlaySound(SOUND_LOW_DOWN);
 PlaySound(SOUND_LOW_BEEP);
 Wait(50);
 OnRev(OUT_A+OUT_C);
 Wait(50);
 Off(OUT_A+OUT_C);
 Wait(300);

 }
 }
 Wait(2000);
 Float(OUT_A+OUT_C);
 }



**制作してみての感想 [#c62b2f32]

<工夫した点>

プログラムをなるべくわかりやすくしました。
タッチセンサのぶつかるところを黄色いブロックを使って広くした(カブトムシの角の部分)ことで、前方の障害物を広く感知することができるようにした。
プログラムをなるべくわかりやすくしました。もう一台のロボットにぶつかったときに、一度後退することでスムーズな行き違いができるようにした。優先道路を造る際、優先じゃない方の道路で、道路が切れる部分に黒い横棒を入れた。それによって、優先道路じゃない道路に来たら一時停止するプログラムが作りやすくなった。

<苦労した点>

タッチセンサと光センサを付けるとき。着ける位置が近かったので、タッチセンサと光センサがぶつかってタッチセンサがうまく反応しなかった。タッチセンサの位置を変えるのに苦労した。
タッチセンサと光センサを付けるとき。最初は、着ける位置が近かったので、タッチセンサと光センサがぶつかってタッチセンサがうまく反応しなかった。タッチセンサの位置を変えるのに苦労した。
三周でプログラムの実行を止めるようにするのが難しかった。
上でも書いたが、コースの道が狭くなっているところで、違う道(の黒い部分)を光センサが感知してしまうことが多かったので、プログラムで微調整するのが大変だった。


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


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