[[2007b/A1]]

-----
CENTER:size(22){課題3:光を追いかけブロックを投げるロボ};
-----

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

LEFT:メニュー
#contents

懐中電灯の光を追い、その方向へブロックを投げるロボットの作成。

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

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

ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。

*ロボ紹介 [#va7c6a65]
** 全体 [#edc93fae]
#ref(Image297.jpg)
カッコいいでしょ!!
無駄なパーツ??そんなものはありません!!(笑)

** 駆動部分 [#tcf7c561]
#ref(Image293.jpg)
モーターが2個までしか使えないため、1つをタイヤにもう1つを投擲部に使いました。
そのためタイヤにはディファレンシャルギアを採用!!1つのモーターで左右への転回を実現。

** ラチェット部分 [#u5a8604b]
#ref(Image294.jpg)
ギアの回転の逆流を防ぐため、ラチェットを付けました。
** キャスター部分 [#fa815519]
#ref(Image304.jpg)
キャスターの奥光センサーの青いブロックが見えますか?
このロボは光センサーを下に付けているんです。
** 投石部分 [#i0fb60b0]
#ref(Image302.jpg)
後ろの尻尾に接続されたモーターを動かすと・・・
#ref(Image301.jpg)
発射!!
* プログラム [#j0d5c156]
** テーマ1、 [#u94b7269]

*a [#tf88a431]

 task main() 
 {  SetSensor(SENSOR_1,SENSOR_LIGHT);
    SetSensor(SENSOR_2,SENSOR_TOUCH);
    SetSensor(SENSOR_3,SENSOR_LIGHT);
    while(true)
       {Off(OUT_B);
          while(SENSOR_3>SENSOR_1)
          {OnRev(OUT_B);Wait(10);
          }
          while(SENSOR_3<SENSOR_1)
          {OnFwd(OUT_B);Wait(10);
          }
          if((SENSOR_1>50)&&(SENSOR_3>50))
          {while(SENSOR_3>SENSOR_1)
             {OnRev(OUT_B);Wait(10);
             }
           while(SENSOR_3<SENSOR_1)
             {OnFwd(OUT_B);Wait(10);
             }
           if((-5<SENSOR_1)&&(SENSOR_1-SENSOR_3<5))
             {Off(OUT_C);Off(OUT_B);
                 Wait(60);
                 OnRev(OUT_C);Wait(15);
                 OnFwd(OUT_C);Wait(3);
                 Off(OUT_C);}Wait(100);
             }
         }
     }
 }

*b [#k7f286ac]

 #define THRESHOLD 40
 task main()
   {
   SetSensor(SENSOR_1,SENSOR_LIGHT);
   SetSensor(SENSOR_3,SENSOR_LIGHT);  
   while(true)
      {
      if(SENSOR_1 > THRESHOLD)
         {
         if(SENSOR_3 > THRESHOLD)
            {
            Off(OUT_B);Wait(300);
            if(SENSOR_1+SENSOR_3 > THRESHOLD)
               {
               OnRev(OUT_C);Wait(15);
               OnFwd(OUT_C);Wait(1);
               Off(OUT_C);Wait(100);
               }
            }
         if(SENSOR_3 < THRESHOLD)
            {
            OnFwd(OUT_B);Wait(15);
            Off(OUT_B);
            }
         }
      if(SENSOR_1 < THRESHOLD)
         {
         if(SENSOR_3 > THRESHOLD)
            {
            OnRev(OUT_B);Wait(15);
            Off(OUT_B);
            }
         if(SENSOR_3 < THRESHOLD)
            {
            OnRev(OUT_B);Wait(15);
            Off(OUT_B);
            }
         }
      }
   }

**テーマ2、 [#uc9eab7c]

*a [#n53fb021]

 task main(){
  SetSensor(SENSOR_1, SENSOR_LIGHT);
  SetSensor(SENSOR_3, SENSOR_LIGHT);
  while(true){
    if(SENSOR_1<=30&&SENSOR_3<=30){
      OnFwd(OUT_A);
      Wait(100);
    }
    else if(-15<=SENSOR_1-SENSOR_3&&SENSOR_1-SENSOR_3<=15){
           OnFwd(OUT_A);
           Wait(50);
           OnRev(OUT_A);
           Wait(50);
           Off(OUT_A);
        }
        else if(SENSOR_1-SENSOR_3>15){
           OnFwd(OUT_A);
           Wait(40);
           Off(OUT_A);
        }
        else{
           OnRev(OUT_A);
           Wait(40);
           Off(OUT_A);
        }
   }
}

*b [#bf917c89]

 #define THRESHOLD 40
 task main()
   {
   SetSensor(SENSOR_1,SENSOR_LIGHT);
   SetSensor(SENSOR_3,SENSOR_LIGHT);
     
   while(true)
      {
      if(SENSOR_1 > THRESHOLD)
         {
         if(SENSOR_3 > THRESHOLD)
            {
            Off(OUT_B);Wait(300);
            if(SENSOR_1+SENSOR_3 > THRESHOLD)
               {
               Off(OUT_B);Wait(300);
               while(SENSOR_1+SENSOR_3 < THRESHOLD)
                  {
                  OnFwd(OUT_B);Wait(15);
                  OnRev(OUT_B);Wait(15);
                  }
               Off(OUT_B);
               }
            }
         if(SENSOR_3 < THRESHOLD)
            {
            OnFwd(OUT_B);Wait(15);
            Off(OUT_B);
            }
         }
      if(SENSOR_1 < THRESHOLD)
         {
         if(SENSOR_3 > THRESHOLD)
            {
            OnRev(OUT_B);Wait(15);
            Off(OUT_B);
            }
         if(SENSOR_3 < THRESHOLD)
            {
            OnRev(OUT_B);Wait(15);
            Off(OUT_B);
            }
         }
      }
   }

**テーマ3、 [#a2ef2433]

*a [#fab526a7]
  task main()
   {
   SetSensor(SENSOR_1,SENSOR_LIGHT);
   SetSensor(SENSOR_3,SENSOR_LIGHT);
   while(true)
      {
      if(SENSOR_1 > 30)
         {
         if(SENSOR_3 > 30)
            {Off(OUT_B);Wait(300);
            if(SENSOR_1+SENSOR_3 > 30)
            {Off(OUT_B);Wait(300);
            while(true)
               {while(SENSOR_1+SENSOR_3 < 30)
                  {OnFwd(OUT_B);Wait(15);
                   OnRev(OUT_B);Wait(15);
                  }
                Off(OUT_C);Wait(100);
                if(SENSOR_1+SENSOR_3 > 30)
                   {OnRev(OUT_C);Wait(15);
                    OnFwd(OUT_C);Wait(1);
                    Off(OUT_C);Wait(100);
                   }
                }
            }
         }
         if(SENSOR_3 < 30)
         {OnFwd(OUT_B);Wait(15);
          Off(OUT_B);
         }
      }
      if(SENSOR_1 < 30)
      {if(SENSOR_3 > 30)
         {OnRev(OUT_B);Wait(15);
          Off(OUT_B);
         }
      if(SENSOR_3 < 30)
      {OnRev(OUT_B);Wait(15);
       Off(OUT_B);
      }
    }
  }
}



*b [#w87cba5d]

 #define THRESHOLD 40
 task main()
   {
   SetSensor(SENSOR_1,SENSOR_LIGHT);
   SetSensor(SENSOR_3,SENSOR_LIGHT);
   while(true)
      {
      if(SENSOR_1 > THRESHOLD)
         {
         if(SENSOR_3 > THRESHOLD)
            {
            Off(OUT_B);Wait(300);
            if(SENSOR_1+SENSOR_3 > THRESHOLD)
               {
               Off(OUT_B);Wait(300);
               while(true)
                  {
                  while(SENSOR_1+SENSOR_3 < THRESHOLD)
                     {
                     OnFwd(OUT_B);Wait(15);
                     OnRev(OUT_B);Wait(15);
                     }
                  Off(OUT_C);Wait(100);
                  if(SENSOR_1+SENSOR_3 > THRESHOLD)
                     {
                     OnRev(OUT_C);Wait(15);
                     OnFwd(OUT_C);Wait(1);
                     Off(OUT_C);Wait(100);
                     }
                  }
               }
            }
         if(SENSOR_3 < THRESHOLD)
            {
            OnFwd(OUT_B);Wait(15);
            Off(OUT_B);
            }
         }
      if(SENSOR_1 < THRESHOLD)
         {
         if(SENSOR_3 > THRESHOLD)
            {
            OnRev(OUT_B);Wait(15);
            Off(OUT_B);
            }
         if(SENSOR_3 < THRESHOLD)
            {
            OnRev(OUT_B);Wait(15);
            Off(OUT_B);
            }
         }
      }
   }

*結果 [#a6e500da]
**改善した点 [#qae0af54]
-キャスターを若干高めに作り重心を後ろにしました。
-最初はロボが一向に進みませんでした。そこで地面との摩擦を減らすためにタイヤを外しホイールのみで動かせたところ見事動き出しました。
-

** [#c6845256]
*感想 [#qe14f300]
まだプログラムが未完成です。
*コメント [#f2eb1b1f]
よろしければコメントをお願いします

#comment


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