#contents *課題 [#t65faa08] 半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作する。ロボット本体が懐中電灯に接触しない限りどこからピンポン玉を放ってもよい。詳しくは [[課題3のページ>http://yakushi.shinshu-u.ac.jp/robotics/?2015a%2FMission3]] を参照。 *ロボット本体の説明 [#k1e14181] [[前回のライントレースロボット>http://yakushi.shinshu-u.ac.jp/robotics/?2015a%2FMember%2Fuchi%2FMission2#k1e14181]]の光センサーの位置を下から前に変えた(下写真参照) #ref(sin1.jpg) *プログラムの説明 [#b17017e0] **ライトの見つけ方 [#z55967e0] ロボットを1回転以上させる。その時光センサーで見つけたの明るさが今までの最大の明るさ(初めは0)を超えたらそこからタイマーをリセットして時間を測り始める。そして回転が終わった時にタイマーに入っている時間だけ逆回転させれば最も明るかった場所=ライトがあった場所が分かる。 **使用したプログラム(全て) [#zf24dc73] #define turntime 360 //1回転以上する時間 task main() { SetSensor(SENSOR_2, SENSOR_LIGHT); int lmax=0; //仮の明かりの明るさの最大値 int tmax=0; //明るさの最大値が更新されてからの時間 ClearTimer(0); SetPower(OUT_B,6); OnFwd (OUT_B); while (FastTimer(0)<=turntime) { OnFwd(OUT_A); OnFwd(OUT_C); if(lmax<=SENSOR_2) //明るさが今までの明るさの最大値を超えたなら { ClearTimer(1); //タイマーをリセットして lmax=SENSOR_2; //明るさの最大値を更新して PlaySound(SOUND_CLICK); //音を鳴らす } } tmax=FastTimer(1); ClearTimer(0); while (FastTimer(0)<=tmax) //明るさの最大値が更新されてからの時間分だけ逆回転 { OnRev(OUT_C); OnRev(OUT_A); } Off(OUT_A); Off(OUT_C); OnRev(OUT_B); //ボールを発射する Wait(200); Off(OUT_B); } *ロボットの動作動画 [#v3cc8f0c] #ref(IMG_1913.MOV) *未解決の問題点 [#qe875fba] -たまにロボットが正確にライトの方向を向かないことがある。これは横からの光を誤認識してしまうためである。これを直すためには横からの光を遮るようにロボットを改良すればよい。 *かかった時間 [#p23434fa] -このロボット本体…約10分 -プログラム…約50分 -ホームページ…約50分 *まとめと反省 [#t079a71e] 今回は前回作ったロボットを軽く改造するだけで済んだので簡単にできた。また、先生の話を聞いて改善すべき点なども見つかった。