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

*目次 [#na94c65b]

#contents

* 1. ハート形を描くロボット(必須) [#iac834ef]
ロボットにペンを取り付けA3用紙にハート型を描くロボットを作成しなさい。
 /*  ハートを描くロボット */
 task main()
 {
 SetPower(OUT_B+OUT_C,1);  //モーターパワー1をに設定
 OnRev(OUT_B+OUT_C); //前進
 Wait(60); //指定時間待つ
 Off(OUT_B+OUT_C); //ペンがぶれるため停止
 Wait(100); //指定時間待つ
 SetPower(OUT_B+OUT_C,1); //モーターパワーを1に設定
 OnRev(OUT_C)  ; //旋回
 Wait(130); //指定時間待つ
 Off(OUT_C+OUT_B); //ペンがぶれるため停止
 Wait(100) ; //指定時間待つ
 SetPower(OUT_B,2); //モーターパワーを2に設定
 OnFwd(OUT_B); //旋回
 Wait(100); //指定時間待つ
 SetPower(OUT_B+OUT_C,1); //モーターパワーを1に設定
 OnFwd(OUT_C); //旋回
 Wait(60); //指定時間待つ
 Off(OUT_B+OUT_C); //停止
 }
* 2. 台から落ちないロボット(必須) [#q0e21f97]
机の上で動き回るロボットを作成しなさい。 ただし方向変換は机の端に来たときに行うこと。 
 /*  台から落ちないロボット */
 task main()
 {
 SetSensor(SENSOR_1, SENSOR_TOUCH); //センサーを定義
 SetSensor(SENSOR_3, SENSOR_TOUCH); //センサーを定義
    while(true)
    {
        OnFwd(OUT_A+OUT_C) ; //出力AとCに接続されたモーターを正回転させる
         until ((SENSOR_1 == 1)||(SENSOR_3 == 1)); //センサー1または2がタッチするまで待つ
 
        OnRev(OUT_A+OUT_C) ; //出力AとCに接続されたモーターを正回転させる
 Wait(50); //指定時間待つ
        OnFwd(OUT_A) ; //出力Aを正回転させる
 Wait(179);      //指定時間待つ
        OnFwd(OUT_C);   //出力Cを正回転させる               
    }
  }
工夫した点  タッチセンサーが反応したあと、何秒待てば後向きになるかを何度も実験した。
* 3. ライントレースをするロボット(必須) [#f03ae568]
できるだけ速いロボットを作成すること
 /*  ライントレースをするロボット */
 #define MOVE_TIME 10000
 task main ()
         {
         SetSensor(SENSOR_1, SENSOR_LIGHT);    //センサー1を光センサーと定義
         ClearTimer(0);                           //タイマーをリセット
         while ( Timer(0) <= MOVE_TIME )
         {  
            if (SENSOR_1 < 40)                           //黒いラインの上にあるとき
              {                                                      ラインの堺目に行くまで回す
                     OnFwd(OUT_A);        
                     Off(OUT_C);           
                 }                                                               
            else                                                   //光センサーの値が40を超えたら
               {                                                   動いていたモーターをストップし   
                     Off(OUT_A);                                 黒いラインまで戻す
                     OnFwd(OUT_C);
                 }
             }
         }
* 4. 光を追いかけるロボット(必須) [#l9266955]
まず最初に一回転してもっとも明るい方向(懐中電灯の方向)を探し、次に懐中電灯の光を追いかけて進むようなロボットを作成しなさい。
 /*  光を追いかけるロボット */
 int light_max=0;
 int time_max=0;
 task main()
 {
   SetSensor(SENSOR_1, SENSOR_LIGHT);      //センサー1を光センサーと定義
   ClearTimer(0);             //タイマーを0にリセット
   while(Timer(0)<100)
  repeat(true)
  {
   {
     OnFwd(OUT_A);                    //一周回り一番明るいところを記憶する
     OnRev(OUT_C);
     if(SENSOR_1>light_max)      
     {                   
        light_max = SENSOR_1;       
        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. 演奏ロボット(必須) [#n62f7a6a]
インストラクション(説明書)の最後にある「Top Secret」を参考に、音楽を演奏しながら前進し障害物にぶつかったら(あるいは明るい光にあたったら)後退しながら方向を変えるロボットを作成しなさい。ただし移動のためのモータはひとつだけ使うものとし、また前進しているときと後進している時で違う音楽を演奏すること。
 /*  1つのモーターで前進後退演奏するロボット */
 #define Do 1047
 #define re 587
 #define mi 659
 #define fa 698
 #define so 784
 #define ra 880
 #define si 988
 #define res 622
 #define ras 932
 #define sos 831
 #define Dos 1109
 #define fas 740
 #define Do 523
 #define Re 587
 #define Mi 659
 #define Fa 698
 #define So 784
 #define Ra 88
 #define Si 988
 #define Res 622
 #define Ras 932
 task play_music1()
 { 
 while(true)
 {
  PlayTone(Do,10);Wait(20);
  PlayTone(Do,10);Wait(20);
  PlayTone(ra,10);Wait(20);
  PlayTone(ra,10);Wait(20);
  PlayTone(ras,10);Wait(20);
  PlayTone(ras,10);Wait(40);
  PlayTone(Do,10);Wait(20);
  PlayTone(Do,10);Wait(20);
  PlayTone(ra,10);Wait(20);
  PlayTone(ra,10);Wait(20);
  PlayTone(ras,10);Wait(20);
  PlayTone(ras,10);Wait(50);
  PlayTone(fa,10);Wait(20);
  PlayTone(fa,10);Wait(20);
  PlayTone(re,10);Wait(20);
  PlayTone(re,10);Wait(20);
  PlayTone(res,10);Wait(20);
  PlayTone(res,10);Wait(50);
  PlayTone(fa,10);Wait(20);
  PlayTone(fa,10);Wait(20);
  PlayTone(re,10);Wait(20);
  PlayTone(re,10);Wait(20);
  PlayTone(res,10);Wait(20);
  PlayTone(res,10);Wait(90);
  
  PlayTone(res,10);Wait(15);
  PlayTone(re,10);Wait(15);
  PlayTone(Do,10);Wait(15);
  PlayTone(Do,10);Wait(30);
  PlayTone(res,10);Wait(30);
  PlayTone(re,10);Wait(30);
  PlayTone(sos,10);Wait(30);
  PlayTone(so,10);Wait(30);
  PlayTone(Dos,10);Wait(30);
  PlayTone(Do,10);Wait(15);
  PlayTone(fas,10);Wait(15);
  PlayTone(mi,10);Wait(15);
  
  PlayTone(ras,10);Wait(15);
  PlayTone(sos,10);Wait(15);
  PlayTone(res,10);Wait(30);
  PlayTone(si,10);Wait(15);
  PlayTone(ras,10);Wait(15);
  PlayTone(ra,10);Wait(30);
  PlayTone(fas,10);Wait(15);
  PlayTone(so,10);Wait(130);
  
  
  }
  }

 task play_music2()
 {
 while(true)
  {
  PlayTone(Re,50);Wait(55);
  PlayTone(Fa,25);Wait(30);
  PlayTone(Re,25);Wait(30);
  PlayTone(Fa,25);Wait(30);
  PlayTone(So,25);Wait(30);
  PlayTone(Fa,50);Wait(55);
  PlayTone(So,50);Wait(55);
  PlayTone(Ras,50);Wait(55);
  PlayTone(Fa,50);Wait(150);
  }
 }
 task main()
 {
 SetSensor(SENSOR_1,SENSOR_TOUCH);
 while(true){
 start play_music2 ; //梅酒を演奏
 stop play_misic1;  //マリオをとめる
 OnFwd(OUT_B); //前進
 until(SENSOR_1==1);//タッチセンサーがさわるまで
 if(SENSOR_1==1)
 {
 stop play_misic2;//梅酒をとめる
 start play_music1;//マリオを演奏
 OnRev(OUT_B);//後退しながらまがる
 Wait(200);2秒まつ
 }
 }
 }  
* 6. 二足歩行ロボット(自由) [#e24b0c38]

* 7. その他(自由) [#da73b281]
 /*  四角く渦を描くロボット */
 #define turn_time 20        //直角に曲がるのに必要な時間
 #define wait_time 100
 int move_time;
 task main()
 {
 move_time=30;                        //少し前進し止まる
 OnFwd(OUT_A+OUT_B);
 Wait(move_time);
 Off(OUT_A+OUT_B);
 Wait(wait_time);
         OnFwd(OUT_A);                  //直角に曲がり止まる
         OnRev(OUT_B);
         Wait(turn_time);
         Off(OUT_A+OUT_B);
         Wait(wait_time);
 repeat(4)
    {                                                 //前進する時間を少しずつ増やしながら
 move_time=move_time+30;         今までの動作を繰り返す
 OnFwd(OUT_A+OUT_B);
 Wait(move_time);
 Off(OUT_A+OUT_B);
 Wait(wait_time); 
         OnFwd(OUT_A);
         OnRev(OUT_B);
         Wait(turn_time);
         Off(OUT_A+OUT_B);
         Wait(wait_time);
     }
 }

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS