[[2006a/A7/課題2右]] #contents *課題2の内容・ロボット [#r4a4e260] 光センサーを使って、ライントレース(マジックの黒い線を識別して、その線上を通る)するロボットの製作。さらに、目の前で線路を塞ぐマシンを避けて再び走行を開始するようにプログラムを作ることが課題の目的。以下にプログラムを載せました。 *ライントレース [#kbf4da64] 制作者マッキー task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー1は光センサー SetSensor(SENSOR_3, SENSOR_LIGHT); //センサー3も光センサー while(true) { OnFwd(OUT_A+OUT_C); //左右のモーターを回転 if (SENSOR_3<40) //センサー3の値が40以下の場合 { OnRev(OUT_A);Wait(20); //右モーターを逆回転//0.2秒間 OnFwd(OUT_A); //右モーターを回転 } if (SENSOR_1<40) //センサー1の値が40以下の場合 { OnRev(OUT_C);Wait(20); //左モーターを逆回転//0.2秒間 OnFwd(OUT_C); //左モーターを回転 } } } *ライントレース(その2) 製作者:ガリ [#kbf4da64] task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー1は光センサー SetSensor(SENSOR_3, SENSOR_LIGHT); //センサー3も光センサー while(true) { OnFwd(OUT_A+OUT_C); //A・Cのモーターを回転 if (SENSOR_3<40) //センサー3の値が40以下のならば { OnRev(OUT_A);Wait(50); //Aのモーターを0.5秒間逆回転 OnFwd(OUT_A); //右モーターを回転 } if (SENSOR_1<40) //センサー1の値が40以下ならば { OnRev(OUT_C);Wait(50); //Cのモーターを0.5秒間逆回転 OnFwd(OUT_C); //Cのモーターを回転 } } } *ライントレース&前の車を追い越す [#i74842a6] 制作者マッキー task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー1は光センサー SetSensor(SENSOR_3, SENSOR_LIGHT); //センサー3も光センサー SetSensor(SENSOR_2, SENSOR_TOUCH); //センサー2はタッチセンサー while(true) { OnFwd(OUT_A+OUT_C); //左右のモーターを回転 if (SENSOR_3<40) //センサー3の値が40以下なら { OnRev(OUT_A);Wait(20); //右モーターを逆回転 OnFwd(OUT_A); //右モーターを回転 } if (SENSOR_1<40) //センサー1の値が40以下なら { OnRev(OUT_C);Wait(20); //左モーターを逆回転//0.2秒間 OnFwd(OUT_C); //左モーターを回転 } if (SENSOR_2 == 1) //タッチセンサーがタッチされた場合 { OnRev(OUT_A+OUT_C) ; Wait(20); //左右のモーターを逆回転//0.2秒間 OnFwd(OUT_A) ; Wait(150); //右モーターを回転//1.5秒間 OnFwd(OUT_C); //左モーターも回転 } } } *ライントレース&前の車を追い越すPart2 製作者:ガリ [#i74842a6] task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー1は光センサー SetSensor(SENSOR_3, SENSOR_LIGHT); //センサー3も光センサー SetSensor(SENSOR_2, SENSOR_TOUCH); //センサー2はタッチセンサー while(true) { OnFwd(OUT_A+OUT_C); //A・Cのモーターを回転 if (SENSOR_3<40) //センサー3の値が40以下なら { OnRev(OUT_A);Wait(50); //Aのモーターを0.5秒間逆回転 OnFwd(OUT_A); //Aのモーターを回転 } if (SENSOR_1<40) //センサー1の値が40以下なら { OnRev(OUT_C);Wait(50); //Cのモーターを0.5秒間逆回転 OnFwd(OUT_C); //Cのモーターを回転 } if (SENSOR_2 == 1) //タッチセンサーに触れたとき { OnRev(OUT_A+OUT_C) ; Wait(50); //A・Cのモーターを0.5秒間逆回転 OnFwd(OUT_A) ; Wait(150); //Aのモーター1.5秒間 を回転 OnFwd(OUT_C); //Cのモーターも回転 } } } *作成過程について、工夫したところ [#i3664d01] トトロの輪郭に沿って黒い線上をロボットが動く。 なるべく角を減らしてゆるやかな線になるように心がけた。 2つの光センサーを使って黒い線を挟むようにとりつけた。 ロボットを動かしてみると、二つの光センサーのうち左側についているセンサーの反応が悪かったために、左沿いを走るのに、ロボットが黒い線を見失ってしまうということがあってそれを修正するのが大変だった。黒い線の幅を太くして二つの光センサーを取り付け直すことによりい、問題を解消した。プログラムに特に大きな問題はなかった。最初のプログラムでほとんど黒い線沿いを走ることができた。 (写真がなくてすみません。) *感想 [#aa38c0c9] 最初はロボが不規則に脱線しまくって原因の解明に苦労したり プログラムがうまくいかなかったりで心配だったけど、最終的には皆の協力のおかげか奇跡か知らんけど、なんとか課題をクリアすることはできました。よかった〜 *次回へ向けて [#w64667fd] 今回のライントレースは問題点が多数生じた。本番のロボコンではこのラインとレース、タッチセンサーを使った応用版といえよう。なので、今回の失敗した点を見直して、次回へ生かしたいと思う。 *コメントをどうぞ! [#ba2a222b] 自由に書き込んで! #comment