[[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   150
 task main()
 {
     SetSensor(SENSOR_1,SENSOR_LIGHT); 
     int time_max;  時間を変数と定義
     ClearTimer(0);  タイマー0をリセット
     while(FastTimer(0)< TURN_TIME) タイマーが回っている間
     {
         start play_music1;  音楽1スタート
         OnFwd(OUT_B);   センサーがついてるモーター回転
         if(SENSOR_1>50)  もし光源を見つけたら
          {
           ClearTimer(1);    タイマー1をリセット
          }
      }
         OnRev(OUT_B);Wait(150); モーターを逆回転
         Off(OUT_B);     センサーを止める
         OnFwd(OUT_A);OnRev(OUT_C); タイヤを光源に向かせる
         Wait(FastTimer(1));
         OnFwd(OUT_C); 光源に向かって前進
         stop play_music1;  音楽1ストップ
         
     while(true)
     {
         start play_music2;  音楽2スタート
         if(SENSOR_1<50)  もしセンサーが光源を見失ったら
          {
          Off(OUT_A+OUT_C);  前進ストップ
          ClearTimer(2);  タイマ−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           他は
          {
           OnFwd(OUT_A+OUT_C);    光源に向かって直進
          }       
     }     
  }
*感想 [#q20453a1]
プログラムが複雑で作るのが大変だったけどなんとかできてよかった。次はいよいよロボコンに向けたロボット、プログラム作りなのでがんばっていきたいです。

プログラムやホームページに関するコメントお願いします。
-センサを回転する機構の写真があればぜひ掲載してください。 -- [[松本(教員)]] &new{2007-01-09 (火) 13:57:08};
-プログラムのコメントをきちんとつけてください。 -- [[まいける(TA)]] &new{2007-01-12 (金) 07:33:15};
-[[前回の授業で撮った写真をアップ:http://yakushi.shinshu-u.ac.jp/robotics-photo/2006b/]]しましたので、是非使ってください。 -- [[松本(教員)]] &new{2007-01-17 (水) 16:21:52};

#comment

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