*課題内容 [#g216e5df] 半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作する。 ただしロボット本体が懐中電灯に接触しない限りどこからピンポン玉を放ってもよい。 *ロボット [#a857ee77] 課題2と同じライントレースロボットを使用した。センサーを本体の前部分に突き出すようにして取り付けた。 #ref(20150716_190011.jpg) *動画 [#t0d95778] #ref(IMG_8741.MOV) *プログラム [#bb05a2c4] **光センサーについて [#f2a68ef8] ロボットを1回転以上させ、その時光センサーで見つけた明るさが今までの最大の明るさを超えたらそこからタイマーをリセットして時間を測り始める。ただし初めは0の状態。そして回転が終わった時にタイマーに入っている時間だけ逆回転させる。これで最も明るかった場所=ライトがあった場所が分かる。 **プログラム内容 [#n220335a] #define turntime 360 //一回転する時間 task main() { SetSensor(SENSOR_2, SENSOR_LIGHT); int lmax=0; int tmax=0; ClearTimer(0); 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); 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); }