ロボティクス入門ゼミ

ライントレース2

task main ()
{
  SetSensor(SENSOR_1, SENSOR_LIGHT);
  SetSensor(SENSOR_3, SENSOR_LIGHT);
  SetSensor(SENSOR_2, SENSOR_TOUCH);
   
   while (true) 
   {
       if (SENSOR_1 < THRESHOLD)           // (1)黒線上に いるとき
       {
           OnFwd(OUT_A);
           Off(OUT_C);
       } 
       if (SENSOR_3 < THRESHOLD)           // (3)黒線上にいるとき
       {
           OnFwd(OUT_C);
           Off(OUT_A);
       }
       if (SENSOR_2==1 )
      {
          OnFwd(OUT_A);OnRev(OUT_C);Wait(70);    //タッチしたら180°反転する
          OnFwd(OUT_C);wWait(30);
          OnFwd(OUT_C);OnRev(OUT_A);Wait(70);
          OnFwd(OUT_A);Wait(200);
          OnFwd(OUT_C);OnRev(OUT_A);Wait(90);
          OnFwd(OUT_A);
           
      }
        
    }         

ライントレース1

task main ()
{
  SetSensor(SENSOR_1, SENSOR_LIGHT);
  SetSensor(SENSOR_3, SENSOR_LIGHT);
  SetSensor(SENSOR_2, SENSOR_TOUCH);
  
   while (true) 
   {
       if (SENSOR_1 < THRESHOLD)           // (1)黒線上にいるとき
       {
           OnFwd(OUT_A);
           Off(OUT_C);
       } 
       if (SENSOR_3 < THRESHOLD)           // (3)黒線上にいるとき
       {
           OnFwd(OUT_C);
           Off(OUT_A);
       }
       if (SENSOR_2==1 )
      {
          OnFwd(OUT_A);OnRev(OUT_C);Wait(150);    //タッチしたら180°反転する
          OnFwd(OUT_C);
      }
        
    }         
}

改良作品

/*  黒い線をトレースするロボット のプログラム  */
#define THRESHOLD 40   // 閾値
task main ()
{
   SetSensor(SENSOR_1, SENSOR_LIGHT);
   SetSensor(SENSOR_3, SENSOR_LIGHT);
   SetSensor(SENSOR_2,SENSOR_TOUCH);
   
    while (true) 
    {
        if (SENSOR_1 < THRESHOLD)           // (1)黒線上にいるとき
        {
            OnFwd(OUT_A);
            Off(OUT_C);
        } 
        if (SENSOR_3 < THRESHOLD)           // (3)黒線上にいるとき
        {
            OnFwd(OUT_C);
            Off(OUT_A);
        }         
     }         
}

試作

/*  ?????????g??Å[?X???????{?b?g ???v???O????  */

#define THRESHOLD 40   // ???l
task main ()
{
   SetSensor(SENSOR_2, SENSOR_LIGHT);
   SetSensor(SENSOR_1,SENSOR_TOUCH);
 SetSensor(SENSOR_3,SENSOR_TOUCH);
  
OnFwd(OUT_A+OUT_C);
        if (SENSOR_2 < THRESHOLD) 
        {   // ???????…???????´
            OnFwd(OUT_A);
            Off(OUT_C);
        } 
        else 
        {                      // ?????????O???Ω???´
            Off(OUT_A);
            OnFwd(OUT_C);
        }
  
       if (SENSOR_1==1 )
     {
          OnFwd(OUT_A);OnRev(OUT_C);      Wait(150);
          OnFwd(OUT_C);
     }
     
      if (SENSOR_3==1 )
     {
          OnFwd(OUT_C);OnRev(OUT_A);      Wait(150);
          OnFwd(OUT_A);
     }
 }

6月2日

タッチセンサーを使ったプログラム

task main()
{
   
   SetSensor(SENSOR_1,SENSOR_TOUCH);
   SetSensor(SENSOR_3,SENSOR_TOUCH);
   
   while(true)
   {
       OnFwd(OUT_A+OUT_C);
       until ((SENSOR_1==1) || (SENSOR_3==1));
       OnRev(OUT_A+OUT_C);Wait(50);
       OnFwd(OUT_A);Wait(150);
       
       
       OnFwd(OUT_C);
       
    }  
 }

ifバージョン

task main()
 {
     SetSensor(SENSOR_1,SENSOR_TOUCH);
  SetSensor(SENSOR_3,SENSOR_TOUCH);
  
  OnFwd(OUT_A+OUT_C);
  while(true)
  {
      if (SENSOR_1==1 )
      {
           OnRev(OUT_A+OUT_C);             Wait(50);
           OnFwd(OUT_A);OnRev(OUT_C);      Wait(100);
           OnFwd(OUT_C);
      }
      
       if (SENSOR_3==1 )
      {
           OnRev(OUT_A+OUT_C);             Wait(50);
           OnFwd(OUT_C);OnRev(OUT_A);      Wait(100);
           OnFwd(OUT_A);
      }
 }
}  
         

5月13日

課題1...書道ロボット...『水』

task main()
task main()
{
OnFwd(OUT_A+OUT_C);
Wait(200);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(135);
OnFwd(OUT_A+OUT_C);
Wait(50);
Off(OUT_A+OUT_C);
OnFwd(OUT_B);
Wait(5);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(100);
Off(OUT_A+OUT_C); 
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(108);
Off(OUT_A+OUT_C);
OnRev(OUT_B);
Wait(5);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(50);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(41);
OnRev(OUT_A+OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
OnFwd(OUT_B);
Wait(5);
Off(OUT_B);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(16);
Off(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C);
Wait(170);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(20);
Off(OUT_A+OUT_C);
OnRev(OUT_B);
Wait(10);
Off(OUT_B);
OnRev(OUT_A+OUT_C);
Wait(60);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(40);
OnFwd(OUT_A+OUT_C);
Wait(120);
Off(OUT_A+OUT_C);

OnFwd(OUT_B);
Wait(5);
Off(OUT_B);
}
#define back(t) OnFwd(OUT_C);Wait(t);Off(OUT_C);
#define front(t) OnRev(OUT_C);Wait(t);Off(OUT_C);
#define right(t) OnRev(OUT_B);Wait(t);Off(OUT_B);
#define left(t) OnFwd(OUT_B);Wait(t);Off(OUT_B);
#define up OnFwd(OUT_A);Wait(30);Off(OUT_A);
#define down OnRev(OUT_A);Wait(30);Off(OUT_A);

task main()
{
down(30);back(150);                     //1
OnRev(OUT_C);OnFwd(OUT_B);Wait(10);Off(OUT_C+OUT_B);
up;left(20);front(115);
down;right(30);
OnFwd(OUT_C+OUT_B);Wait(30);Off(OUT_C+OUT_B);
up;right(70);
}

6//23

#define TURN_TIME 200

#define light(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C); int light_max=(0); int time_max=(0); task main() {

  SetSensor(SENSOR_1,SENSOR_LIGHT);
  ClearTimer(0);
  
  OnFwd(OUT_A);OnRev(OUT_C);
  while(FastTimer(0)<TURN_TIME);
  {
       if(SENSOR_1>light_max);
       {
       light_max=SENSOR_1;
       time_max=FastTimer(0);
       }
  light (200-time_max);
  
  OnRev(OUT_A+OUT_C);Wait(50);Off(OUT_A+OUT_C);
  }

}

else+右旋回

#define THRESHOLD 40 
task main ()
{
  SetSensor(SENSOR_1, SENSOR_LIGHT);
  SetSensor(SENSOR_3, SENSOR_LIGHT);
  SetSensor(SENSOR_2, SENSOR_TOUCH);
   
   while (true) 
   {
       if (SENSOR_1 < THRESHOLD)   //黒線上にきたらAを回転         
       {
           OnFwd(OUT_A);
           Off(OUT_C);
       }
    else
        {
          OnFwd(OUT_C);
           Off(OUT_A);
         }
       if (SENSOR_3 < THRESHOLD)  //黒線上にきたらCを回転         
       {
           OnFwd(OUT_C);
           Off(OUT_A);
       }
        else
       {
          OnFwd(OUT_A);
           Off(OUT_C);
        }  
       if (SENSOR_2==1 )             //ぶつかったら右から避ける
      {
          OnFwd(OUT_A);OnRev(OUT_C);Wait(70);    
          OnFwd(OUT_C);Wait(150);
          OnFwd(OUT_C);OnRev(OUT_A);Wait(70);
          OnFwd(OUT_A);Wait(300);
          OnFwd(OUT_C);OnRev(OUT_A);Wait(90);
          OnFwd(OUT_A);
           
      }
        
    }
   }
else+半回転
#define THRESHOLD 40 
task main ()
{
  SetSensor(SENSOR_1, SENSOR_LIGHT);
  SetSensor(SENSOR_3, SENSOR_LIGHT);
  SetSensor(SENSOR_2, SENSOR_TOUCH);
   
   while (true) 
   {
      if (SENSOR_1 < THRESHOLD)   //黒線上にきたらAを回転         
       {
           OnFwd(OUT_A);
           Off(OUT_C);
       }
    else
        {
          OnFwd(OUT_C);
           Off(OUT_A);
         }
       if (SENSOR_3 < THRESHOLD)  //黒線上にきたらCを回転         
       {
           OnFwd(OUT_C);
           Off(OUT_A);
       }
        else
       {
          OnFwd(OUT_A);
           Off(OUT_C);
        }  
       if (SENSOR_2==1 )             //ぶつかったら半回転
      {
          OnFwd(OUT_A);OnRev(OUT_C);Wait(150);             
      }
        
    }
   }
else+右旋回
#define THRESHOLD 40 
task main ()
{
  SetSensor(SENSOR_1, SENSOR_LIGHT);
  SetSensor(SENSOR_3, SENSOR_LIGHT);
  SetSensor(SENSOR_2, SENSOR_TOUCH);
   
   while (true) 
   {
       if (SENSOR_1 < THRESHOLD)   //黒線上にきたらAを回転         
       {
           OnFwd(OUT_A);
           Off(OUT_C);
       }
    else
        {
          OnFwd(OUT_C);
           Off(OUT_A);
         }
       if (SENSOR_3 < THRESHOLD)  //黒線上にきたらCを回転         
       {
           OnFwd(OUT_C);
           Off(OUT_A);
       }
        else
       {
          OnFwd(OUT_A);
           Off(OUT_C);
        }
     if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD))
        {
     OnFwd(OUT_A);OnFwd(OUT_C);
         } 
       if (SENSOR_2==1 )             //ぶつかったら半回転
      {
          OnFwd(OUT_A);OnRev(OUT_C);Wait(150);             
      }
        
    }
   }

