課題3のページ #contents *課題 [#lf03c64c] 半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作する。 ロボット本体が懐中電灯に接触しない限りどこからピンポン玉を放ってもよい。 *ロボットについて [#f3032eeb] 下向きに取り付けていた光センサーを前向きに取り付けた以外は課題2と同じものを使った。 課題2ではアームはボールを押さえていただけだったが、今回はシュートするのにも使った。 #ref(./robot.jpg,60%) *プログラム [#u6073c99] #define turn_right OnFwd(OUT_A);OnRev(OUT_C); //右旋回 #define turn_left OnFwd(OUT_C);OnRev(OUT_A); //左旋回 #define shoot OnRev(OUT_B);Wait(20);Off(OUT_B); //シュートする int turntime=500;//回転する時間 int lightmax=50; //仮の最大値 int timemax=0; //仮の最大値を与える時刻 task main() { SetSensor(SENSOR_2,SENSOR_LIGHT); ClearTimer(0); //明るくなるまでの時間を測る turn_right; while(FastTimer(0) < turntime) { if (SENSOR_2 > lightmax) { timemax==FastTimer(0); } } Off(OUT_AC);Wait(100); turn_left; Wait(turntime-timemax); //明るくなったところまで逆旋回 Off(OUT_AC);Wait(100); shoot; } *工夫した点 [#x8d2aee1] ロボットを旋回させて明るくなった点までの時間を測り、回転していた時間から測った時間を引いてその分逆に旋回させた。そうすることでちょうど一回転しなくてもほぼ正確に明るくなった方向を向くことができた。 シュートはアームを一回転させて弾くようにしたことで勢いよくシュートできるようになり、方向もまっすぐ飛ばすことができた。 *反省 [#ofc2ec95] 最初はどういったプログラムにすればいいかわからなかったが、やり方がわかった後は比較的早く終わらせることができた。 ロボット本体は課題2とほぼ同じだったので、やりやすかった。 また、課題2では紙の丸みでうまくシュートできなかったが、シュートの仕方を変えて今回はできたので良かったと思う。