[[2006b/A3]] *課題2 [#yc400578] 黒い線に沿って動くロボットを作成する。そして一つの周回コースを2台のロボットが逆向きに走行すること想定し、以下の2種類のプログラムを作成する。 + 相手のロボットに接触したら反転して進む。 + 相手のロボットに接触したらそのロボットを右側から避けて通り、再びライン上に戻って進む。 *ロボットの作成に関して [#la44d945] 今回のロボットは光センサーとタッチセンサーを組み込むロボットです。最初は2つの光センサーで線上を走らせようとしたが線が細いためうまくとらえることができずなかったため、線を光センサーで挟み込んで進むようセンサーを設置しました。タッチセンサーは教科書に載っているシングルバンパーを搭載させました。比較的簡単にできました。 *苦労した点 +工夫した点[#fa7068d4] 1. プログラムができ、いざ走らせてみるとあまり線の上を走ってくれなかった。何度もコースをはみ出してしまい悩む一方だった。始めはカーブを曲がるとき片方のタイヤを止めもう片方のタイヤだけまわしていたが、後に両方をまわすようにして急カーブを乗りきることができた。 2. またロボットが反転して進む場合反転しても線を挟むことができなかったため回転している最中に光センサーが線を認知するまで回転するようプログラムすることが大変だった。 3. 先生のご指摘により、光センサ−が離れすぎているため、反応が悪いことが判明した。これによりうまく曲がれるようになった。先生に感謝!! *プログラム [#m85b9616] まず、相手に接触したときに反転して進むプログラムです。 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); while(true) { OnFwd(OUT_A+OUT_C); if (SENSOR_1<40) { OnFwd(OUT_C); OnRev(OUT_A); } if (SENSOR_3<40) { OnFwd(OUT_A); OnRev(OUT_C); } if (SENSOR_2==1) { OnRev(OUT_A+OUT_C); Wait(50); OnFwd(OUT_A); Wait(200); if (SENSOR_3<40) { OnFwd(OUT_C); } } } } 次に相手のロボットを右から避けて通るためのプログラムです。 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); while(true) { OnFwd(OUT_A+OUT_C); if (SENSOR_1<40) { OnFwd(OUT_C); OnRev(OUT_A); } if (SENSOR_3<40) { OnFwd(OUT_A); OnRev(OUT_C); } if (SENSOR_2==1) { OnRev(OUT_A+OUT_C);Wait(50); OnFwd(OUT_A); Wait(77); OnFwd(OUT_C); Wait(90); OnRev(OUT_A); Wait(77); OnFwd(OUT_A); Wait(100); OnRev(OUT_A); Wait(77); OnFwd(OUT_A); Wait(100); OnRev(OUT_C); Wait(87); if (SENSOR_1<40) { OnFwd(OUT_C); } } } } *感想 [#h62fd386] プログラミングが大変だった!!ロボットは前回に比べれば割と簡単に出来たが、もう少し改良したかった。改良点は、小回りを出来るようにすることと、速度を落とすようなギアチェンジがすればよかったかな、、、、。 *コメント [#h1bb4fb4] このプログラムやホームページに関するコメントをお願いします。 #comment