[[2006a/B2]] #contents *ロボットの構造☆ [#w027d20f] **製作過程 [#d8f58e4d] ・今回は、タッチセンサーはシングルバンパーで、光センサーは二つ使うというアイデアはすんなりまとまった。 ・しかし、これらふたつのセンサーをどのようにつけるかで時間を食ってしまう・・・(泣) ・結局ロボット製作に二時間ほどかかってしまった。 **出来上がったロボット[#d52be7a1] &ref(kadai2.1.jpg); &ref(kadai2.3.jpg); ↑↑バンパーのついている方が前です。 **タッチセンサーの装着 [#i64439f4] &ref(kadai2.9.jpg); ←斜めから見た様子 &ref(kadai2.8.jpg); ←真横から見た様子 何かにぶつかったら、センサーのスイッチが入りタッチセンサーが作動する仕組みになってます。 **光センサーの装着 [#ad9f5061] &ref(kadai2.6.jpg); ←右側の光センサー &ref(kadai2.7.jpg); ←左側の光センサー &ref(kadai2.5.jpg); ←車体の裏から見た光センサー 二つの光センサーで、黒い線を挟み込むようにして黒い線の上を走行します。 *試作プログラム達♪♪[#f6858232] **障害物にぶつかったら反転するプログラム [#xe917385] シングルバンパーでの反転するプログラムです。 製作日//:06-6-14 製作者//:Blue task main() SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2がタッチセンサーと宣言 while(true) { OnFwd(OUT_A+OUT_C); until(SENSOR_2==1); //タッチセンサーが押されるまで直進 OnRev(OUT_A+OUT_C); //タッチセンサーが押された後、後退 Wait(20); OnRev(OUT_A); //モーターAを逆回転 Wait(200); OnFwd(OUT_C); //モーターCを正回転 Wait(190); OnFwd(OUT_A+OUT_C); //反転して直進 } } 床の摩擦によって多少動きにブレはあるが、ちゃんと反転してくれた↑↑ **黒い線の上を走行するライン・トレースのプログラム [#b9bd5fa9] 光センサー二つをつけたときのライン・トレースのプログラムです。 製作日//:06-6-14 製作者//:Blue task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1が光センサーと宣言 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3が光センサーと宣言 while(true) { if (SENSOR_1> 40) //光センサー1が黒い線まで来ていないとき { OnFwd(OUT_A); //モーターAを正回転 Off(OUT_C); //モーターCを静止 } else //光センサー2が黒い線に来たとき { OnFwd(OUT_C); //モーターCを正回転 Off(OUT_A); //モーターAを静止 } if (SENSOR_3>40) //光センサー3が黒い線まで来ていないとき { OnFwd(OUT_C); //モーターCを正回転 Off(OUT_A); //モーターAを静止 } else //光センサー3が黒い線まで来たとき { OnFwd(OUT_A); //モーターAを正回転 Off(OUT_C); //モーターCを静止 } } } } 動きはたどたどしいけれど、ちゃんと黒い線の上を走ってます! **追い越しのプログラム [#l2215d6f] 障害物にぶつかってから、追い越しをして黒い線上に戻るプログラムです。 製作日//:06-6-14 製作者//:Blue task main() { #define go_A(t) OnFwd(OUT_A);Wait(t);Off(OUT_A);//右旋回 #define go_C(t) OnFwd(OUT_C);Wait(t);Off(OUT_C);//左旋回 #define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Off (OUT_A+OUT_C);//まっすぐ直進 #define go_back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);//まっすぐ後退 SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1が光センサーと宣言 SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3が光センサーと宣言 SetSensor(SENSOR_2,SENSOR_TOUCH);//センサー2がタッチセンサーと宣言 while(true) { OnFwd(OUT_A+OUT_C); until(SENSOR_2==1); //タッチセンサーが押されるまでまっすぐ前進 go_back(80); //まっすぐ後退 go_A(80); //左旋回 go_straight(80); //まっすぐ前進 go_C(80); //右旋回 go_straight(150); //まっすぐ前進 go_C(80); //右旋回 OnFwd(OUT_A+OUT_C); //タッチセンサー3が黒い線に来るまでまっすぐ前進 until(SENSOR_3<45); OnFwd(OUT_A); //左旋回 OnRev(OUT_C); until(SENSOR_1<40); //タッチセンサー1が黒い線を認識するまで左旋回 OnFwd(OUT_A+OUT_C); //まっすぐ前進 } } *いよいよ本プログラム・・・ [#a92562f1] **反転プログラム [#f8f7ab32] task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); while(true) { while(SENSOR_2==0) { if(SENSOR_1>40) { OnFwd(OUT_A); Off(OUT_C); } else { OnFwd(OUT_C); Off(OUT_A); } if(SENSOR_3>40) { OnFwd(OUT_C); Off(OUT_A); } else { OnFwd(OUT_A); Off(OUT_C); } } if(SENSOR_2==1); { OnFwd(OUT_A); OnRev(OUT_C); until(SENSOR_1<40); } } } **追い越しプログラム [#j5191e0d] task main() { #define go_A(t) OnFwd(OUT_A);Wait(t);Off(OUT_A); #define go_C(t) OnFwd(OUT_C);Wait(t);Off(OUT_C); #define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Off (OUT_A+OUT_C); #define go_back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); while(true) { while(SENSOR_2==0) { if(SENSOR_1>40) { OnFwd(OUT_A); Off(OUT_C); } else { OnFwd(OUT_C); Off(OUT_A); } if(SENSOR_3>40) { OnFwd(OUT_C); Off(OUT_A); } else { OnFwd(OUT_A); Off(OUT_C); } } if(SENSOR_2==1); { go_back(80); go_A(90); go_straight(100); go_C(90); go_straight(180); go_C(90); OnFwd(OUT_A+OUT_C); until(SENSOR_3<45); OnFwd(OUT_A); Off(OUT_C); until(SENSOR_1<40); } } } *考察 [#cd9a4178] **工夫した点 [#f6861995] -ji