目次(ロボ)
半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作すること。(できれば、ピンポン玉を放つ距離を10〜30cmにする。) ロボット本体が懐中電灯に接触しない限りどこからピンポン玉を放っても良いこと。
本ロボットは二輪駆動であり、後部に補助輪がついた非常に簡単な構造をしている。
#define TURN_TIME 395//一回転する時間 int light_max; //lightセンサーの値の最大値 int time_max; //lightセンサーの値が最大の時の時間 task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); ClearTimer(1); if (Timer(1) <=10000) { //Timer(1)が10秒以内なら光を追いかける light_max = 0; time_max = 0; OnFwd(OUT_A); OnRev(OUT_C); GetMax();} else { //10秒以上なら shoot(); } } //lightセンサーが最大になる時の値、及び時間決定のタスク// sub GetMax() { ClearTimer(0);//タイマーを初期化 while (FastTimer(0) <= TURN_TIME) {//一回転する間に一番明るいところを探す if (SENSOR_1 > light_max){ light_max=SENSOR_1; //SENSOR_3の値が現在のlight_max time_max=FastTimer(0); //SENSOR_3が最大の時の時間を記録 } } //回転して// if (time_max <= TURN_TIME/2) {//最明点≦180°のとき Wait(time_max); //360もう一度回る } else {//最明点>180°のとき Toggle(OUT_A);//反転 Toggle(OUT_C);//反転→左旋回 Wait(TURN_TIME-time_max); } Chase(); } //光を追いかけるタスク// sub Chase() { Float(OUT_AC); while(true){ if (SENSOR_1 >= light_max){ OnFwd(OUT_A); Float(OUT_C); } else { Float(OUT_A); OnFwd(OUT_C); } } } //シュートするタスク// sub shoot () { OnFwd(OUT_B); //開く Wait(10); OnRev(OUT_AC);Wait(10); // OnFwd(OUT_AC);Wait(25);//ボールをシュート }
懐中電灯にピンポン玉をあてることができた。
タイマーでだいたいの距離を測ることになっているため,近くで当てるときは、タイマーの時間を長くするだけであり調整が簡単になった。ロボット前部に部品が集中したため光センサーの向きや位置を決めるのが難しかった。