黄色いホイールを2個以上連射するロボットを作成し、以下の動きをするようにプログラムを作成する。ただし1は懐中電灯を2個使用し、ロボットの動作中は懐中電灯を動かさないがいろいろな距離や方向にある懐中電灯に対応できるロボットにする。2は懐中電灯を1個使用し懐中電灯をゆっくり動かす。
1、全方向から2つの懐中電灯の方向を探しだし、懐中電灯を狙ってホイールを投げる。可能な限り正確な方向に投げる。ヒデ担当
2、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。Ta2担当
←ここが一番苦労した投擲部分です。振動によってくずれてしまい、四方から支える組み立て方をした。
うまく飛ばすように発射する部分を斜めにして、固定したこと。
ホイールが前に飛ばず上に飛び出してしまうので、本体の形をかえるように考えること。
#define TURN_TIME 350 //1周するのにかかる時間 task main() { int light_max=0; //光センサーの最大値 int t_max=0; //センサーが最大値の時刻 SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1は光センサー ClearTimer(0); //タイマー動作 OnFwd(OUT_A); //右回りに回転 while ( Timer(0)<TURN_TIME){ //繰り返し if(SENSOR_1>light_max){ //センサー1がより強い光を感知したら light_max=SENSOR_1; //最大値を現在の値に t_max=Timer(0); //現在の値を最大値の時刻に } } Off(OUT_A); Wait(50); OnFwd(OUT_A); //右回りに回転 Wait(t_max); Off(OUT_A); OnRev(OUT_C); //ブロックを投げる Wait(20); Off(OUT_C); }
#define light 40 //閾値 #define lightest 75 //懐中電灯距離30cmぐらい。 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while((SENSOR_1 < light) || (SENSOR_3 < light)) { if ((SENSOR_1 > light) && (SENSOR_3 < light)) //懐中電灯が、マシンの左側にある時 { Off(OUT_A+OUT_C); Wait(50); OnRev(OUT_A); OnFwd(OUT_C); } if ((SENSOR_1 < light) && (SENSOR_3 > light)) //懐中電灯が、マシンの右側にある時 { Off(OUT_A+OUT_C); Wait(50); OnFwd(OUT_C); } if ((SENSOR_1 < light) && (SENSOR_3 < light)) //懐中電灯が見当たらないとき { Off(OUT_A+OUT_C); Wait(50); OnFwd(OUT_C); OnRev(OUT_A); } Off(OUT_A+OUT_C); Wait(500); //懐中電灯が止まったことを確認するための待ち時間 } while((SENSOR_1 <= lightest) && (SENSOR_3 <= lightest)) { //懐中電灯までの距離30cmまで近づく(光の強さで距離を考える) OnFwd(OUT_A+OUT_C); } Off(OUT_A+OUT_C); OnFwd(OUT_B); //ブロックを投げる Wait(60); Off(OUT_B); }
プログラムが複雑になってきたので、どこにどのプログラムをいれればどう動くのか何回も試すのが苦労した。 時間を調整するときに工夫をした。
課題3だけあって一層難しいと感じた、ぎりぎりまで考えたので時間がかかってしまったが、できてよかった。