[[2006a/B1]] *練習課題2 [#re141fb7] **壁にぶつかったら方向転換して走るロボットのプログラム [#p94fbd8f] **黒い線に沿って動くロボット [#z89ff901] -6/9 今日は久しぶりに3人揃っての作業(^-^*) 光センサーを使って、黒い線に沿って動くロボットを作成しました。 荒木君の提案でコースは「M」に… しかし、途中までは上手くいくものの「M」の溝?の部分で変な方向に…Σ(-。-*)o 只今プログラム試行錯誤中…がんばるぞー!!(がんばれ大ちゃん!); **試作プログラム(ラインとレースのみ) [#o7f0cf49] #define THRESHOLD 35~ #define RUN_TIME 150~ task main ()~ {~ SetSensor(SENSOR_1,SENSOR_LIGHT);~ ClearTimer(0);~ while (Timer(0)<RUN_TIME) {~ if(SENSOR_1<40){~ OnFwd(OUT_A);~ Off(OUT_C);~ }else{~ Off(OUT_A);~ OnFwd(OUT_C);~ }~ }~ Off(OUT_A+OUT_C);~ }~ **とりあえずタッチセンサーとあわせる前にライントレースを完璧にしようという事で組んだプログラム。NQC入門道理にプログラミングしたところ右カーブに関して完璧!!だったが。。。。左カーブに突入したとたんライン読んでくれずマシンはぐるぐる円を描かくような行動を始める。。。。。まだまだ前途多難である。。。 [#gb5425ce] **前方のロボットに接触したら反転して進むプログラム [#n05eaeb8] task main()~ [#n0f0d028] { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); while(true) { if(SENSOR_1<40; //センサ−1が黒のライン上に乗ったら { OnFwd(OUT_C); //左折する OnRev(OUT_A); } if(SENSOR_3<40) //センサ−3が黒のラインに乗ったら { OnFwd(OUT_A); //右折する OnRev(OUT_C); } if((SENSOR_1>40)&&(SENSOR_3>40)) //もしどちらのセンサーも黒のライン上に乗ってなかったら { OnFwd(OUT_A+OUT_C); //前進する if(SENSOR_2==1) //もしセンサー2がぶつかったら { OnFwd(OUT_A) ;OnRev(OUT_C); //反転する Wait(180); OnFwd(OUT_A+OUT_C); //前進する } } } } その後右の班と合同プログラミング作成を行いなんとか上のプログラムを完成させました。そのためプログラム内容は右の班と全く同じになりました。 **反省点 [#uaac918c] 合同で行ったとはいえほとんど右の班のしじみ君に頼ってしまったこと。 反転する際のプログラミングに反転する感覚をつかむためにとても時間をtルカってしまった事。 **努力した点 [#e6616b66] 曖昧な表現だがとにかくラインとレースに力を入れた。少しでもずれたものならプログラムを一から見直して何度も編集した。 **前方のロボットに接触したらそのロボットを右側から追い抜いて(あるいは避けて通り)、再びライン上に戻って進むプログラム [#v511beba] task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); //左の光センサー SetSensor(SENSOR_3, SENSOR_LIGHT); //右の光センサー while(true) { if(SENSOR_1<40) //もし左のセンサーがライン上に乗ったら { OnFwd(OUT_C); //右折する OnRev(OUT_A); } if(SENSOR_3<40) //もし右のセンサ−がライン上に乗ったら { OnFwd(OUT_A); //左折する OnRev(OUT_C); } if((SENSOR_1>40)&&(SENSOR_3>40)) //もしどちらのセンサーもライン上に乗らなかったら { OnFwd(OUT_A+OUT_C); //前進する if(SENSOR_2==1) //もしタッチセンサーがぶつかったら { OnRev(OUT_A+OUT_C); //バックする Wait(40); OnFwd(OUT_A) ;OnRev(OUT_C); //右折する Wait(60); OnFwd(OUT_A+OUT_C); //前進する Wait(120); OnRev(OUT_A);OnFwd(OUT_C); //左折する Wait(60); OnFwd(OUT_A+OUT_C); //前進する Wait(120); OnRev(OUT_A);OnFwd(OUT_C); //左折する Wait(60); } } } }