[[2008a/A9]] *目次 [#o7d81a6e] #contents *課題 [#l89450dc] ~今回の課題は次の3つです。(練習問題のページからのコピー&ペーストです。 ~全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。 ~懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。 ~懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。 *ロボットの本体部分 [#p0286284] ~次の写真がロボットの全体像です。 #ref(2008a/A9/DSCF0024.JPG,640x480) ~今回の課題の難関であるホイールを投げる、という部分は次の様にシンプルに仕上げました。 #ref(2008a/A9/DSCF0027.JPG,640x480) ~構造は単純でモーターの回転でアームが連動しホイールを投げる。 ~それだけの構造です。 ~ただ、回転の勢いで壊れてしまわない様にアーム周辺は下の様に強化を施してあります。 #ref(2008a/A9/DSCF0032.JPG,320x240) ~また回転しすぎないようストッパーの役割も持たせてあります。 #ref(2008a/A9/DSCF0033.JPG,320x240) ~今回の課題では、モーターをアーム部分とタイヤ部分含めて合計2個のモーターで行え、という制限がありました。 そのため、下の様に左右のタイヤを接続しています。 #ref(2008a/A9/P2008_0701_193842.JPG,640x480) ~また、3つ目の課題以外は、ロボット本体が動く必要がないため回転の補助用に車輪を後ろに付けてあります。 #ref(2008a/A9/DSCF0038.JPG,640x480) ~最後に、光センサはこんな風に取り付けてあります。 #ref(2008a/A9/DSCF0025.JPG,640x480) *ロボットのプログラム [#ibaf4475] ~一つ目の課題: 全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。 ~これ用のプログラムは以下のようになります。 #define LIGHT_1 45; #define LIGHT_2 40; sub shoot() { OnFwd(OUT_A); Wait(50); Off(OUT_A); } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while((SENSOR_1<LIGHT_1)&&(SENSOR_2<LIGHT_2)) { OnFwd(OUT_C); Wait(100); Off(OUT_C); } while((SENSOR_1<LIGHT_1)&&(SENSOR_3>=LIGHT_2)) { OnFwd(OUT_C); } while((SENSOR_3<LIGHT_2)&&(SENSOR_1>=LIGHT_1)) { OnRev(OUT_C); } if((SENSOR_3>=LIGHT_2)&&(SENSOR_1>=LIGHT_1)) { shoot(); } } ~2つ目の課題: ~懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。 ~この課題用のプログラムは以下のようになります。 #define LIGHT_1 45; #define LIGHT_2 40; sub shoot() { OnFwd(OUT_A); Wait(50); Off(OUT_A); } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while((SENSOR_1<LIGHT_1)&&(SENSOR_2<LIGHT_2)) { OnFwd(OUT_C); Wait(100); Off(OUT_C); } while((SENSOR_1<LIGHT_1)&&(SENSOR_3>=LIGHT_2)) { OnFwd(OUT_C); } while((SENSOR_3<LIGHT_2)&&(SENSOR_1>=LIGHT_1)) { OnRev(OUT_C); } if((SENSOR_3>=LIGHT_2)&&(SENSOR_1>=LIGHT_1)) { Wait(300); shoot(); } } ~三つ目の課題: ~懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。 ~これ用のプログラムは以下のようになります。 #define LIGHT_1 45; #define LIGHT_2 40; sub shoot() { OnFwd(OUT_A); Wait(50); Off(OUT_A); } sub walk() { while((SENSOR_1>=50)&&(SENSOR_1>=45)) { OnFwd(OUT_A); Wait(30); OnRev(OUT_A); Wait(30); } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while((SENSOR_1<LIGHT_1)&&(SENSOR_2<LIGHT_2)) { OnFwd(OUT_C); Wait(100); Off(OUT_C); } while((SENSOR_1<LIGHT_1)&&(SENSOR_3>=LIGHT_2)) { OnFwd(OUT_C); } while((SENSOR_3<LIGHT_2)&&(SENSOR_1>=LIGHT_1)) { OnRev(OUT_C); } if((SENSOR_3>=LIGHT_2)&&(SENSOR_1>=LIGHT_1)) { Wait(300); walk(); shoot(); } } *今回の課題の反省、感想 [#d1b461a4] ~今回の課題の大変なところ、それは期間が短いという点です。 ~前回までなら二週間は与えられたのに対して今回は一週間。 ~そのため、遅くまで残り仕上げる事になりました。 ~時間が短いために、シンプルになってしまった部分もありますが、とは言え限られた時間内では最大の物が出来たの思います。 *一言 [#ba40cdfc] ~A9の以前の課題で評価されていない項目がありますので、ぜひ評価をお願いします。