[[ロボティクス入門ゼミ]]

* 1. ハート形を描くロボット(必須) [#hd992a47]
ロボットにペンを取り付けA3用紙にハート型を描くロボットを作成しなさい。

 #define gostraight OnFwd(OUT_A+OUT_C);Wait(135);Off(OUT_A+OUT_C);//まっすぐ進みます。(それだけ)
 #define turn OnFwd(OUT_A);OnRev(OUT_C);Wait(400);Off(OUT_A+OUT_C);//その場で回転して向きを変えます。
 #define left OnFwd(OUT_A);Wait(1500);Off(OUT_A);//右のタイヤだけ動かして左向きに回ります。
  
  task main()
 {
    SetPower(OUT_A,5);
    SetPower(OUT_C,5);
    
    left;/まずはハートの上のとこから半円を描きます。
    Wait(100);
    OnFwd(OUT_A);
    Wait(10);
    Float(OUT_A);
    gostraight;/一度止めてまっすぐ進み、
    turn;/その場で回転します。
    gostraight;/またまっすぐ進んで、
    Wait(100);
    left;/半円を書いて完成。
   }
//思っていたより時間の調整がシビアだった。更に同じ時間回してもいつも同じ角度回らず苦労した。

* 2. 台から落ちないロボット(必須) [#m6720385]
机の上で動き回るロボットを作成しなさい。 ただし方向変換は机の端に来たときに行うこと。
  task main()
 { SetSensor(SENSOR_3,SENSOR_TOUCH); 
    SetSensor(SENSOR_1,SENSOR_TOUCH);  
  while(true) 
    {OnFwd(OUT_A+OUT_C); 
    until((SENSOR_3==1)||(SENSOR_1==1));
    Off(OUT_A+OUT_C);
    OnRev(OUT_A+OUT_C);
    Wait(100);
    OnFwd(OUT_A);
    OnRev(OUT_C);
    Wait(100);}                     }

* 3. ライントレースをするロボット(必須) [#oec24ec0]
できるだけ速いロボットを作成すること

  #define THRESHOLD 39   // 閾値
  #define RUN_TIME 150   // トレースする時間(単位 1/10 秒)
 task main ()
 {
    SetSensor(SENSOR_1, SENSOR_LIGHT);        
    while ( true ) {        
     if (SENSOR_1 < THRESHOLD) {   
          OnFwd(OUT_A+OUT_C);
        }
     else { 
            OnRev(OUT_A);
            OnFwd(OUT_C);
            Wait(50);            
        } 
     if (SENSOR_1 < THRESHOLD){
            OnFwd(OUT_A+OUT_C);             
        }
     else {OnRev(OUT_C);
            OnFwd(OUT_A);
            Wait(100);
                                    }
  }
  }

* 4. 光を追いかけるロボット(必須) [#k34b2e3b]
まず最初に一回転してもっとも明るい方向(懐中電灯の方向)を探し、次に懐中電灯の光を追いかけて進むようなロボットを作成しなさい。
 int light_max=0; //光センサーの値を0に指定
int time_max=0; //タイマーの値を0に指定


task main ()
{
   SetSensor(SENSOR_2,SENSOR_LIGHT);//光センサーを端子1にセット
   
   ClearTimer(0);//タイマーを0に
    
   While(Timer(1)<50){
    
        OnFwd(OUT_A);//一度ぐるっと回して
        OnRev(OUT_C);//光の強さと光の向きまでかかった時間を覚えさせる
        if(SENSOR_2>light_max){
             light_max = SENSOR_2;//光センサーが感知した最大の値を変数に指定
             time_max = Timer(0);//光の向きまでかかった時間を変数に指定
      
        }
        ClearTimer(0);
        While(Timer(0)<time_max){
            OnRev(OUT_A);//光の向きまで
            OnFwd(OUT_C);//逆に回転させる
        }

        Off(OUT_A+OUT_C);//一度とめて、
        Wait(10);
        OnFwd(OUT_A);//後はまっすぐ進む
        OnFwd(OUT_C);//
   }
}
//変数を利用するのはうまくいったが、このプログラムだと、多分一回しか動かない。時間があれば連続して光を探すプログラムを考えてみたい。(多分ない)

  

* 5. 演奏ロボット(必須) [#o57ee827]
インストラクション(説明書)の最後にある「Top Secret」を参考に、音楽を演奏しながら前進し障害物にぶつかったら(あるいは明るい光にあたったら)後退しながら方向を変えるロボットを作成しなさい。ただし移動のためのモータはひとつだけ使うものとし、また前進しているときと後進している時で違う音楽を演奏すること。

 #define Do  523
 #define Re  587
 #define Mi  659
 #define Fa  698
 #define So 784
 task music1()
 {   while(true){
        PlayTone(Do,15); Wait(20);  // Wait の時間の方を少し長くして
        PlayTone(Mi,15); Wait(20);  // 同じ音を続けて鳴らす場合にも
        PlayTone(Fa,15); Wait(20);  // 一つの音にならないようにしている
        PlayTone(So,60); Wait(20);
    
        PlayTone(Do,15); Wait(20);
        PlayTone(Mi,15); Wait(20);
        PlayTone(Fa,15); Wait(20);
        PlayTone(So,60); Wait(20);
    
        PlayTone(Do,15); Wait(20);
        PlayTone(Mi,15); Wait(20);
        PlayTone(Fa,15); Wait(20);
        PlayTone(So,30); Wait(20);
        PlayTone(Mi,30); Wait(20);
        PlayTone(Do,30); Wait(20);
        PlayTone(Re,30); Wait(20);
        PlayTone(Do,60); Wait(20);
    
        PlayTone(Mi,15); Wait(20);
        PlayTone(Mi,15); Wait(20);
        PlayTone(Re,15); Wait(20);
        PlayTone(Do,35); Wait(20);
        PlayTone(Do,5); Wait(20);
        PlayTone(Mi,15); Wait(20);
        PlayTone(So,15); Wait(20);
        PlayTone(So,15); Wait(20);
        PlayTone(Fa,60); Wait(20);
              
        PlayTone(Mi,15); Wait(20);
        PlayTone(Fa,15); Wait(20);
        PlayTone(So,30); Wait(20);
        PlayTone(Mi,30); Wait(20);
        PlayTone(Do,30); Wait(20);
        PlayTone(Re,30); Wait(20);
        PlayTone(Do,65); Wait(20);
      }
    
  task music2()
 {
    while(true){
        PlayTone(Mi,15); Wait(20);  // Wait の時間の方を少し長くして
        PlayTone(Mi,15); Wait(20);  // 同じ音を続けて鳴らす場合にも
        PlayTone(Fa,15); Wait(20);  // 一つの音にならないようにしている
        PlayTone(So,15); Wait(20);
     
        PlayTone(So,15); Wait(20);
        PlayTone(Fa,15); Wait(20);
        PlayTone(Mi,15); Wait(20);
        PlayTone(Re,15); Wait(20);
     
        PlayTone(Do,15); Wait(20);
        PlayTone(Do,15); Wait(20);
        PlayTone(Re,15); Wait(20);
        PlayTone(Mi,15); Wait(20);
        PlayTone(Mi,22); Wait(20);
        PlayTone(Re,8); Wait(20);
        PlayTone(Re,15); Wait(20);
    
        PlayTone(Mi,15); Wait(20);
        PlayTone(Mi,15); Wait(20);
        PlayTone(Fa,15); Wait(20);
        PlayTone(So,15); Wait(20);
        PlayTone(So,15); Wait(20);
        PlayTone(Fa,15); Wait(20);
        PlayTone(Mi,15); Wait(20);
        PlayTone(Re,15); Wait(20);
        
        PlayTone(Do,15); Wait(20);
        PlayTone(Do,15); Wait(20);
        PlayTone(Re,15); Wait(20);
        PlayTone(Mi,15); Wait(20);
        PlayTone(Re,22); Wait(20);
        PlayTone(Do,7); Wait(20);
        PlayTone(Do,30); Wait(20);
  
   task main()
   {
     start music1;  Wait(500);
     OnFwd(OUT_A+OUT_C); Wait(300); 
     Off(OUT_A+OUT_C); Wait(200);  
     stop music1;
     start music2;  Wait(600);
     OnRev(OUT_A+OUT_C); Wait(600);  
   }

* 6. 二足歩行ロボット(自由) [#a980f986]

* 7. その他(自由) [#x46555d3]

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