黒い線に沿って動くロボットを作成せよ。そして一つの周回コースを2台のロボットが走行すること想定し、以下の2種類のプログラムを作成せよ。
1.前方のロボットに接触したら反転して進む
2.前方のロボットに接触したらそのロボットを右側から追い抜いて(あるいは避けて通り)、再びライン上に戻って進む
ただし、スピードと確実性をできる限り両立させること。自由課題1も参考に。光センサは2つ使用してよい。
#define THRESHOLD 40 // 閾値 task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー1が光センサーと宣言 while (true) { if (SENSOR_1 < THRESHOLD) { // モーター1が黒線上にいるとき OnFwd(OUT_A); //モーターAを正回転 Off(OUT_C); //モーターCを停止 } else { // モーター1が黒線から外れたとき Off(OUT_A); //モーターAを停止 OnFwd(OUT_C); //モーターCを正回転 } //以上繰り返す } }
task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1が光センサーと宣言 SetSensor(SENSOR_2,SENSOR_LIGHT); //センサー2が光センサーと宣言 while(true) { if (SENSOR_1> 40) //光センサー1が黒線から 外れているとき { OnFwd(OUT_A); //モーターAを正回転 Off(OUT_C); //モーターCを静止 } else //光センサー1が黒線上に あるとき { OnFwd(OUT_C); //モーターCを正回転 Off(OUT_A); //モーターAを静止 } if (SENSOR_2>40) //光センサー2が黒線から 外れているとき { OnFwd(OUT_C); //モーターCを正回転 Off(OUT_A); //モーターAを静止 } else //光センサー2が黒線上に あるとき { OnFwd(OUT_A); //モーターAを正回転 Off(OUT_C); //モーターCを静止 } //以上繰り返す } } }
とりあえず黒い線に沿って進むだけのプログラムです。一つセンサーの場合は、何も考えずにスムーズにプログラミング出来ました。 時々コースアウトするときはあったけれども、、、。それと違ってセンサー二つの場合、ロボットの光センサーの位置が悪かったのか、 きついカーブはうまく曲がることができませんでした。センサーをくっつけて装着させると黒いラインを両側に挟むことが出来ず失敗しました。 また二つ離して装備させても簡単にはうまくいかず、普通のカーブでも黒いラインにセンサーが入る角度によっては、センサーが 反応しきれずに 曲がりきれないことがありました。何度も調節して(ブロック一つ分ずつズラしていき、耐久性も考えた)自分たちの作ったコースは制覇しました。(ロボットは下に添付)
task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1が光センサーと宣言 SetSensor(SENSOR_2,SENSOR_LIGHT); //センサー2が光センサーと宣言 SetSensor(SENSOR_3,SENSOR_TOUCH); //センサー3がタッチセンサーと宣言 #define THRESHOLD 40 // 閾値 while(true){ if (SENSOR_1 > THRESHOLD) {OnFwd(OUT_C);} //モーターCを正回転 else {Off(OUT_C);} //センサー1が黒い線を認識したらモーターCをとめる if (SENSOR_2 > THRESHOLD) {OnFwd(OUT_A);} //モーターAを正回転 else {Off(OUT_A);} //センサー2が黒い線を認識したらモーターAをとめる if(SENSOR_3==1) {OnFwd(OUT_A);OnRev(OUT_C);Wait(170);} //前のロボットに接触したら反転する } //以上繰り返し }
きつい曲がりでは失敗するときもあったが、ほとんどうまくいきました。ただ、タッチセンサーをテキスト?通りに装着したが それではもう一つのロボットと接触するとき巧く反応しませんでした。接触面積を広く、少し高めに装着すればよかったと思いました。 また、カーブで二台のロボットのタイヤなどが接触して黒いラインから外れないようにロボット自体はコンパクトに(基本の形)しました。 衝突したら追い越すロボットの作成は、課題に追われて作ることが出来ませんでした。頭の中では、ラインを速く辿るロボット(例えば、黒いラインがまっすぐのときに蛇行せずに 進む、つまり二つのセンサーが光を感知しているときはモーター二つを前進させるなど)が追い越す側になることをイメージしていました。
タッチセンサーの接触面積を広くするために、黄色のバーに縦にバーをつけることを考えました。装着後の写真がないので見せれませんが、巧く機能しました。