以上の条件を満たすロボットを作成する。
いかにして一つのモーターで正確に標的に近づくか、そしていかにして懐中電灯との距離をとるかを考えて作成する。
#define straight OnRev(OUT_A); Wait(10); Float(OUT_A); Wait(10); OnFwd(OUT_A); Wait(10); Float(OUT_A); Wait(10); Off(OUT_A); task main(){ SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); //センサーの設置 while(true){ //無限に繰り返す if(SENSOR_1 > SENSOR_3){ OnRev(OUT_A); Wait(25); Off(OUT_A); //左折 } else if(SENSOR_1 < SENSOR_3){ OnFwd(OUT_A); Wait(25); Off(OUT_A); //右折 } else if(SENSOR_1 == SENSOR_3){ straight; //直進(左右のタイヤを交互に回転) } else if((SENSOR_1 > 80)&&(SENSOR_3 > 80)){ OnRev(OUT_C); Wait(100); Off(OUT_C); break; //両方のセンサーの値が一定の値より大きいとき、ブロックを投げつけて繰り返しを抜ける。 } } }
#define THRESHOLD 70 #define RUN_TIME 50 task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); センサーの設定 while(true) { if(SENSOR_3 <THRESHOLD){ OnRev(OUT_A); 左折 } if(SENSOR_1>THRESHOLD &&SENSOR_3>THRESHOLD){ ClearTimer(0); while(Timer(0)>= RUN_TIME){ OnFwd(OUT_C);}} 両方の光センサーが一定以上が0,5秒続くとホイールを投げる else { OnFwd(OUT_A);}} 右折 }
ハード面においては、ブロックの飛距離に大きなばらつきがあった事が気になった。また、光の受け方によっては光センサーの数値が左右ともに同じになってしまい、正確な方向へ進めなくなってしまうことがあった。これらの問題を解消するため、以下の対策を行った。
コメントをお願いします。
プログラムその2に説明を入れましょう。三輪車など、ロボットの方にも気を配ったのはよいと思います。 FI