*ロボットの紹介 [#y20b66da] +このロボットは見た目は普通でもきっとやるときはやる子です。 +できるだけ小さくすることを目指し作りました。 +缶を挟むアームはひとつだとバランスが悪くなり、缶が倒れることも多いのでアームをふたつにしました。 *コース攻略法 [#d4dffbe8] +コースの攻略はできなかった。 +最初はタッチセンサーで缶をつかもうと思ったが、缶が軽すぎセンサーが反応しなかったので、タイマーを使い全てを時間で区切って操作しようとした。 +だが、タイマーで区切ったせいか自分のプログラミングのせいかわからないが、ある一定の場所でライントレースをしなくなってしまい最後までゴールする事は出来なかった。 *プログラムの説明 [#lfa418c3] #define THRESHOLD 35 //しきい値 #define HIPOWER 7 #define LOWPOWER 1 #define set_power_H SetPower(OUT_AC,HIPOWER); #define set_power_L SetPower(OUT_AC,LOWPOWER); #define go_forward1 set_power_H;OnFwd(OUT_AC); #define go_forward2 set_power_L;OnFwd(OUT_AC); #define turn_left1 set_power_L;\ OnFwd(OUT_C);OnRev(OUT_A); //左旋回 #define turn_left0 set_power_L;\ OnFwd(OUT_C);Off(OUT_A); //左回り #define turn_right0 set_power_L;\ OnFwd(OUT_A);Off(OUT_C); //右回り #define turn_right1 set_power_L;\ OnFwd(OUT_A);OnRev(OUT_C); //右旋回 #define moter set_power_L;OnFwd(OUT_B); #define STEP 1 #define nMAX 3 #define short_break Off(OUT_AC);Wait(10); #define CROSS_TIME 30 #define cross_line go_forward1;\ Wait(CROSS_TIME);short_break #define time0 400 #define time1 1800 #define time2 2200 #define time3 3300 #define time4 3700 #define time5 4600 #define time6 4900 #define time7 6000 sub line_trace1() //普通のライントレース { if (SENSOR_2 < THRESHOLD -6) { turn_left0; } else if (SENSOR_2 < THRESHOLD -3) { turn_left1; } else if (SENSOR_2 < THRESHOLD +3) { go_forward1; } else if (SENSOR_2 < THRESHOLD +7) { turn_right0; } else { turn_right1; } Wait(STEP); } sub line_trace2() //急な回転のライントレース { if (SENSOR_2 < THRESHOLD -1) { turn_left1; } else if (SENSOR_2 < THRESHOLD +3) { turn_right1; } else { go_forward1; } Wait(STEP); } sub line_cross() //交差点を通過 { int nOnline=0; while(nOnline < nMAX){ if (SENSOR_2 < THRESHOLD -6) { turn_left1; nOnline++; } else { if (SENSOR_2 < THRESHOLD -3) { turn_left0; } else if (SENSOR_2 < THRESHOLD +3) { go_forward1; } else if (SENSOR_2 < THRESHOLD +7) { turn_right0; } else { turn_right1; } nOnline=0; } Wait(STEP); } short_break; turn_right1;Wait(nMAX*STEP*10); cross_line; nOnline=0; } task main() { SetSensor(SENSOR_2,SENSOR_LIGHT); ClearTimer(0); go_forward1;Wait(35); turn_left1;Wait(100); while(FastTimer(0) <= time0) { line_trace1(); //普通のライントレース } moter;Wait(50); while(FastTimer(0) <= time1) { line_trace1(); //普通のライントレース } PlaySound(SOUND_UP); while(FastTimer(0) <= time2) { line_cross(); } PlaySound(SOUND_UP); while(FastTimer(0) <= time3) { line_trace2(); //急な回転のライントレース } PlaySound(SOUND_UP); while(FastTimer(0) <= time4) { line_cross(); } PlaySound(SOUND_UP); while(FastTimer(0) <= time5) { line_trace2(); //急な回転のライントレース } PlaySound(SOUND_UP); while(FastTimer(0) <= time6) { line_cross(); } PlaySound(SOUND_UP); while(FastTimer(0) <= time7) { line_trace1(); //普通のライントレース } PlaySound(SOUND_UP); turn_right1;Wait(100); //缶を放す動作 go_forward1;Wait(100); turn_left1;Wait(200); OnRev(OUT_B);Wait(50);Off(OUT_B); OnRev(OUT_AC);Wait(100); while(true){ line_trace2(); } } *まとめ [#ja9e4202] +今回の課題では最後まで行く事が出来なかった。