7/7

明るい方向へ・「第六の幸運をもたらす宿」

#define C 523
#define D 587
#define E 659
#define F 698
#define G 784
#define A 440
#define B 494

task play_music(1)
{
  while(true)
    {
       PlayTone(G,25);Wait(30);
       PlayTone(E,25);Wait(30);
       PlayTone(G,50);Wait(55);
       PlayTone(G,25);Wait(30);
       PlayTone(E,25);Wait(30);
       PlayTone(G,50);Wait(55);
       PlayTone(A,25);Wait(30); 
       PlayTone(G,25);Wait(30);
       PlayTone(F,25);Wait(30);
       PlayTone(E,25);Wait(30);
       PlayTone(D,25);Wait(80);
       PlayTone(E,25);Wait(30);
       PlayTone(F,50);Wait(55);
       PlayTone(G,25);Wait(30); 
       PlayTone(C,25);Wait(30);
       PlayTone(C,25);Wait(30);
       PlayTone(C,25);Wait(30);
       PlayTone(C,12);Wait(17);
       PlayTone(D,12);Wait(17);
       PlayTone(E,12);Wait(17);
       PlayTone(F,12);Wait(17);
       PlayTone(G,50);Wait(55);
       PlayTone(G,25);Wait(30);
       PlayTone(D,25);Wait(30);
       PlayTone(D,25);Wait(30);
       PlayTone(F,25);Wait(30);
       PlayTone(E,25);Wait(30);
       PlayTone(D,25);Wait(30);
       PlayTone(C,50);Wait(55);
       Wait(20);
    }
}
#define C  523
#define C# 554
#define D  587
#define D# 622
#define E  659
#define F  698
#define F# 740
#define G  784
#define G# 831
#define A  440
#define A# 446
#define B  494

