2006a/A3/試作品

ロボティクス入門ゼミ

5/12 の授業

初めてのプログラム

 task main()

  {
  OnFwd(OUT_A);
  OnFwd(OUT_C);
  Wait(150) ;
  OnFwd(OUT_A+OUT_C);
  Wait(500);
  OnRev(OUT_C);
  OnFwd(OUT_A);
  Wait(300);
  OnFwd(OUT_A+OUT_C);
  Wait(300);
  Float(OUT_A+OUT_C);
  }

テキトーに作ってみたからどのように動くのかわからない…

5/19の授業

課題1

「水」を書くプログラム

 task main()
{
 OnFwd(OUT_B);
 Wait(40);
 Off(OUT_B);
 
 OnFwd(OUT_A+OUT_C);
 Wait(130);
 Off(OUT_A+OUT_C);
 
 OnRev(OUT_B);
 Wait(10);
 Off(OUT_B);
 
 OnFwd(OUT_A);
 Wait(100);
 OnRev(OUT_C);
 Wait(100);
 Off(OUT_A+OUT_C);
 
 OnRev(OUT_A+OUT_C);
 Wait(42);
 Off(OUT_A+OUT_C);
 
 OnFwd(OUT_B);
 Wait(40);
 Off(OUT_B);
 
 OnFwd(OUT_A+OUT_C);
 Wait(30);
 Off(OUT_A+OUT_C);
 
 OnRev(OUT_B);
 Wait(10);
 Off(OUT_B);
 
 OnFwd(OUT_C);
 Wait(30);
 Off(OUT_C);
 
 OnFwd(OUT_A+OUT_C);
 Wait(110);
 Off(OUT_A+OUT_C);
 
 OnFwd(OUT_A);
 Wait(80);
 OnRev(OUT_C);
 Wait(80);
 Off(OUT_A+OUT_C);
 
 OnRev(OUT_A+OUT_C);
 Wait(10);
 Off(OUT_A+OUT_C);
 
 OnFwd(OUT_B);
 Wait(40);
 Off(OUT_B);
 
 OnFwd(OUT_A+OUT_C);
 Wait(35);
 Off(OUT_A+OUT_C);
 
 OnRev(OUT_B);
 Wait(10);
 Off(OUT_B);
 
 OnFwd(OUT_A);
 Wait(210);
 Off(OUT_A);
 
 OnRev(OUT_A+OUT_C);
 Wait(70);
 Off(OUT_A+OUT_C);
 
 OnFwd(OUT_B);
 Wait(40);
 Off(OUT_B);
 
 OnFwd(OUT_A+OUT_C);
 Wait(70);
 Off(OUT_A+OUT_C);
 
 OnRev(OUT_B);
 Wait(10);
 Off(OUT_B);
 
 OnRev(OUT_A+OUT_C);
 Wait(140);
 Off(OUT_A+OUT_C);
 
 OnFwd(OUT_B);
 Wait(40);
 Off(OUT_B);
 
 OnFwd(OUT_A+OUT_C);
 Wait(50);
 Off(OUT_A+OUT_C);
 
 OnRev(OUT_B);
 Wait(10);
 Off(OUT_B);
 
 OnFwd(OUT_C);
 Wait(140);
 Off(OUT_C);
 
 OnRev(OUT_A+OUT_C);
 Wait(80);
 Off(OUT_A+OUT_C);
 
 OnFwd(OUT_B);
 Wait(40);
 Off(OUT_B);
 
 OnFwd(OUT_A+OUT_C);
 Wait(100);
 Float(OUT_A+OUT_C);
 
 OnRev(OUT_B);
 Wait(10);
 Off(OUT_B);
 }

6月16日

ライントレースしながらほかのロボにぶつかって反転するプログラム

 

 #define turn_RIGHT ;OnFwd(OUT_A);OnRev(OUT_C);Wait(150);
task main () 
{
     SetSensor(SENSOR_1, SENSOR_LIGHT);
     SetSensor(SENSOR_3,SENSOR_LIGHT);
     SetSensor(SENSOR_2,SENSOR_TOUCH);
     while (true) {
         OnFwd(OUT_A+OUT_C);
             if (SENSOR_1 <  45)  {
                   OnFwd(OUT_C);
              OnRev(OUT_A);
              until (SENSOR_1>45);}
        if(SENSOR_3<40) {
          OnFwd(OUT_A);
          OnRev(OUT_C);
           until(SENSOR_3>45);      }     
           
           
    if(SENSOR_2==1) {    //タッチセンサーが反応した場合
     OnRev(OUT_A+OUT_C);    //0.8秒後退
     Wait(80);
     turn_RIGHT  //逆向きになるまで回転
     }
 }    
}

6月23日

ライントレースしながらほかのロボにぶつかるとよけるプログラム

  #define THRESHOLD 40

task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);/センサー1をライトセンサーと宣言
SetSensor(SENSOR_2, SENSOR_LIGHT);/センサー2をライトセンサーと宣言
SetSensor(SENSOR_3, SENSOR_TOUCH);/センサー3をタッチセンサーと宣言    
OnFwd(OUT_A+OUT_C);
while (true) {
if (SENSOR_3 == 1) {
OnRev(OUT_A+OUT_C) ; Wait(50);0.5秒後退する
Off(OUT_A+OUT_C);
OnRev(OUT_C);
Wait(150);/モーターCを1.5秒逆回転
OnFwd(OUT_A+OUT_C);
Wait(150);/1.5秒進む
Off(OUT_A);
Wait(150);1.5秒左回転させる
OnFwd(OUT_A);
Wait(150); 
Off(OUT_A); 
Wait(150);
OnFwd(OUT_A);/モーターAを動かし元のコースに戻る
} else {
if (SENSOR_1 < 40) {
Off(OUT_A);
OnFwd(OUT_C);センサー1に黒線が入ると左回転
}                                                                       
if (SENSOR_2 < 40) { 
OnFwd(OUT_A);
Off(OUT_C);センサー2に黒線が入ると右回転
}
}
}
}

光を追いかけるプログラム

#define ROOP 100 //ロボが一周する時間
#define LEFT_X  OnFwd(OUT_A);OnRev(OUT_C);Wait(1);Off(OUT_A+OUT_C);//左回転
#define RIGHT_X OnFwd(OUT_C);OnRev(OUT_A);Wait(1);Off(OUT_A+OUT_C);//右回転
task main()
{
   SetSensor(SENSOR_2,SENSOR_LIGHT);
      int light_max = 0;  //「見つけた明るさ」の最大値
      int i = 0;          
      
      for(i=0; i<=ROOP; i++){
         LEFT_X;                  //まず左に一周しつつ
	  if(SENSOR_2>light_max){  //このlight_maxを
            light_max = SENSOR_2; //見つけた中で、一番明るい
	     }                     //明るさの値に塗り変える。
	   }
      
      Off(OUT_A+OUT_C);           //とりあえず一周したら
      Wait(50);                   //休憩してみる
      
      repeat(10){                     //上で見つけた明るさを元に
      for(i=0; i<=ROOP; i++){       //右回転で探しては前進、探しては前進
         if(light_max-10>=SENSOR_2){
	      RIGHT_X;
         }
         else{
	     Off(OUT_A+OUT_C);Wait(10); //最も明るい所よりも若干、暗くても進ませます。
           OnFwd(OUT_A+OUT_C);
           Wait(30);
           Float(OUT_A+OUT_C);
	     Wait(50);
	   }
      }
   }
}

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-14 (金) 13:16:22