最初は光センサーを二つ使って作りました。しかしそれでは急なカーブが曲がりきれませんでした。そこでいろいろ改良してみましましたが、なかなかうまくいかなかったので、これを機に光センサー1つのロボットに作り替えました。
光センサーが2つのときはラインを挟むようにして2つ付けました。プログラムは左のセンサーが黒いライン上にのると左に曲がる。右のセンサーが黒いライン上にのると右に曲がるというプログラムにしていました。しかしそれではライン上に乗ると戻ろうとするのですが、戻りきれないという状況でした。 制作者:キンニクマン
という基本構造にしました。
task main(){ SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサー SetSensor(SENSOR_1,SENSOR_TOUCH); タッチセンサー while(true){
if(SENSOR_1 ==1){ ぶつかったら OnRev(OUT_A+OUT_C); Wait(80); バックして OnFwd(OUT_A); 後ろを向く OnRev(OUT_C); Wait(250); } if(SENSOR_2<40){ 道から外れたら Off(OUT_A+OUT_C); 止まって OnFwd(OUT_A); 回転する OnRev(OUT_C); } else ライン上では { Off(OUT_A+OUT_C); 止まって OnFwd(OUT_C); OnRev(OUT_A); 回転(逆回り) } } }
ライン外では左に旋回し、ライン上になると右に旋回するとい うプログラム。動きとしてはかなりがたがたしていますが、かなり確実にラインに沿って移動してくれます。
光センサーはプログラムも設計もキンニクマンが担当しました。 タッチセンサーはプログラムも設計もSENOBYが担当しました。
task main(){ SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサー SetSensor(SENSOR_1,SENSOR_TOUCH); タッチセンサー while(true){
if(SENSOR_1 ==1){ ぶつかったら OnRev(OUT_A+OUT_C); バックして Wait(120); OnFwd(OUT_A); 方向転換(ちょっと回転) OnRev(OUT_C); Wait(60); OnFwd(OUT_A+OUT_C); 1台分くらい前進
Wait(120);
OnFwd(OUT_C); また回転して OnRev(OUT_A); Wait(80); OnFwd(OUT_A+OUT_C); 前進して Wait(120); コースに戻る OnFwd(OUT_A); 再びラインとレース } if(SENSOR_2<40){ ライン上では Off(OUT_A+OUT_C); OnFwd(OUT_A); 回転 OnRev(OUT_C); } else { Off(OUT_A+OUT_C); ライン外では OnFwd(OUT_C); 逆回転 OnRev(OUT_A); } } }
逆走タイプからプログラムを変えただけなので、基本的には上記 とほとんど同じです。
ライン外では左に旋回し、ライン上になると右に旋回するというプログラム。動きとしてはかなりがたがたしていますが、かなり確実にラインに沿って移動してくれます。
上記のプログラムを参考にSENOBYが担当しました。
コースは左グループ/右グループ兼用ということでした。左グループは2人で作業し、右グループは4人で作業していたため、右グループに製作をお願いしました。
みんな忙しい時期なうえ、時間がなかなか合わず、みんなで集まって作業することができなかったので、今日は○○が作業する日というような形で進めていきました。しかしそうすると、どこがどのプログラムなのか、持ち運び中に壊れたがどこに何がつけてあったのかわからなくなったりして、時間がかかりました。 プログラム的にはやはり光センサー2つで急なカーブを曲がることでした。結果的にはタイヤの接続部分がどこか壊れており、途中でがたがたし、それが原因で曲がれないということでした。 しかしそれに気づかずプログラム上の問題と考えていたため、インターネットでスピードを遅くするプログラムを調べて使うなどしました。結果的にそれらはうまくいきませんでしたが、if/whileなどのほかにもいろいろなテクニックがあるということがわかり、勉強になりました。
タイヤが故障していても、急なカーブが曲がれるように(現在も直ってません) 1.できるだけバックをつかわはない 2.より敏感に反応できるプログラム(センサーを1つにして、左に動くという命令と右に動くという単純な命令)にしたこと 初めはタイヤの故障かと思っていたが分解してタイヤなしで動かしたり、違うタイヤをつけるなどした結果、たぶんエンジンが壊れているということがわかりました。原因は不明ですが、タイヤを回す棒の部分がきちんと回転しないといった状態です。
エンジンの故障をカバーできるプログラミングをすること。 次回は回転が必要なので前輪がないということはそのぶん、回転にかかる時間がかかるため、少し作動時間を長くとらなければならない。