[[2007a/MemberOnly/進行状況A]]

*課題3 &size(35){懐中電灯に向かってブロックを投げるロボット};[#ae22717f]

**制作者 [#a21b7d42]
  &size(30){ten&サン}; 

*目次 [#scf2965b]

#contents


*ロボット紹介 [#b3de06b7]
このロボットは他のグループのロボットと違い左回りや、右回りだけでなく直進もできます。右のタイヤと、左のタイヤとではギア比が違い回転数と回転速度が異なるためギア比を調節するために何時間も頑張りました。直進といっても、まだギア比が違っていて多少曲がって行ってしまうのですが、ほとんど直進でライトの光を追って行くのには、何の問題もありません!!

#ref(2007a/A3/課題3左/hahahahahahahahahaaaa.jpg,30%,)



まず、モータの1つ目を左タイヤとブロックを投げる部分に使用しました。2つめのモータは右タイヤと前進のために使用しました。ギアをたくさん使ってしまったので、ロボ本体のライトの光を追跡するスピードがかなり遅くなってしまいました。

#ref(./HI380004.jpg,30%,)

もともとブロックをたくさん使ってあるので車体が重く、前タイヤを取り付けると床との間に摩擦が生じスムーズに進めなくなるため、前輪の代わりのもの(写真参照)を取り付けた。

#ref(070703_1951~0001.jpg)


ブロックを投げる部分は、プログラム上では[OnRev]で投げることができる。また、軽量化を目指しなるべく遠くに飛ばせるようにした。


*製作過程 [#n2d885fa]
まずはじめに、1つのモータ車体を動かすために使用し、もう1つのモータをブロックを投げるために使用しようとした。そのため最初に製作した車体ベース(主にモータとタイヤ)では、左回りと右回りしかできなかった。

なので、モータの1つ目を左タイヤとブロックを投げる部分に使用し、2つ目のモータは右タイヤと前進のために使用することにしました。

&ref(070703_1957~0001.jpg); → &ref(./HI380004.jpg,30%,);




前輪は摩擦のため写真のようなものを取り付けた。しかし、摩擦の原因は前輪のゴムの部分にあると考え、さらに改良を加えた。

&ref(./HI380006.jpg,50%,);  → &ref(070703_1943~0001.jpg); → &ref(070703_1950~0002.jpg);

アームはホイールをのせる部分が重かったために、投げるというより下に落とすという感じになってしまったために、改造した。

&ref(070703_1941~0001.jpg); → &ref(070703_1940~0002.jpg);




*プログラム [#ca2c87aa]
**その1 [#z1194cc1]
全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。

●ten 
 
 task main ()
 {
    SetSensor(SENSOR_1, SENSOR_LIGHT);  //センサー1が光センサーであることを示す。
    OnFwd(OUT_C);             //光を見つけるまで左回りします。
    until (SENSOR_1 >35) ;        //もし光を見つけたら
    Off(OUT_C);              //回転を止めて
    OnRev(OUT_A);Wait(50);       //ブロックを投げます。
    Off(OUT_A);             //ブロックを投げた後、アームを止めます。
 }

●サン

 task main ()
 {
 SetSensor(SENSOR_1,SENSOR_LIGHT);                   //センサ1が光センサであると宣言
   
 
 while(ture){                                                         //無限ループ
   if (SENSOR_1>38){                                            //センサ1が光を感知したとき
      OnFwd(OUT_A);                                             //右回転
      Off(OUT_C);
    }else{                                                               //センサが光を感知していないとき                      
       Off(OUT_A);                                                  //左回転
       OnFwd(OUT_C);
     }
  }

**その2 [#g19a56b2]
懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。

●ten 

 task main ()
 {   
      SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1が光センサーであり、
      SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3も光センサーであることを示す。
      while(true){
                   
           if  (SENSOR_1>38) {      //もし両方のセンサーが
           if  (SENSOR_3>38) {      //光を見つけたら
                 SetPower(OUT_A,3);    //      ←※
                 OnFwd(OUT_A) ;     //前進します。
                 OnFwd(OUT_C) ;
           }else{            //もし光が左にずれたら
                 Off(OUT_A) ;      
                 OnFwd(OUT_C) ;     //左に曲がります。
           }
           }else{             //もし光が右にずれたら
            if  (SENSOR_3>38) {
                 SetPower(OUT_A,3); 
                 OnFwd(OUT_A) ;     //右に曲がります。
                 Off(OUT_C) ;
           }else{                   //もしセンサーが光を
                 OnFwd(OUT_C);      //見つけられなかったら。
                 Off(OUT_A) ;      //右に回り続けます。
          }
       }
    }
 }                    
                         
※Aのタイヤがやや回転速度が遅いため、少し回転の強さを上げてあります。

●サン
 
 task main ()
 {
 SetSensor(SENSOR_1,SENSOR_LIGHT);   //センサ1,3が光センサであると宣言
 SetSensor(SENSOR_3,SENSOR_LIGHT);
 
  
  while(true){                                          //無限ループ
   if(SENSOR_1>38){                               //センサ1が光を感知したとき(ア)
      if(SENSOR_3>38){                            //センサ3も光を感知したとき
         OnFwd(OUT_A);                            //直進
         OnFwd(OUT_C);
        }else{                                             //(ア)のときでセンサ3が光を感知していないとき
         Off(OUT_A);                                  //左回転
         OnFwd(OUT_C);
         }
     }else{                                                //センサ1が光を感知していないとき(イ)
       if(SENSOR_3>38){                           //(イ)のときでセンサ3が光を感知しているとき             
         OnFwd(OUT_A);                            //右回転
         Off(OUT_C);            
        }else{                                             //センサ1,3が光を感知してないとき
          Off(OUT_A);                                 //左回転
          OnFwd(OUT_C);
        }
     }
   }
 }  


**その3 [#la4186ab]
懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。

●ten 

 #define THRRSHOLD 40
 task main ()
 {   
      SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1が光センサーであり、
      SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3も光センサーであることを示す。
      while(true){
           
           if ( (SENSOR_1>52)&&(SENSOR_3>52)) { //ライトに近づいたら
                  Float(OUT_C);          //タイヤの回転を止め
                  OnRev(OUT_A);Wait(50);    //ブロックを投げます。
                  Off(OUT_A);  
           }else{
       
           if  (SENSOR_1>38) {          //もし両方のセンサーが
           if  (SENSOR_3>38) {          //光を見つけたら
                    SetPower(OUT_A,3);  //      ←※
                   OnFwd(OUT_A) ;       //前進します。
                   OnFwd(OUT_C) ;
           }else{            //もし光が左にずれたら
                   Off(OUT_A) ;
                   OnFwd(OUT_C) ;    //左に曲がります。
           }
           }else{            //もし光が右にずれたら
            if  (SENSOR_3>38) {
                  SetPower(OUT_A,3); 
                 OnFwd(OUT_A) ;       //右に曲がります。
                 Off(OUT_C) ;
           }else{                //もしセンサーが光を
                 OnFwd(OUT_C);        //見つけられなかったら。
                 Off(OUT_A) ;        //右に回り続けます。
             }
          }
       }
    }
 }  

※Aのタイヤがやや回転速度が遅いため、少し回転の強さを上げてあります。

●サン 

 task main ()
 {
 SetSensor(SENSOR_1,SENSOR_LIGHT);            //センサ1,3が光センサであると宣言
 SetSensor(SENSOR_3,SENSOR_LIGHT);
 
 
  while(true){                                                    //無限ループ
   if((SENSOR_1>52)&&(SENSOR_3>52)){          //センサ1,3が光を強く感じたとき
       OnRev(OUT_A);                                        //ブロックを投げる
       Off(OUT_C);
     }else{
     
     if(SENSOR_1<38){                                      //センサ1が光を感知していないとき(ア)
        if(SENSOR_3>38){                                   //(ア)のときでセンサ3が光を感知したとき
           OnFwd(OUT_A);                                   //右回転
           Off(OUT_C);
          }else{                                                    //センサ1,3が光を感知していないとき
           OnFwd(OUT_C);                                   //左回転
           Off(OUT_A);
           }
       }else{                                                       //センサ1が光を感知したとき
      if(SENSOR_3<38){                                     //センサ3が光を感知していないとき
         OnFwd(OUT_C);                                     //左回転
       Off(OUT_A);
       }else{                                                       //センサ1,3が光を感知したとき
         OnFwd(OUT_A);                                     //直進
         OnFwd(OUT_C);
              }
          }
       }
    }
 }


*工夫した点 [#j9a6770e]
モータの2つにそれぞれ役割を持たせ、右左折と前進をできるようにできた。更にそのときに、タイヤの回転数が違ったためにギア比を調節し、直進できるようにした。
片方のモーターを、ブロックを投げるためだけに使うのはあまりにももったいなくて、しかも、右にも左にも曲がれるという点にこだわって、モータの2つにそれぞれ役割を持たせ、右左折と前進をできるようにできた。更にそのときに、タイヤの回転数が違ったためにギア比を調節し、ほとんど直進できるようにした。

[OnRev]によりブロックを投げることができるがモータにその他の役割もつけているのであまり飛ばなッかため、黒いブロックを途中につけ慣性の力(?)を利用し遠くに飛ばせるようにした。
ブロックを投げるアームが、最初は長くして遠心力を利用してなるべく遠くに跳ばそうと試みたが、アームが少し重くなり回転できなくなってしまいやもえなく短くした。しかし、少しでも回転が速くなるように改良に改良を重ねて、軽くした!!

[OnRev]によりブロックを投げることができるがモータにその他の役割もつけているのであまり飛ばなッかため、黒いブロックを途中につけ慣性の法則(?)を利用し遠くに飛ばせるようにした。


*苦労した点 [#n3bd8267]
2つのモータで車体を右回り、左回りと前進さらにブロックを投げさせるのには一番苦戦した。その中でも直進は左右のタイヤの回転数が異なったため、ギア比を調節したり、プログラム上に[SetPower]を組こんだりするなどの苦労があった。

実際に光を追いかけさせると、光をなかなか認識してくれずプログラムの数値を合わせるのに苦労した。

組み立てる過程で、ギアの部分がかなりキツくしまってしまい、ギアの回転速度はおろか、回すのもかなりの力が必要になってしまい、それを解消するのに一度全部解体して、原因を探すのに苦労し、またもう一度組みたてるのが大変だった。

*感想 [#t924d680]
今回はプログラムより車体を作るのが大変だった。また、実際に走らせてみるとすぐに光を見失ってしまって再度光を探すというような動きになってしまい残念だった。光センサを上向きにするなどの改良するなど、他のチームのロボットをみて良い勉強になった。

他のチームのロボットと違い右左折と前進ができるロボットをつくることができ良かったが、ブロックの投げが
他のチームに比べ飛んでいないので残念だった。

プログラムは二人別々につくったのだが結局同じようなプログラムになってしまったので、関数などを使ったプログラムにも時間があれば挑戦してみたい。
 
*コメントお願いします!! [#q389ac76]

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS