&size(20){◇課題2『黒い線に沿って動くロボット』}; +前方のロボットに接触したら反転して進む +前方のロボットに接触したらそのロボットを右側から追い抜いて、再びライン上に戻って進む &size(20){☆製作に関して }; #contents **プログラム [#u73fb488] ***反転して進む [#wb540068] task main() { SetSensor(SENSOR_3,SENSOR_LIGHT);//センサ−3を「光」、センサー1を「タッチセンサー」と定義する SetSensor(SENSOR_1,SENSOR_TOUCH); while (true) { if(SENSOR_3 < 50)//センサー3が黒線上に無いとき、左タイヤだけが動く {OnFwd(OUT_A); Off(OUT_C); Wait(5); } if(SENSOR_3 > 50)//センサー3が黒線上に有るとき、右タイヤだけが動く {OnFwd(OUT_C); Off(OUT_A); Wait(5); if(SENSOR_1 == 1)//センサ−1が反応したとき、バックして反転 {OnRev(OUT_A+OUT_C); Wait(50); OnFwd(OUT_A);OnRev(OUT_C); Wait(235); } } } } ***追い抜いて進む [#a9500fea] task main() { SetSensor(SENSOR_3,SENSOR_LIGHT); SetSensor(SENSOR_1,SENSOR_TOUCH); while (true) { if(SENSOR_3 < 50) {OnFwd(OUT_A); Off(OUT_C); Wait(5); } if(SENSOR_3 > 50) {OnFwd(OUT_C); Off(OUT_A); Wait(5); if(SENSOR_1 == 1)//センサ−1が反応 {OnRev(OUT_A+OUT_C);//少しバック Wait(90); OnFwd(OUT_A);OnRev(OUT_C);//右に約45度 Wait(50); OnFwd(OUT_A+OUT_C);//少し直進 Wait(100); OnFwd(OUT_C);OnRev(OUT_A);//左に約45度 Wait(50); OnFwd(OUT_A+OUT_C);//少し直進 Wait(120); OnFwd(OUT_C);OnRev(OUT_A);//左に約45度 Wait(30); } } } } **苦労した点とその解決 [#z996e706] タッチセンサーをつけるのは簡単だったけれども光センサーをどの位置につけるかに結構悩まされました。でも結局タッチセンサーの真下につけることで解決しました。また光センサーをいくつつけるかも悩んだけど1つの方がプログラムが簡単だと思ったので1つにしました。タッチセンサーに光センサーも加わったのでプログラムは全体的に大変でした。 **工夫した点 [#jab5474c] -ロボット --左右の誤差をなくすように、機体の中心にセンサーを持ってきた。 --センサー同士が邪魔にならないように、一カ所にまとめて配置した。 -プログラム --トレース時間を短くして、ライントレースの正確さを改善した。 **製作時間&費用 [#ea81d627] -製作時間 --ロボット製作:1時間 --プログラム:1時間(授業時間含まず) --レポート作成:3時間 -費用 --画用紙:90円 --マジック:100円 **反省/感想 [#xb264790] 今回、「ライントレースロボ」を作って、慣れてきたせいか、ロボもプログラムも比較的早くできた。また、役割分担もできていて一人一人しっかりできた。今後の課題として、得意分野だけをするのではなく、他の分野の作業(特に、ロボの製作)もできるよう一層の努力が必要である。 是非コメントをお願いします -task の中や、if や while の中の命令を字下げすると、どこからどこまでがどのブロックに属しているのかすぐにわかります。そうすることでプログラムの構造的な間違いや文法的な間違いをかなり減らせると思います。 -- [[松本(教員)]] &new{2006-06-21 (水) 21:45:22}; #comment [[2006a/B4]]へ戻る