[[2007a/MemberOnly/進行状況A]] ~ CENTER:&ref(2007a/A5/課題3左/Scorpion.jpg,40%,全体); ~ #contents *課題3 [#w700887d] 光を追う+ブロックを投げる 1.全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。 2.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。 3.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。 ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。 *ロボット SCORPION[#e90bbbc3] 名前の由来→ロボットの形を見てください!!(^^) &ref(2007a/A5/課題3左/200707051901000.jpg,50%,全体); **苦労した点 [#rd5a3925] とにかくブロックを投げるところが上手くいかなかったです。 相方が一生懸命ロボットを作ってくれていました... 試作1号として、パチンコみたいな形を作成!! →どうストッパー(ブロックを落ちないようにするため)を設置するのか,引っ張った状態でどう固定するのか,さらにこんな大きいものをどこにつけるのか!?という様々な問題が発生したのでNG &ref(2007a/A5/課題3左/robo.jpg,100%,投げる所その1); 結局シンプルISベストということで、こんな形になりました。 &ref(2007a/A5/課題3左/NEC_0064.jpg,25%,投げる所その2); また、今回モーターを2個しか使えないということなので、ディファレンシャルギアを駆使してモーター1つでどうにか動かすことに挑戦しました。 いざ走らせてみるとここでも問題が発生!! 4輪にするとうまくまわらないので、3輪にしました。ですが、後ろにあるタイヤの強度に大きな問題が… なので、かなり小さめの車輪を勝手に作り出し設置→安定して走るようになりました! **工夫した点 [#mf4f8ff6] タイヤを飛ばすためのアームの強度があまりにも弱く、全然飛んでいかなかったので、小さいブロックを1つ付けてより勢いがつくようにしました。 &ref(2007a/A5/課題3左/NEC_0063.jpg,25%,投げる所工夫); *プログラミング [#b566222e] 今回は相方が大活躍!!その1を基本ベースとしてその2,3へと応用していきました。 その1 担当ち,つ #define THRESHOLD 48 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1を光センサーと定義 SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3を光センサーと定義 SetPower(OUT_A+OUT_C,7);//AとCのモーターの出力を7にする while(true { if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)))//センサー1と3が受ける光が閾値より弱ければ { OnFwd(OUT_A);//時計回りに回転 } else { Off(OUT_A);//両方とも受ける光が閾値より強くなったらブロックを投げる OnRev(OUT_C); Wait(150); OnFwd(OUT_C); Wait(150); Off(OUT_C); Wait(300); } } } #define THRESHOLD 48 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1を光センサーと定義 SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3を光センサーと定義 while(true){ if(SENSOR_1>THRESHOLD) {//センサーの受ける光が閾値より弱かった時 OnRev(OUT_A)//時計回り }else{ OnRev(OUT_C);//ブロックを投げる Wait(150); OnFwd(OUT_C); Wait(150); Off(OUT_C); Wait(300); } } } その2 担当 ち,つ #define THRESHOLD 45 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT);//センサーを定義 SetSensor(SENSOR_3,SENSOR_LIGHT); SetPower(OUT_A+OUT_C,7);//AとCのモーターの出力を7にする while(true) { if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)))//センサー1と3が受ける光が閾値より弱ければ { OnFwd(OUT_A);//時計回り } else { OnRev(OUT_A);//前進 } } } #define THRESHOLD 48 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT);//センサーを定義 SetSensor(SENSOR_3,SENSOR_LIGHT); while(true){ if(SENSOR_1>THRESHOLD) {//センサー1が受ける光が閾値より大きければ OnRev(OUT_A);//前進 }else{//小さければ OnFwd(OUT_A);//時計回り } } } その3 担当 ち #define THRESHOLD 48 #define XDAY 30////XDAYを3秒に定義する task main() { SetSensor(SENSOR_1,SENSOR_LIGHT);//センサーを定義 SetSensor(SENSOR_3,SENSOR_LIGHT); SetPower(OUT_A+OUT_C,7);//AとCのモーターの出力を7にする while(true) { if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))//センサー1と3の受ける光が閾値より小さかった時 { OnFwd(OUT_A);//時計回り } else { ClearTimer(0);//タイマーをクリアする OnRev(OUT_A); until( Timer(0) >= XDAY); Off(OUT_A); OnRev(OUT_C); until( Timer(0) >= XDAY);//XDAY(3秒)よりタイマーが大きくなるまで Off(OUT_A);//反時計回り OnRev(OUT_C);//ブロックを投げる Wait(150); OnFwd(OUT_C); Wait(150); Off(OUT_C); Wait(300); } } } *反省点 [#z1d21769] 今回の課題は今までよりも数段レベルが高く、かなり焦りました。 相方に何もかもお世話になってしまい、本当に申し訳ないと心底反省しています。 *COMMENTS [#b55e24ae] コメントをよろしくお願いします('人') -プログラムの解説、コメント等をつけてください。 -- [[まいける(TA)]] &new{2007-07-11 (水) 00:06:28}; -工夫した点の、小さいブロックを1つつけたというのが、どれのことかよくわかりません。 -- [[まいける(TA)]] &new{2007-07-11 (水) 19:26:28}; -画像を加工しました。 -- [[つ]] &new{2007-07-12 (木) 17:42:38}; -プログラムその3に、投げる動作がない気がするのですが。課題では投げることが要求されています。 -- [[まいける(TA)]] &new{2007-07-14 (土) 14:17:24}; -「タイマーをクリアする」以降でその動作をしているのでしょうか? -- [[まいける(TA)]] &new{2007-07-14 (土) 14:21:36}; -シンプルに仕上げられていると思います。 -- [[ヒロヤ]] &new{2007-07-14 (土) 22:35:15}; -まいけるさん そうです。解説つけました。 -- [[つ]] &new{2007-08-20 (月) 10:28:52}; #comment