**目次 [#rafa16c0]
#contents
*課題2ライントレースするロボットを作成せよ!! [#zf57fcd9]
~各チームで作成したコースを3周するロボットを製作。交差点のうちの一つには500mlの空の紙パックをおき、次のような動作するプログラムを作成。(他のメンバーと重ならないように一人一つのプログラムを作成する)

~1,紙パックを迂回する、あるいは紙パックをもとの位置に戻したのちコースに戻って進む (交差点を通過後、紙パックが元の位置にあればよい) 
~2,紙パックを次の交差点まで運んで行き、その交差点に紙パックを残してさらに黒い線に沿って進む 
~ただし、

~・速さと正確さを追求すること 
~・コースを3周したら自動的に止まること


**0,メンバー [#a38c4b9c]
~Ds
~Ms
**1,ロボットの概要 [#p8ab4222]
今回はなるべく小型になるようにしました
***第一段階 [#t54a8e0a]
~タイヤをなるべく近くに寄せて小型化を図る。
#ref(2009a/A3/課題2右/タイヤ部分.jpg)
~出来た結果がこれ↓
#ref(2009a/A3/課題2右/第一段階.jpg)
またバンパーに突起物を付けて反応しやすいように設計。
~ところが、このタイヤだと小回りが利かないためタイヤを変えることに。
***第二段階 [#tddef165]
~タイヤを小型のものにして、小回りが利くように設計。
~ところがギアをうまく組むことが出来ず、やむなく後輪駆動に。
~(見づらいですが後輪駆動になってます)↓
#ref(2009a/A3/課題2右/第二段階(最終形態).jpg)
~このときから、紙パックを運ぶための角(?)をつけた。
~ところが今度は前輪の力がないため、カーブを曲がりきれないため、またしても改良。
***第三段階 [#i7eef119]
~モーターを後ろに取り付けることでギアの問題を解決。
#ref(2009a/A3/課題2右/タイヤ&モーター.jpg)
~ところがこれだと後ろに重心がいってしまうので、補助タイヤを設置。
#ref(2009a/A3/課題2右/補助タイヤ.jpg)
~また、バンパーがうまく作動しないことがわかったので、さらに改良。
#ref(2009a/A3/課題2右/バンパー.jpg)
~(写真だと牛乳パックになってますが、紙パックの間違いです(^^;))
~できたのがコレ↓
#ref(2009a/A3/課題2右/第三段階(今度こそ最終形態).jpg)
~今度はバンパーが反応しすぎるため、再度改良。
#ref(2009a/A3/課題2右/改良バンパー.jpg)
**2,コースについて [#p45dc257]
~なにも言うことはあるまい・・・。
#ref(2009a/A3/課題2右/コース.jpg)
~見てのとおりです。
**3,プログラムについて [#y8237184]
***Dsの作ったプログラム [#l770a664]
~障害物に当たったらそれを次の交差点まで運ぶプログラム(つまり2番のプログラム)。
~先にライントレースの基礎部分を書いたが、その後障害物に対するプログラムを作るのに一苦労(ToT)
~(このプログラムは途中経過です)
 #define BORDER 40   //閾値を設定 
 #define TIME  500 //タイマーの時間を設定
 task main()
 {
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_2,SENSOR_TOUCH);
  SetSensor(SENSOR_3,SENSOR_LIGHT);  //それぞれのセンサーを指定
    int flag=0;
  while(flag<12){    //交差点を12回(3周)するまで繰り返します。
         
         if(SENSOR_1>BORDER)
              {if(SENSOR_3>BORDER){OnFwd(OUT_A+OUT_C);} //センサーが両方白なら直進
               else {OnFwd(OUT_A);OnRev(OUT_C);} //右が黒なら右折
               }
          else{
          if (SENSOR_3>BORDER){OnFwd(OUT_C);OnRev(OUT_A);}  //左が黒なら左折
          else{OnFwd(OUT_A+OUT_C);flag++;}  //両方黒ならflagを1足して直進。
           }
          
             
    
      if(SENSOR_2==1)       //紙パックにぶつかったら  
            {OnFwd(OUT_A+OUT_C);Wait(90);flag++; //交差点を通り越してflagを1足して、
             until((SENSOR_1<BORDER)&&(SENSOR_3<BORDER)){
              if(SENSOR_1>BORDER){
              if(SENSOR_3>BORDER){OnFwd(OUT_A+OUT_C);}
               else {OnFwd(OUT_A);OnRev(OUT_C);}
               }
          else{
          if (SENSOR_3>BORDER){OnFwd(OUT_C);OnRev(OUT_A);}
        }
      }            //交差点までライントレース
     OnRev(OUT_A+OUT_C);Wait(50);  //少し下がって
     OnFwd(OUT_A);Wait(30);     //右を向いて
     OnFwd(OUT_C);Wait(90);     //進んで
     OnRev(OUT_A);Wait(60);     //左向いて  
     OnFwd(OUT_A);Wait(90);     //また進んで
     OnRev(OUT_C);Wait(30);     //もう一回進んで
     OnRev(OUT_A);Wait(70);     //ちょっと下がって紙パックを交差点に押し戻し、
     flag++;            //flagを1足す。
     }
 }
 ClearTimer(0);
   while(Timer(0)<=TIME)
   {if(SENSOR_1>BORDER)
              {if(SENSOR_3>BORDER){OnFwd(OUT_A+OUT_C);}
               else 
               {OnFwd(OUT_A);OnRev(OUT_C);}
               }
          else
          {if (SENSOR_3>BORDER){OnFwd(OUT_C);OnRev(OUT_A);}
          else {OnFwd(OUT_A+OUT_C);}
  }
 }
  Off(OUT_A+OUT_C);}    //12回交差点を通ったら、少し進んで終了!!
 
~タッチセンサーの感度に踊らされ、運送プログラムの設定に頭を悩まされた。
***Msの作ったプログラム [#l770a664]
 #define THRESHOLD 40                //閾値設定 
 task main()
 {
  int i;
  i=0;
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_2,SENSOR_TOUCH);
  SetSensor(SENSOR_3,SENSOR_LIGHT);
  while(true){
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD)){
   OnFwd(OUT_A+OUT_C);               //線上を直進
  }else{
   if(SENSOR_1<THRESHOLD){
   Off(OUT_A);
   OnFwd(OUT_C);          //左折
  }else{
   if(SENSOR_3<THRESHOLD){
   Off(OUT_C);
   OnFwd(OUT_A);          //右折
  }
  }
  while(i<12){           //障害にぶつかった時(交差点12回で3周)
   if(SENSOR_2==1){
   OnRev(OUT_A+OUT_C);
   Wait(100);
   Off(OUT_A+OUT_C);
   Wait(300);           //一旦下がって待つ 
   OnFwd(OUT_A);
   Off(OUT_C);
   Wait(50);
   OnFwd(OUT_A+OUT_C);
   Wait(50);
   OnFwd(OUT_C);
   Off(OUT_A);
   Wait(50);
   OnFwd(OUT_C);
   Off(OUT_A);
   Wait(50);
   OnFwd(OUT_A+OUT_C);      //回り込む
   i=i+1;
  }
  if(i==12){
   Off(OUT_A+OUT_C);      //3周したら止まる
  }
 }}}}





**4,良かった点 [#t155d8f5]
**5,苦労した点・反省点 [#kb399b1b]
~タッチセンサーを如何に反応させるかが今回最大の問題点だった。byDs
*コメントをどうぞ [#pffdc37f]
- 間に合わないかもしれません;; -- [[A3R Ds]] &new{2009-06-18 (木) 15:37:50};

#comment

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