task play_music(2)      //音楽を演奏するタスク
{
       while(true)
    {
       PlayTone(E,50);Wait(40);
       PlayTone(D,25);Wait(15);
       PlayTone(C,25);Wait(15);

       PlayTone(C,75);Wait(65);
       PlayTone(C,25);Wait(15);
       PlayTone(G,50);Wait(40);
       PlayTone(A,50);Wait(40);
       PlayTone(G,33);Wait(23);
       PlayTone(F,33);Wait(23); 
       PlayTone(G,33);Wait(23);

       PlayTone(E,50);Wait(40);
       PlayTone(D,25);Wait(15);
       PlayTone(C,25);Wait(15);
       PlayTone(C,75);Wait(65);
       PlayTone(E,25);Wait(15);
       PlayTone(G,50);Wait(40); 
       PlayTone(F,33);Wait(23);
       PlayTone(E,33);Wait(23);
       PlayTone(F,33);Wait(23);
       PlayTone(E,50);Wait(40);

       PlayTone(E,50);Wait(40);
       PlayTone(D,25);Wait(15);
       PlayTone(C,25);Wait(15);

       PlayTone(C,75);Wait(65);
       PlayTone(C,25);Wait(15);
       PlayTone(G,50);Wait(40);
       PlayTone(A,50);Wait(40);
       PlayTone(G,33);Wait(23);
       PlayTone(F,33);Wait(23); 
       PlayTone(G,33);Wait(23);

       PlayTone(E,50);Wait(40);
       PlayTone(D,25);Wait(15);
       PlayTone(C,25);Wait(15);
       PlayTone(C,75);Wait(65);
       PlayTone(E,25);Wait(15);
       PlayTone(G,50);Wait(40); 
       PlayTone(F,33);Wait(23);
       PlayTone(E,33);Wait(23);
       PlayTone(D,33);Wait(23);
       PlayTone(C,100);Wait(90);
       Wait(50);
     }
}

