今回はロボットの半径1m以内にある懐中電灯を探して、懐中電灯にピンポン球を当てるというロボットを作りました。一周回転しながらもっとも光の強いときの時間を計り懐中電灯を探すというものにしました。
ロボットに関しては課題2を利用し光センサーを下向きから前向きに付け替えました。SENSOR_3に光センサーを取り付けました。
#define go OnFwd(OUT_AC); #define turnright OnFwd(OUT_A);OnRev(OUT_C); #define turnleft OnRev(OUT_A);OnFwd(OUT_C); #define right OnFwd(OUT_A); #define left OnFwd(OUT_C); #define close OnFwd(OUT_B);Wait(100); #define open OnRev(OUT_B);Wait(100); task main() { SetSensor(SENSOR_3,SENSOR_LIGHT); int lightpower=0; int LMtime=0; ClearTimer(0); while(FastTimer(0)<320){ turnright; if(SENSOR_3>lightpower){ lightpower=SENSOR_3; LMtime=FastTimer(0); } else{ turnright; } } ClearTimer(0); while(FastTimer(0)<340){ turnleft; } Off(OUT_AC); ClearTimer(0); while(FastTimer(0)<LMtime){ turnright; } Off(OUT_AC); go; Wait(45); open; Off(OUT_B); Off(OUT_AC); }
#define go OnFwd(OUT_AC); #define turnright OnFwd(OUT_A);OnRev(OUT_C); #define turnleft OnRev(OUT_A);OnFwd(OUT_C); #define right OnFwd(OUT_A); #define left OnFwd(OUT_C); #define close OnFwd(OUT_B);Wait(100); #define open OnRev(OUT_B);Wait(100); task main() { SetSensor(SENSOR_3,SENSOR_LIGHT); int lightpower=0; int LMtime=0; ClearTimer(0);
直進とカーブと旋回を定義し、lightpowerを光の強さ、LMtimeを光の強さが最大のときの時間としました。
while(FastTimer(0)<320){ turnright; if(SENSOR_3>lightpower){ lightpower=SENSOR_3; LMtime=FastTimer(0); } else{ turnright; } } ClearTimer(0); while(FastTimer(0)<340){ turnleft; }
旋回をさせて一周となる時間を設定し、逆回転も同じ時間にするとモータの強さが違ったために少し調整する必要がありました。右に旋回しながら光センサーが現在のlightpowerよりも大きな値を見つけたとき、その光の強さを新たにlightpowerに書き込み、同時に回転し始めた時から計った時間をLMtimeに書き込み一回転した後、逆向きに一回転します。
Off(OUT_AC); ClearTimer(0); while(FastTimer(0)<LMtime){ turnright; } Off(OUT_AC); go;Wait(45); open; Off(OUT_B); Off(OUT_AC); }
元の向きに戻った後、LMtimeに書き込まれた時間だけ回転し前進してアームを開くことでピンポン玉を発射し、懐中電灯にピンポン球を当てることができます。
今回もグループのみんなに助けられながらでしたが、最後はすべて自分でプログラムを組めるようになりました。何度もエラーが発生して、これまでのプログラミングを生かして何とか成功させることができました。