[[2006b/A3]]

*課題3 [#r1e59d97]
懐中電灯などの光源を用意する。まず明るさに比例した周波数の音を出しながら全方角の中から光源のある方角を探し、探した後は、光源の光を追いかけて進むロボットを作成せよ。

*ロボット作成について [#jdfac5b9]
今回はモーターを3つ使って2つはタイヤを動かすためのモーター、もう1つはセンサーだけを回転させるように作りました。これにより機体全体を動かすよりも時間が短縮でき、すぐ次の動作に移ることができるようにしました。
*苦労した点&工夫した点 [#y98c646d]
+センサーを回転させる仕組みを作成するときモーターを設置する場所に苦労した。また、歯車をかみ合わせるときにも苦労した。
+メロディーを作るときにうまく音程が合わず何度も数値をかえて大変だった。しかし、しっかり聞き取れるくらいまでにできてよかった。
+
*プログラム [#ca62de6e]
 #define  Do  523       音程を定義
 #define  Re  587
 #define  Me  659
 task play_music1()
 { 
     while(true)         チャルメラ演奏
     {
      PlayTone(Do,15); Wait(20);
      PlayTone(Re,15); Wait(20);
      PlayTone(Me,30); Wait(40);
      PlayTone(Re,15); Wait(20);
      PlayTone(Do,15);Wait(25);
      PlayTone(Do,13);Wait(18);
      PlayTone(Re,13);Wait(18);
      PlayTone(Me,13);Wait(18);
      PlayTone(Re,13);Wait(18);
      PlayTone(Do,13);Wait(18);
      PlayTone(Re,30);Wait(40);
      Wait(20);
      }
 }
 #define   d_     440   音程を定義
 #define   re_    494
 #define   me_    523
 #define   fa_    587
 #define   so_    659
 #define   ra_    698
 #define   si_     784
 #define   dd   880
 #define   ree    988
 task play_music2()
 {
     while(true)         スターウォーズ演奏
     {
     PlayTone(d_,20);Wait(25);
     PlayTone(so_,20);Wait(25);
     PlayTone(fa_,10);Wait(15);
     PlayTone(me_,10);Wait(15);
     PlayTone(re_,10);Wait(15);
     PlayTone(dd,20);Wait(25);
     PlayTone(so_,20);Wait(25);
     PlayTone(fa_,10);Wait(20);
     PlayTone(me_,10);Wait(20);
     PlayTone(re_,10);Wait(20);
     PlayTone(dd,20);Wait(25);
     PlayTone(so_,20);Wait(25);
     PlayTone(fa_,10);Wait(15);
     PlayTone(mi_,10);Wait(15);
     PlayTone(fa_,10);Wait(15);
     PlayTone(ree,25);Wait(30);
     Wait(20);
     }
 }
ここまでは音楽のプログラム。↑
次は機械を動かすためのプログラム。↓
 #define TURN_TIME   300    時間を定義
 #define TURN_TIME   150
 task main()
 {
     SetSensor(SENSOR_1,SENSOR_LIGHT);
     int light_max;  光の値を変数と定義
     int time_max;   時間を変数と定義
     ClearTimer(0);   タイマーをリセット
     while(FastTimer(0)< TURN_TIME)  3秒間の間
     int time_max;
     ClearTimer(0); 
     while(FastTimer(0)< TURN_TIME)
     {
         start play_music1; 音楽1スタート
         OnFwd(OUT_B); センサーがついたモーター回転
         if(SENSOR_1> light_max) 
         start play_music1;
         OnFwd(OUT_B);
         if(SENSOR_1>50) 
          {
           ClearTimer(1);  タイマー1をカウント開始
           light_max=SENSOR_1;  回転したうちで一番      
          }           強い値をセンサーに代入
           ClearTimer(1);    
          }
      }
         OnFwd(OUT_A);OnRev(OUT_C); 右回転 
         Wait(ClearTimer(1));
         stop play_music1;  音楽1止める
         OnRev(OUT_B);Wait(150);
         Off(OUT_B);
         OnFwd(OUT_A);OnRev(OUT_C);
         Wait(FastTimer(1));
         OnFwd(OUT_C);
         stop play_music1;
         
     while(true)
     {
         start play_music2;  音楽2開始
         if(SENSOR_1<light_max) もし光をセンサーが探知       {             できなかったら
           OnFwd(OUT_B);Wait(300);  モーターを光を探知する
           until(SENSOR_1>=light_max); まで回転
         start play_music2;
         if(SENSOR_1<50)
          {
          Off(OUT_A+OUT_C);
          ClearTimer(2);
          OnFwd(OUT_B);; 
          until(SENSOR_1>=50);
          OnRev(OUT_B);Wait(FastTimer(2));
          Off(OUT_B);
          OnFwd(OUT_A);OnRev(OUT_C);Wait(FastTimer(2));
          OnFwd(OUT_C);
          }
         else           他の場合は
         else
          {
           OnFwd(OUT_A+OUT_C);   進む
           OnFwd(OUT_A+OUT_C);
          }       
     }     

  }
*感想 [#q20453a1]
プログラムが複雑で作るのが大変だったけどなんとかできてよかった。次はいよいよロボコンに向けたロボット、プログラム作りなのでがんばっていきたいです。

プログラムやホームページに関するコメントお願いします。
-センサを回転する機構の写真があればぜひ掲載してください。 -- [[松本(教員)]] &new{2007-01-09 (火) 13:57:08};

#comment


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