#define TURN_TIME 200
#define right(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);
#define left(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);
#define front OnFwd?(OUT_A+OUT_C);

task main () 
{
  int light_max=0; 
  int time_max=0;
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_3,SENSOR_LIGHT);

  light_max=SENSOR_1;            //センサー1が最大
  ClearTimer(0);                 //タイマーを0
  OnFwd(OUT_A);OnRev(OUT_C);     //光を探す左回転

  while(time_max<TURN_TIME){     //タイマーは20秒以内
      start play_music ;
      if(SENSOR_1>light_max)        //もし1が最大なら
      {
          light_max=SENSOR_1;//最大値を更新
          time_max=FastTimer(0);
      }
     left(200-time_max);     //一周から時間を差し引い
      front;
  }
 
  while(true)
  {
      if((SENSOR_1>=light_max)&&(SENSOR_3>=light_max))
      {
          front;
      }
      if((SENSOR_1<=light_max)&&(SENSOR_3>=light_max))
      {
          OnRev(OUT_A);OnFwd(OUT_C);
          until((SENSOR_1>=light_max)&&(SENSOR_3>=light_max));
      }
      if((SENSOR_1>=light_max)&&(SENSOR_3<=light_max))
      {
          OnFwd(OUT_A);OnRev(OUT_C);
          until((SENSOR_1>=light_max)&&(SENSOR_3>=light_max));
      }
  }
}

task main() {

        SetSensor(SENSOR_1,SENSOR_TOUCH);
        SetPower(OUT_A,2);
        SetPower(OUT_C,2);
        SetPower(OUT_B,5);
        ClearTimer(0);
        
        OnFwd(OUT_A+OUT_C);
        while (true)
        {
               if(SENSOR_1==1)
               {
                    Off(OUT_A+OUT_C);Wait(100);
                    OnFwd(OUT_B);
                    OnFwd(OUT_A+OUT_C);Wait(150);
                    Off(OUT_A+OUT_C);
                    OnRev(OUT_B);Wait(50);
                    OnRev(OUT_A+OUT_C);Wait(100);
                    Off(OUT_A+OUT_C+OUT_B);Wait(300);
                    OnFwd(OUT_A+OUT_C);Wait(150);
                    OnFwd(OUT_A+OUT_C);
                   while(true) 
                    if(SENSOR_1==1)
                    {
                           Off(OUT_A+OUT_B);
                           OnFwd(OUT_B);Wait(100);
                           OnRev(OUT_A+OUT_C);Wait(150);
                           OnRev(OUT_B);Wait(50);
                           Off(OUT_A+OUT_C+OUT_B);
                     }
                 }                     
        }

}


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-28 (金) 14:42:53 (4773d)