[[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);
         SetSensor(SENSOR_3,SENSOR_LIGHT);
         SetPower(OUT_A+OUT_C,7);
                
         while(true)
         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))
                    if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)))//センサー1と3が受ける光が閾値より弱ければ
 
 
                    {
                        OnFwd(OUT_A);  
                        OnFwd(OUT_A);//時計回りに回転  
                    }
                    
                    else
                      else
                    
                    {
                       Off(OUT_A);
                       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);
 SetSensor(SENSOR_3,SENSOR_LIGHT);
 SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1を光センサーと定義
 SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3を光センサーと定義
 
 while(true){
 if(SENSOR_1>THRESHOLD) {
 OnRev(OUT_A)
 if(SENSOR_1>THRESHOLD) {//センサーの受ける光が閾値より弱かった時
 OnRev(OUT_A)//時計回り
 }else{
 OnFwd(OUT_A);
 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_1,SENSOR_LIGHT);//センサーを定義
         SetSensor(SENSOR_3,SENSOR_LIGHT);
         SetPower(OUT_A+OUT_C,7);
         SetPower(OUT_A+OUT_C,7);//AとCのモーターの出力を7にする
                
         while(true)
         {
                    if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))
                    if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)))//センサー1と3が受ける光が閾値より弱ければ
 
                    {
                        OnFwd(OUT_A);  
                        OnFwd(OUT_A);//時計回り
                   }
                    else
                    {
                       OnRev(OUT_A);
                       OnRev(OUT_A);//前進
                    }     
         }
 }

 define THRESHOLD 48
 #define THRESHOLD 48
 task main()
 {
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_1,SENSOR_LIGHT);//センサーを定義
 SetSensor(SENSOR_3,SENSOR_LIGHT);
 
 while(true){
 if(SENSOR_1>THRESHOLD) {
 OnRev(OUT_C);
 Off(OUT_A);
 }else{
 OnFwd(OUT_A);
 if(SENSOR_1>THRESHOLD) {//センサー1が受ける光が閾値より大きければ
 OnRev(OUT_A);//前進
 
 }else{//小さければ
 OnFwd(OUT_A);//時計回り
 }
 }
 } 


その3 担当 ち

 #define THRESHOLD 48
 #define XDAY 30
 #define XDAY 30////XDAYを3秒に定義する
 
 task main()
 {
         SetSensor(SENSOR_1,SENSOR_LIGHT);
         SetSensor(SENSOR_1,SENSOR_LIGHT);//センサーを定義
         SetSensor(SENSOR_3,SENSOR_LIGHT);
         SetPower(OUT_A+OUT_C,7);
         SetPower(OUT_A+OUT_C,7);//AとCのモーターの出力を7にする
 
                
         while(true)
         {
                    if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))
                    if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))//センサー1と3の受ける光が閾値より小さかった時
                    {
                        OnFwd(OUT_A);  
                        OnFwd(OUT_A);//時計回り  
                    }
                    else
                    {
                       ClearTimer(0);
                       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
    


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS