[[2015a/Member]] *課題について [#c48469ea] 今回の課題はロボットを一回転させ、懐中電灯のある方にボールをシュートする。明るさのピークを正確に見つけることが重要である。 * ロボットについて [#o136ba17] &ref(./_10501.jpg,20%); &ref(./_10502.jpg,20%); &ref(./_10503.jpg,20%); &ref(./_10504.jpg,20%); &ref(./_10505.jpg,20%); &ref(./_10506.jpg,20%); ** ロボットの基本構造 [#y1f4e172] 本体は課題2を参照(課題2の時より少し軽量化している)。アームは新しく作った。ボールを上から軽く押さえつけ、左右に移動しても両端のブロックがアームからボールが離れないようにしている。後ろに下がってもアームの押さえつける角度からボールが離れることはない。 * プログラムについて[#ra2fdf9b] ・定義 #define Time 380 //一回転する時間 #define spin_R OnFwd(OUT_A); OnRev(OUT_C); //右回転 #define spin_L OnRev(OUT_A); OnFwd(OUT_C); //左回転 #define shoot OnRev(OUT_B); Wait(20); Off(OUT_B); //シュート ・メインプログラム 変数をおき、最も明るい点を探す。 ・メインプログラム: 変数をおき、回転しながら最も明るい点を探す。 task main() { SetSensor(SENSOR_2,SENSOR_LIGHT); int most_light = 0; //最も明るい時のしきい値を記録するための変数 ClearTimer(0); while(FastTimer(0) <= Time){ //一回転して最も明るい点を見つける。 spin_R; //右回りで一回転 if(SENSOR_2 > most_light){ //最も明るければそのしきい値を記録する most_light = SENSOR_2; } } Off(OUT_AC); //小休止 Wait(200); ・最も明るい点にシュートする 先程と違い、逆回転する。そして、最も明るい点にシュートする ClearTimer(1); while(FastTimer(1) <= Time){ //逆回転して最も明るい点で止まり、シュートする spin_L; //左回りで一回転 if(SENSOR_2 > most_light - 1){ //最も明るいなら停止してシュート Off(OUT_AC); Wait(100); shoot; Off(OUT_AC); Wait(400); } } Off(OUT_AC); } *反省 [#l2f45834] **よかった点 [#q96eb6f2] ・懐中電灯に向かってシュートできた。 ・停止を入れることで安定して動かせた。 **悪かった点 [#kefdfa61] ・車の動きが少し早かったのでシュートする位置が少しずれてしまった。