[[2009a/A2右/課題2]] &br;&size(30){&color(#00eecc){目};};&size(35){&color(#ee00cc){次};};&size(45){&color(#eecc00){♪};}; #contents *課題2 ⌣[#j4bc665b] ライントレースをするロボットを作ろう!! &br;かつ以下の条件をそなえたプログラムをそれぞれ作ること! +障害物にぶつかったら''&color(#e00){避けて進む};'' +障害物にぶつかったら''&color(#e00){障害物を次の交差点まで運ぶ};'' *ロボット [#j5244865] #ref(全体写真.jpg) &br; &size(20){&color(#899900){↑};};車輪を極力本体に近づけることで小回りが利くようにした。 &br;前方の腕は障害物を挟み込む役目を果たす。 #ref(後輪.jpg) &br;&size(20){&color(#3b3){↑};};このパーツは四角形の部品を重ね、底面に滑りをよくするために丸い部品を接続している。 &br;初めは車輪を使おうとしたが安定性や強度、機動性面でこちらの方が優れていたためこのパーツを使った。 #ref(タッチセンサ部分.jpg) &br;&size(20){&color(#33ff89){↑};};解説書のパーツをベースに作った。 &br;障害物が軽いのでより繊細な衝撃も感知できるように作用点をできるだけ支点から遠ざけた。 *コース [#s76c5a4b] #ref(コース.jpg) &br;&size(20){&color(#4dd){↑};};交差点を3つ作りそれぞれの交差点を直交するようにした。 &br;これは交差点でロボットが混乱しないようにするための配慮だ。 *プログラム [#ye6f4aa3] **避ける方のプログラム byひろ[#g3fded9d] int kosaten = 0; task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_LIGHT); //センサーは1と3を光に、2をタッチにしました。 while(kosaten < 6) //kosatenの値が6より小さいときは以下のプログラムに従う {while(SENSOR_2==1) //交差点で牛乳パックとぶつかったら発動 {OnRev(OUT_A+OUT_C); Wait(60); Off(OUT_A+OUT_C); //とりあえずバック OnFwd(OUT_A); OnRev(OUT_C); Wait(50); Off(OUT_A+OUT_C); //右に方向転換 OnFwd(OUT_A+OUT_C); Wait(90); Off(OUT_A+OUT_C); //前進 OnFwd(OUT_A); OnRev(OUT_C); Wait(50); Off(OUT_A+OUT_C); //左に方向転換 OnFwd(OUT_A+OUT_C); Wait(180); Off(OUT_A+OUT_C); //前進 OnFwd(OUT_C); OnRev(OUT_A); Wait(50); Off(OUT_A+OUT_C); //左に方向転換 OnFwd(OUT_A+OUT_C); Wait(92); Off(OUT_A+OUT_C); //前進 OnFwd(OUT_C); OnRev(OUT_A); Wait(35); Off(OUT_A+OUT_C); //右に方向転換 kosaten++; //ここまで動作を完了したらkosatenに1加える } if (SENSOR_1 > 40&&SENSOR_3 < 45) //ロボの右側が白、左側が黒と認識したとき発動 {OnFwd(OUT_A); OnRev(OUT_C);} //右側に曲がる if (SENSOR_1< 40&&SENSOR_3 > 45) //ロボの右側が黒、左側が白と認識したとき発動 {OnFwd(OUT_C); OnRev(OUT_A);} //左に曲がる if (SENSOR_1 > 40&&SENSOR_3 > 45) //ロボの両側とも白と認識したとき発動 {OnFwd(OUT_A+OUT_C);} //前進 if (SENSOR_1 < 40&&SENSOR_3 < 45) //ロボの両側とも黒と認識したとき発動 {OnFwd(OUT_C+OUT_A);} //前進 } Off(OUT_A+OUT_C); //kosatenの値が6以上になったら停止 } **運ぶ方のプログラム by T.I[#de156211] #define LINE 45 //線の明るさが45以下 int t; //変数t -動作時間を定義 int i; // 変数iを定義 task main() { t=0; i=0; SetSensor(SENSUR_1,SENSOR_LIGHT); //センサー1,3を光センサー SetSensor(SENSUR_2,SENSOR_TOUCH); //センサー2をタッチセンサー SetSensor(SENSUR_3,SENSOR_LIGHT); while(t<18){ //t<=18で行動 if(SENSOR_2==1){ //タッチセンサーが作動するとき if(SENSOR_1>LINE){ センサー1が白 if(SENSOR_3>LINE){ センサー3が白 OnFwd(OUT_A+OUT_C); 直進 } else{ センサー3が黒 OnFwd(OUT_A);OnRev(OUT_C); 左折 } if(SENSOR_1<LINE){ センサー1が黒 if(SENSOR_3>LINE){ センサー3が白 OnFwd(OUT_C);OnRev(OUT_A); 右折 } else{ センサー3が黒 t++; 交差点と認識しt=t+1 if(i=0){ i=0のとき OnFwd(OUT_A+OUT_C); Wait(30); 線を越える i++; i=i+1 } else{ iが0でないとき 次の動作で障害物をどけてから元に戻す OnFwd(OUT_A+OUT_C); 直進 Wait(100); OnFwd(OUT_A);OnRev(OUT_C); 反転 Wait(120); OnRev(OUT_A+OUT_C); 後退 Wait(120); OnFwd(OUT_A);OnRev(OUT_C); 反転 Wait(120); i=0; i=0を代入 }}}} else{ タッチセンサーが作動しないとき if(SENSOR_1>LINE){ センサー1が白 if(SENSOR_3>LINE){ センサー3が白 OnFwd(OUT_A+OUT_C); 直進 } else{ センサー3が黒 OnFwd(OUT_A);OnRev(OUT_C); 左折 } if(SENSOR_1<LINE){ センサー1が黒 if(SENSOR_3>LINE){ センサー3が白 OnFwd(OUT_C);OnRev(OUT_A); 右折 } else{ センサー1,3が黒 t++; OnFwd(OUT_A+OUT_C); 直進 Wait(30); }}}} Float(OUT_A+OUT_C); 緩やかに停止 } *最後に・・・ [#ycca2fce] コメントよろしくお願いします&color(#f09){♬}; #comment