*目次 [#edaaf49e] #contents *課題3 懐中電灯に向かってブロックを投げるロボットの製作 [#bf1993b2] 以下の動きをするロボットとプログラムを作成した。 -全方向から懐中電灯の方向を探し出し、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。 -懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。 -懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。~ ※ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。 **ロボット製作 [#h46cb510] #ref(2008a/A1/課題3左/全体3.jpg,70%,全体); 全体を撮った写真~ #ref(2008a/A1/課題3左/横3.jpg,70%,横); 横からの写真~ #ref(2008a/A1/課題3左/前3.jpg,70%,前); 前からの写真~ #ref(2008a/A1/課題3左/投げ3.jpg,70%,投げ); 投げる部分の写真~ **プログラム作成 [#je38350b] #define THRESHOLD 40 sub throw()//ホイールを投げる動作 { OnFwd(OUT_C); Wait(100); Off(OUT_C); } task main () { SetSensor(SENSOR_1,SENSOR_LIGHT);//光センサーを1にセット SetSensor(SENSOR_3,SENSOR_LIGHT);//光センサーを3にセット while(true) { while((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD)) //光センサー1,3が共に光を感知しなかったとき { OnFwd(OUT_A);//右回り Wait(100); Off(OUT_A); } while((SENSOR_1 >= THRESHOLD) && (SENSOR_3 < THRESHOLD))//光センサー1は光を感知したが、3 は感知しなっかったとき { OnFwd(OUT_A);//右回り Wait(100); Off(OUT_A); } while((SENSOR_1 < THRESHOLD) && (SENSOR_3 >= THRESHOLD))//光センサー3は光を感知したが、1は感知しなかったとき { OnRev(OUT_A);//左回り Wait(30); Off(OUT_A); } while((SENSOR_1 >= THRESHOLD) && (SENSOR_3 >= THRESHOLD))//光センサー1、3共に光を感知したとき { throw();//ホイールを投げる Off(OUT_A); } } } #define THRESHOLD 40 sub throw()//ホイールを投げる動作 { OnFwd(OUT_C); Wait(100); Off(OUT_C); } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT);//光センサーを1にセット SetSensor(SENSOR_3,SENSOR_LIGHT);// while (true) { if((SENSOR_1 < THRESHOLD)&&(SENSOR_3 < THRESHOLD)) //光センサー1、3共に光を感知していない場合。 { OnFwd(OUT_B); //右回りに進む。 Wait(30); } if((SENSOR_1 > THRESHOLD)&&(SENSOR_3 < THRESHOLD)) //光センサ−1のみ光を感知した場合。 { OnFwd(OUT_B); //右回りに進む。 Wait(30); } if((SENSOR_1 < THRESHOLD)&&(SENSOR_3 > THRESHOLD)) //光センサー3のみ光を感知した場合。 { OnRev(OUT_B); //左回りに進む。 Wait(6); } if((SENSOR_1 > THRESHOLD)&&(SENSOR_3 > THRESHOLD)) //光センサー1、3共に光を感知した場合。 { throw(); } } ] #define THRESHOLD 40 sub throw()//ホイールを投げる動作 { OnFwd(OUT_C); Wait(100); Off(OUT_C); } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT);//光センサーを1にセット SetSensor(SENSOR_3,SENSOR_LIGHT);// while (true) { if((SENSOR_1 < THRESHOLD)&&(SENSOR_3 < THRESHOLD)) //光センサー1、3共に光を感知していない場合。 { OnFwd(OUT_B); //右回りに進む。 Wait(30); } if((SENSOR_1 > THRESHOLD)&&(SENSOR_3 < THRESHOLD)) //光センサ−1のみ光を感知した場合。 { OnFwd(OUT_B); //右回りに進む。 Wait(30); } if((SENSOR_1 < THRESHOLD)&&(SENSOR_3 > THRESHOLD)) //光センサー3のみ光を感知した場合。 { OnRev(OUT_B); //左回りに進む。 Wait(6); } if((SENSOR_1 > THRESHOLD)&&(SENSOR_3 > THRESHOLD)) //光センサー1、3共に光を感知した場合。 { throw(); } } ] **苦労・工夫した点 [#q5c103dd] **感想 [#y8b23b5c] **コメントをお願いします [#n08a6ee6] #comment