'''&size(50){もくじ};'''
#contents


*メンバー [#pe466a45]

-キングオブハート
-D
*課題 [#wcdeb407]
 各チームで作成したコースを1周するロボットを製作せよ。交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。 &br;


  1.空き缶をコース上に戻して再びコースに戻って進む &br;
  2.空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに
沿って進む


*ロボット [#x4c576f8]


**アーム [#d863a37b]
缶をしっかりとつかめるように、ブロックを増やして頑丈にしました。
#ref(./20100629210055.jpg)
#br
#ref(./20100629210120.jpg)
とても雄々しく猛々しいアームですね。
#br
#ref(./20100629210203.jpg)

**バンパー [#m86aa161]
&ref(./20100701095003.jpg);
とても雄々しいバンパー
#br
&ref(./20100701095532.jpg);

**光センサー [#v6f8a1e0]
#ref(./20100701094854.jpg)
#ref(./20100701094854.jpg);
黒線を挟む形にしました。間隔が広過ぎたため、カーブを曲がりきれません・・・。
#br
#ref(./20100708174921.jpg);
そこで、光センサーの間隔を狭めに改良。


**工夫点 [#fbabbad0]
アームをスムーズに動かすために、タイヤを付けました。 &br;
タイヤの重さによりゆっくりと動くようになりました (ごつくなりました^_^; )。
#ref(./20100629210320.jpg)

雄々しいタイヤですね。
*コース [#t972ca7e]
#ref(./100624_1616~01.jpg)

*プログラム [#gde31783]
**D のプログラム [#w4564e6d]
***空き缶をコース上に戻して再びコースに戻って進むプログラム [#k8abb9a1]
 #define up OnFwd(OUT_B);  //アームを上げる
 #define down OnRev(OUT_B); //アームを下げる
 #define turn OnFwd(OUT_A);OnRev(OUT_C);Wait(150);Off(OUT_A+OUT_C);  //180°回転
 #define turn OnFwd(OUT_A);OnRev(OUT_C);Wait(122);Off(OUT_A+OUT_C);  //180°回転
 #define go OnFwd(OUT_A+OUT_C);  //直進
 #define back OnRev(OUT_A+OUT_C);  //後退
 #define THRESHOLD 40  //闘値を40に設定

 task main ()
 {
  SetSensor(SENSOR_1,SENSOR_LIGHT);  //光センサーを1にセット
  SetSensor(SENSOR_2,SENSOR_TOUCH);  //タッチセンサーを2にセット
  SetSensor(SENSOR_3,SENSOR_LIGHT);  //光センサーを3にセット
 
  start line_trace;
 while (true) {
               start line_trace;//ライントレースを始める
               start line_trace;          //ライントレースを始める
 
               until(SENSOR_2 == 1);//タッチセンサーが反応すると
               stop line_trace;//ライントレースをやめる
               {Off(OUT_A+OUT_C);
                down;Wait(60);Off(OUT_B);
                turn;
                back;Wait(50);
                up;Wait(60);Off(OUT_B);
                turn;
                   }
                  }
               until(SENSOR_2 == 1);      //タッチセンサーが反応すると
               stop line_trace;           //ライントレースをやめる
               {Off(OUT_A+OUT_C);     //いったん停止
                down;Wait(60);Off(OUT_B); //アームを下げる
                turn;           //180°回転
                up;Wait(60);Off(OUT_B);  //アームを上げる
                turn;           //180°回転
              }
              }
 }
 task line_trace()
 {
  while (true) {if(SENSOR_1>THRESHOLD){                 
		  if(SENSOR_3>THRESHOLD){
			OnFwd(OUT_A+OUT_C);
           	  }
		  else{
			 if(SENSOR_1>THRESHOLD){                 
				OnFwd(OUT_A);
				OnRev(OUT_C);
 	         		}
		}
	}
	else{
		if(SENSOR_3>THRESHOLD){              
			OnFwd(OUT_C);
			OnRev(OUT_A);
           	}
		
		  }
 }        
 {go;
  while (true) { if((SENSOR_1<THRESHOLD)&&( SENSOR_3<THRESHOLD))//センサ−1と3が黒線上にきたら1.0秒止まってから直進する
                  {Off(OUT_A+OUT_C);Wait(100);go;Wait(100);}                
                 if(SENSOR_1<THRESHOLD)//センサー1が黒線上にきたら
                  {OnFwd(OUT_C);OnRev(OUT_A);//左へ曲がる
                  } 
                 if(SENSOR_3<THRESHOLD)//センサー3が黒線上にきたら
                  {OnFwd(OUT_A);OnRev(OUT_C);}//右へ曲がる
                 if((SENSOR_1>THRESHOLD)&&( SENSOR_3>THRESHOLD))
                  {go;}
                
  }
 }

**キングオブハートのプログラム [#a28e0ac2]  


**キングオブハートのプログラム [#a28e0ac2]

アキカンを見つけたら交叉点まで連れていくプログラム
 #define MIGI SENSOR_1
 #define HIDARI SENSOR_3
 #define HANIKAMI SENSOR_2
   
 #define Shusei Wait(5)  //
 #define Huriorosi OnFwd(OUT_B);Wait(60);  //アームふりおろし
 
 sub Kaihou()  //アキカンを交差点に置いていく一連の動作
 {
    OnFwd(OUT_A+OUT_C);Wait(60);
    Off(OUT_A+OUT_C);
    OnFwd(OUT_A);OnRev(OUT_C);Wait(120);
    OnRev(OUT_B);Wait(60);
    OnRev(OUT_A+OUT_C);Wait(120);   
    Off(OUT_A+OUT_C);OnFwd(OUT_A);OnRev(OUT_C); 
  }
 
 task main ()
 {
    SetSensor(MIGI,SENSOR_LIGHT);  // 右光センサー
    SetSensor(HIDARI,SENSOR_LIGHT);  // 左光センサー
    SetSensor(HANIKAMI,SENSOR_TOUCH);  // タッチセンサー
    
     
    while (true)      
    {
      OnFwd(OUT_A+OUT_C);  //前進      
      if (MIGI < 50 && HIDARI < 50)  //黒線を横切ろうとしたならば
         {
           OnFwd(OUT_A+OUT_C);Wait(60);  //マシンを少し直進させて完全に黒線を越える
         } 
 
      if (HIDARI < 5)  //もしも左センサーが黒線に乗っているならば
         {
           Float(OUT_A);Shusei  //右に若干方向修正
         }
      if (MIGI < 5 ) //もしも右センサーが黒線に乗っているならば
         {  
           Float(OUT_C);Shusei  //左に若干方向修正
         }  
      if (HANIKAMI == 1 )  //もしも前部にアキカンがぶつかっているならば
         { 
           Huriorosi  //それを捕まえる
           start Prince();  //「プリンス」実行
         }
 
 }
  
 sub Prince()   //アキカンを持っているときの諸動作 
   while (true)
   {
    if (MIGI < 5 && HIDARI < 5 && HANIKAMI == 1 )  //もしも黒線を横切ろうとしたならば
      {
        Kaihou
      }
    if (HIDARI < 5)  //もしも左センサーが黒線に乗っているならば
      {
        Float(OUT_A);Shusei  //右に若干方向修正
      }
    if (MIGI < 5 ) //もしも右センサーが黒線に乗っているならば
      {  
        Float(OUT_C);Shusei  //左に若干方向修正
  }        
 } 
*感想 [#w0240ffb]
** D [#v4753e74]
前回よりも難しかった。缶をどう動かすか考えるのが大変だった。
 
** [#q8a9ed1a]
** キングオブハート  [#bf28ad8d]
もっとマシンをオリジナリティ全開に仕上げたかった。発想力を高めて、次の課題では夢のロボットを造りたい。
*コメント [#hc6da08f]
コメントをどうぞ
- ロボットへのこだわりが表れていています。動きについても説明があると良いと思います。また、問題点などもあげてみてください。 -- [[TAKA]] &new{2010-07-09 (金) 16:54:57};
- ロボットが1周したらとまる仕組みも入れたほうが良いと思います -- [[FI]] &new{2010-07-12 (月) 18:20:14};

#comment


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