[[2015a/Member]] *光に向けてピンポン球を転がす [#had7a98e] ** ロボットの説明[#c7f84fb2] #ref(1438236252072.jpg,,30%) 前回の課題2とほぼ同じなので改良した裏面だけ載せておく。すべてのギアが連動しており、二股になっている部分が閉じているときは押し出す棒は収納されており、二股になっている部分が開いたときは押し出す棒が飛び出てきてピンポン球を押し出せるようになっている。 前回の課題2のロボットの裏面を改良した。改良した裏面はすべてのギアが連動しており、二股になっている部分が閉じているときは押し出す棒は収納されており、二股になっている部分が開いたときは押し出す棒が飛び出てきてピンポン球を押し出せるようになっている。ロボット自体は4輪駆動でロボットの重心に制御する機械を設置することで前のめりや後ろのめりにならないようにした。 **プログラミング [#gb8ca57d] #define turnT_1 380 #define turn_search OnFwd(OUT_A); OnRev(OUT_C); Wait(turnT_1); #define turn_backsearch OnFwd(OUT_C); OnRev(OUT_A); Wait(FastTimer(1)); Off(OUT_AC); task main() { SetSensor(SENSOR_2,SENSOR_LIGHT); ClearTimer(0); int count=0; while(FastTimer(0)<=turnT_1){ if(SENSOR_2>count){ count=SENSOR_2; ClearTimer(1) } turn_search; } turn_backsearch; Off(OUT_AC); Wait(100); OnFwd(OUT_B); Wait(10); Off(OUT_B); } **プログラミングの説明 [#w0e6d686] #define turnT_1 380 回転する時間、一回転より少し多め #define turn_search OnFwd(OUT_A); OnRev(OUT_C); Wait(turnT_1); 光を探す際の一回転することを定義 #define turn_backsearch OnFwd(OUT_C); OnRev(OUT_A); Wait(FastTimer(1)); Off(OUT_AC); 探しだした光に向けて逆回転してその向きに向けることを定義 task main() { SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサーを設定 ClearTimer(0); タイマー0を設定 int count=0; while(FastTimer(0)<=turnT_1){ if(SENSOR_2>count){ count=SENSOR_2; ClearTimer(1) 一回転ちょっと回るまでの間SENSOR_2が最大値のところからタイマー1を起動して測る。 } turn_search; 一回転ちょっとする。 } turn_backsearch; 定義された通り Off(OUT_AC); Wait(100); OnFwd(OUT_B); Wait(10); Off(OUT_B); 球を打ち出す。 } *おわりに [#e0381aa2] 一回転だと誤差で回り切れない場合があるので少しだけ多めに回れる時間に設定した。最初からボールを持たせているので、操作が開いて押し出す動作でよく、しかも一連の動作は連動しているので楽に済んだ。