*ロボットの説明 [#w5c8de80] 半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作した。 #ref(2015a/Member/kaz/Mission3/S__30531587.jpg,30%) *ハードウェア [#ra3432d8] 課題2のロボットの光センサーの位置を底面から前方に移動した。前輪駆動のロボットに後輪をキャスターにしている。アームではじめから搭載していボールを車体を停止した後、アームを上げて車体を前進させてボールを放つ。 *ソフトウェア [#h872d03d] タイマーとを用いて光量が最大になる市を検出してその向きにボールを放つプログラムを作成した。まず車体を旋回させてセンサーの値が最大になる時の、回転を始めてからの時間を求め光量の値が最大になる市を検出する。1回転にかかった時間から光量が最大になるまでの時間を引いた時間の分だけ逆回転する 。これにより車体は光源に向く。その後ボールを放つ。以下プログラム task main(){ SetSensor(SENSOR_2,SENSOR_LIGHT); int t = 0; int T = 0; int MAX = 0; int i = 0; int t = 0;//回転時間 int T = 0;//回転開始から光量が最大になる地点までの回転時間 int MAX = 0;//一回転した中でのセンサーが記録した最大値 int i = 0;//回転して光量が最大になる方向へ移動する回数 while(1){ t = FastTimer(0); if(t < 150){ if(t < 150){ //一回転にかかる時間 OnFwd(OUT_A); OnRev(OUT_C); if(SENSOR_2 > MAX){ MAX = SENSOR_2; T = FastTimer(0); } }else{ if(i == 2){ PlaySound(SOUND_UP); Off(OUT_AC); Wait(20); OnFwd(OUT_C); OnRev(OUT_A); Wait(150 - T); Off(OUT_AC); OnFwd(OUT_B); Wait(100); OnRev(OUT_AC); Off(OUT_B); Wait(50); Off(OUT_ABC); Wait(9999); }else{ PlaySound(SOUND_UP); Off(OUT_AC); Wait(20); OnFwd(OUT_C); OnRev(OUT_A); Wait(150 - T); OnRev(OUT_AC); Wait(100); Off(OUT_AC); Wait(20); ClearTimer(0); t = 0; T = 0; MAX = 0; i++; } } } } *改善点 [#g4d69d5b] センサーを正面の光のみを拾うように覆いをつければ精度は上がると思われる。しかし今回は覆いをつけなくても動作した。