課題2の内容は、光センサーを用いて
次のいずれかの経路を黒い線にそって動くロボットを作成する
(他のメンバーとは別の経路になるようにする)。
ただし、なるべく速く正確に動くロボットになるように工夫して、
交差点では1秒間停止すること。
・A地点からB地点へ (一人目)
A地点 → P直進 → Q直進 → Q直進 → R左折 → B地点
・B地点からC地点へ (二人目)
B地点 → R右折 → Q直進 → Q直進 →P右折 → S右折 → C地点
・C地点からA地点へ (三人目)
C地点 → S左折 → P左折 → Q直進 → Q直進 → R右折 → P左折 → A地点
(>2016年度前期/課題2)より
今回は、A地点からB地点へロボットをライントレースさせた。
ロボットの前方についているのが光センサーである。
ロボットの機体は初期状態のまま使用した。
光センサーは、地表面から1センチほど離した。
定義文
#define BLACK 34 #define WHITE 70 #define LEFT OnFwd(OUT_B,40);OnRev(OUT_C,20);//左旋回 #define RIGHT OnFwd(OUT_C,40);OnRev(OUT_B,20);//右旋回 #define nMAX 210 #define short_break Off(OUT_BC);PlaySound(SOUND_CLICK);Wait(1000)//小休止かつ発音 #define STEP 1 #define go_f OnFwd(OUT_BC,40);Wait(200);Off(OUT_BC);//前進 #define go_f1 OnFwd(OUT_BC,40);Wait(1000);Off(OUT_BC);//前進1 #define go_f2 OnFwd(OUT_BC,40);Wait(1100);//前進2 #define LEFT2 OnFwd(OUT_B,40);OnRev(OUT_C,20);Wait(500); #define RIGHT2 OnFwd(OUT_C,40);OnRev(OUT_B,20);Wait(500); #define TURN OnFwd(OUT_C,40);OnRev(OUT_B,40);Wait(650);Off(OUT_BC); #define TURN2 OnFwd(OUT_C,40);OnRev(OUT_B,20);Wait(200);Off(OUT_BC);
サブルーチン
sub normal() { SetSensorLight(S2); int nOnline=0;//黒線のカウント開始 int k=0;//交差点のカウント開始 while(k==0){//交差点のカウントが0の時 while(nOnline < nMAX){//カウントがnMAXより少ないとき if (SENSOR_2<BLACK) {//黒線上だと右に旋回 RIGHT; nOnline++;//カウントプラス } else if (SENSOR_2<WHITE) {//白だと左旋回 LEFT; nOnline=0;//黒線のカウントリセット } Wait(STEP); } short_break; k++;//交差点のカウントプラス nOnline=0;//黒線のカウントリセット } }
sub normal2() { SetSensorLight(S2); int nOnline=0;//黒線のカウント開始 int k=0;//交差点のカウント開始 while(k==0){//交差点のカウントが0の時 while(nOnline < nMAX){//カウントがnMAX以下の時 if (SENSOR_2<BLACK) {//黒線上なら左旋回 LEFT; nOnline++;//カウントプラス } else if (SENSOR_2<WHITE) {//白なら右旋回 RIGHT; nOnline=0;//カウントリセット } Wait(STEP); } short_break; k++;//交差点のカウントプラス nOnline=0; } }
サブルーチン1は黒線の右側をライントレースし、
サブルーチン2は黒線の左側をライントレースする。
プログラミング
task main() { normal2(); go_f1; normal(); go_f; normal(); go_f; normal (); TURN; TURN2; go_f; normal(); LEFT2; normal(); go_f2; Off(OUT_BC); }
黒のカウントがnMAXの210を超えると交差点と判断する。
交差点と判断されるとそのサブルーチンは終了する。
光センサーを用いた課題2は、
センサーの調子や、ロボット自体の判断が関わってきたので
課題1に比べるとかなり難易度が高かった。
プログラミングに関しても、
課題1に比べ、使用する単語が増え、大変だった。
しかしその分、プログラミングに関する
理解が深まった。