[[2007b/MemberOnly/進行状況A]]
-----
CENTER:COLOR(crimson):&size(22){課題3:懐中電灯に向かってブロックを投げるロボット};
-----

RIGHT:訪れてくれた人の数 &counter(all);

LEFT:目次
#contents
*目的 [#c29ec5e6]
一番明るい方向を向き、その方向へブロックを投げるロボットを作る。

*課題 [#k0cadf90]
インストの「top secret」を参考にして、ブロック(一番太いホイール)を投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。~
(重複しないように一人一つ以上のプログラムを作成すること)~

LEFT:1、全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。~
LEFT:2、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。~
LEFT:3、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。~

ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。~
&ref(./DSC_0020.JPG,17%,ホイール);~
使用したホイール

*ロボット [#x7a07961]
&ref(./DSC_0001.JPG,25%,正面);
&ref(./DSC_0003.JPG,25%,横);~
             正面                            横~
&ref(./DSC_0004.JPG,25%,横);
&ref(./DSC_0006.JPG,25%,ななめ);~
             横                             ななめ~

**駆動部 [#u2147b5e]
&ref(./DSC_0011_3.jpg,25%,全体);~
後方にキャスターを設置して三輪で動くようにした。~
動くスピードが速いと一番明るい方向ををうまく発見できないのでゆっくりと動くように49.6×28のタイヤを使用。~

&ref(./DSC_0010.JPG,25%,ギア);
&ref(./DSC_0022.JPG,25%,ギア);~
ギアを立体的に収納し、駆動部を小さくした。~

&ref(./DSC_0017_2.jpg,25%,横);
&ref(./DSC_0019_2.jpg,25%,横);~
ラチェットが赤矢印の方向にはギアが回転しないようにギアを抑えてくれる。~
よって、黄色矢印方向にのみマシンが進むようになり、一つのモータで左右に動けるようになる。~
ラチェットがひっくりかえらないようにストッパーをつけた。~
左右でギア比を等しくするために右の写真ではギアを斜めに装着させた。~
正回転、逆回転を繰り返すことにより前に進むことができる。~

**投擲部 [#i159d7db]
&ref(./DSC_0009.JPG,20%,横);
&ref(./DSC_0008_2.jpg,20%,横);
&ref(./2DSC_0007_2.jpg,20%,横);~
遠心力を利用して飛ばすような機構を採用した。~
徹底的に軽量化を行い、少ない力でホイールを飛ばすようにした。~
右の写真の赤い矢印の方向に回転しホイールを投げます。~
小さいホイールならば1mほど投げられます。~

**光センサー部 [#t4fb00a2]
&ref(./DSC_0013.JPG,25%,センサ);
&ref(./DSC_0006_2.jpg,25%,全体);~
前方に二つ並べて設置した。~
センサとセンサに角度をつけると一番明るいところを正確に発見できないと思ったので角度はつけませんでした。
&ref(./DSC_0023.JPG,25%,センサ);~
上の写真のように、光を追うプログラムでは光センサの位置に角度をつける

**特徴 [#a3b07262]
ギアを斜めに装着している側のギアの噛み合いが少し悪かったのだが、地面に置いて走らせるとRCXの重さで車軸がゆがみ、ギアの噛み合いが異常に悪くなるのため、車軸を支える部品をつけた。このせいで片側が豪華に見える。~
&ref(./DSC_0015.JPG,25%,片側);

*ソースプログラム [#h5697724]
**一番明るい方向を向き、その方向へブロックを投げるプログラム [#j1c9d25e]
 #define RUN_TIME 300                        //およそ一周する時間
 
 task main(){
   int i,max;                  //i,maxを定義
   
   SetSensor(SENSOR_1,SENSOR_LIGHT);     //センサ1を光センサーに設定
   SetSensor(SENSOR_3,SENSOR_LIGHT);     //センサ3を光センサーに設定
 
   SetPower(OUT_C,7);              //モータの出力を7にする
 
   max=0;                    //光度の値の変数:一番明るかったところを記憶するための変数
  
   ClearTimer(1);              // Timer(1) をリセット
  
   while(FastTimer(1) < RUN_TIME){      //FastTimer(1)がRUN_TIME以下の時に繰り返す
      OnFwd(OUT_C);             //進行方向左に回転する
      if(SENSOR_1+SENSOR_3 >= max){     // より明るいところを発見した場合
         ClearTimer(0);           // Timer(0) をリセット
         max=SENSOR_1+SENSOR_3;       //maxの値は光センサ二つの和
      }                   //一周回る間に一番明るいところがmaxに記憶され、Timer(0)はその地点からスタートする。
   }
   OnRev(OUT_C);                   //逆回転する
   Wait(FastTimer(0));            //一番明るい位置まで回転
   Off(OUT_C);                 //一番明るい位置で停止
   
   PlayTone(450,5);             //警告音
   OnFwd(OUT_A);                //投擲機構始動
   Wait(40);
   Off(OUT_A);                //投擲終了
  }

**懐中電灯を動かした方へ進ませるプログラム [#k71f582b]
 #define THRESHOLD 60        // 閾値(光を当てたときの明るさ)
 #define RUN_TIME 100        //トレースする時間
 
 task main(){
   int i;                 //iを定義
   
    SetSensor(SENSOR_1,SENSOR_LIGHT);     //光センサ1
    SetSensor(SENSOR_3,SENSOR_LIGHT);      //光センサ3
    
    ClearTimer(0);                //Timer(0)をリセット
    
    while(FastTimer(0) < RUN_TIME){     //FastTimer(1)がRUN_TIME以下の時に繰り返す
       if(SENSOR_1 >= THRESHOLD && SENSOR_3 >= THRESHOLD){   //光センサ1,3が共に閾値60以上の場合(正面に光源がある場合)前進する
          OnFwd(OUT_C);           
          Wait(50);
          OnRev(OUT_C);
          Wait(50);
       }
       
       if(SENSOR_1 > THRESHOLD && SENSOR_3 <  THRESHOLD){ //センサ1の側に光源がある場合、光源の方向に向きを変える。
          OnFwd(OUT_C);                 
       }
       
       if(SENSOR_1 <  THRESHOLD && SENSOR_3 >  THRESHOLD){ //センサ3の側に光源がある場合、光源の方向に向きを変える。
          OnRev(OUT_C);                   
      }
       
       if(SENSOR_1 <  THRESHOLD && SENSOR_3 <  THRESHOLD){ //光センサ1,3ともに閾値60以下の場合(光源を見失った場合)
          Off(OUT_C);                       //停止する
       }
   }
 }


*結果 [#l07cb80f]
**結果 [#kece8608]
-ギアの噛み合わせが悪く、一番明るい位置に戻れないことが多く困った。
-投げたブロックは弧を描きながら、遠くに飛んだ~

**苦労した点 [#f65e0dd9]
-まず、どのような方法でブロックを投げるか決めるのに苦労した。最初は何回も回転させてから~
飛ばす方法を採用したが、飛ぶ方向を制御するのが難しく、あまり遠くに飛ばなかったので不~
採用となった。~
-ギア比を合わせるためのギアの配置が大変だった。斜めにギアを配置したため、RCXの重さで~
車軸が曲がり、ギアがかみ合わなくなってしまうことが発覚し、改善方法としてタイヤを小さい物~
に変更し、車軸を支える部品を装着した。

**工夫した点 [#q943f434]
-投擲部を軽くして、簡単にホイールを飛ばせる様にした。
-車軸が曲がらないように支えを付けたこと。

***ブロックの投げ方 [#l0fcefc1]
投擲部を軽くして、簡単にホイールを飛ばせる様にした。大きいホイールの場合は60cm程飛び、小さいホイールでは1mぐらい投げれた。

*問題点 [#h4e58359]
+ギアを斜めにつけているところの噛み合いをよくしなければならない。 
+光の感知の方法
+nqc本体の重みに耐えれるような構造にしなければならない。

*改善した車体 [#qb43b49a]
&ref(./DSC_0043.JPG,25%,正面);
&ref(./DSC_0044.JPG,25%,ななめ);~
ギアの配置を換え、上手くギアとギアがかみ合うように改良した。改良前の特徴点だったギアを支える部分が無くなった。

**ギアの配置 [#p736584e]
基本的にギアの噛み合いが悪かったためギアの配置を変更した。丁度よい位置にギアをはめる穴がなかったため~
ギアをつける部分を自分たちで作った。~
上から抑えないと多少不安定だがRCXでうまく抑えることができ、ほとんど空転せずに動くことができるようになった。~

&ref(./DSC_0025_2.jpg,25%,横);
&ref(./DSC_0024_2.jpg,25%,横);~
横から見た写真~
&ref(./DSC_0029.JPG,25%,上);
&ref(./DSC_0035.JPG,25%,部品);~
上から見るとこのようになっている。                ギアをつける部分。~

**光の感知の方法 [#xff598aa]
&ref(./DSC_0041.JPG,25%,衝立);
&ref(./DSC_0042.JPG,25%,衝立);~
ヒントを参考に、光を追うプログラムでは衝立をつけるようにしました。~

*改良した結果 [#x6c25324]
一番明るい方向を向き、その方向へブロックを投げるプログラム~
-空転することが無くなり、一番明るい場所にうまく戻れるようになった。

光を追うプログラム
-衝立のおかげで左右の明るさの判断ができるようになり、光についてきた。~

*課題3を終えて [#f5734004]
吉沢
-ディファレンシャル・ギアを作るのが大変だった。ギア比を合わせたり、ラチェットをうまく設置する場所がなかったり、重さでギアがかみ合わなくなったり、問題がたくさん発生し苦労しました。モーター一つで左右に動かせるこの技術はすごいと思うが、あまり使いたくない。

有馬
-デフなど各部分の構造とロボット全体としての構造のバランスをとるのに苦労した。
-なるべくシンプルな構造になるように努めた。


*コメント [#vf04abff]
よろしければコメントをお願いします

#comment

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