#contents *課題3 [#w3d72a3f] 今回の課題は[半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作しなさい。ロボット本体が懐中電灯に接触しない限りどこからピンポン玉を放ってもよい。]である。 *ロボット [#za6aab9b] 今回の課題でロボットに求めることは~ ・回転できること~ ・ボールをまっすぐ投げること~ である。~ 今回、私たちが作ったロボットはタイヤ二つとキャスターで動くロボットだ。キャスターを付けることによって綺麗に動くようになった。ボールをまっすぐ飛ばすのにはレールを使うことにした。レールに沿って飛ばせば確実にまっすぐ飛ぶからだ。レールを下げるときに勢いが強すぎたので、上から押さえつけてはねないようにした。 #ref(./kaiten1.jpg,50%,ロボット1) #ref(./kaiten2.jpg,50%,ロボット2) #ref(./kaiten3.jpg,50%,ロボット3) *プログラミング [#x2b22501] **プログラミングの概要 [#d8903476] 今回のプログラムは一回転している間に一番光センサーが強く反応した方向に一度進み、次にまた同じことをして一番光が強かった方向にボールを飛ばすというプログラムだ。 **プログラム [#n9aedbea] センサー3=光センサー、モーターACがタイヤ、モーターBがアームである。 task main() { SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーとする int turn_time = 340; //turn_timeという一周にかかる時間を置く。 int light_max = 20; //light_maxというテキトーな数値を置く。 int time_max; //time_maxを置く。 int n=0; //nを0と置く。 int n=0; //nを0と置く。nは光を探した回数である。 while(n<2) //nが2より大きいか小さいかで分ける。 { ClearTimer(0); //時間をはかる SetPower(OUT_AC,1); //ACの出力を一番小さくする OnFwd(OUT_A);OnRev(OUT_C); //回転する while(FastTimer(0) < turn_time) //一周する時間にタイマーがなったかどうか { if(SENSOR_3 > light_max) //センサー3が仮の最高値より大きいかどうか { light_max = SENSOR_3; //大きいとlight_maxになる time_max = FastTimer(0); //大きいとその時の時間をtime_maxとする } } Off(OUT_AC);Wait(100); // SetPower(OUT_AC,1); // OnFwd(OUT_C);OnRev(OUT_A); //逆回転を一番光が強かったところまでする Wait(turn_time - time_max); // Off(OUT_AC); // OnFwd(OUT_AC);Wait(30);Off(OUT_AC); //少し進む。 n++; //nを⒈増やす。 } SetPower(OUT_B,1);OnFwd(OUT_B);Wait(14);Off(OUT_B); //ボールを転がす。 }