2006b/A3

課題3

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

ロボット作成について

今回はモーターを3つ使って2つはタイヤを動かすためのモーター、もう1つはセンサーだけを回転させるように作りました。本体全体で光を探すために回転すると時間がかかってしまう。しかし、光センサーだけが回転すると時間を大幅に削減することができます。また、センサーを回転させるのには輪ゴムにより動力を伝達させました。ギアだと組み合わせるのが大変であり、また輪ゴムの方がスムーズに動けるんではないかと思ったので、ギアはやめました。光源を見つけたらロボットは光源に向かって直進し、光を見失ったらまたセンサーだけ回転して光を探しまします。

kaiten.jpg
kaiten2.jpg

苦労した点&工夫した点

  1. センサーを回転させる時にコードが絡まってしまいコードが絡まないように歯車で動かす方法からゴムにより回転させる方法に変えた。さらに回転した後に逆回転することでコードを絡ませないですむ。
    kaitenn1.jpg
  2. メロディーを作るときにうまく音程が合わず何度も数値をかえて大変だった。しかし、しっかり聞き取れるくらいまでにできてよかった。
  3. センサーの回転時間と本機の回転時間とでは回転角度が違ってくるのでそれぞれのモーターでの回転数をほぼ同じにした。また回転する軸をしっかり固定するのが大変であり、輪ゴムの力で軸がうまく固定できなかった。だが、ブロックである程度固定することである程度安定できた。

プログラム

#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(FastTimer(0)<TURN_TIME)  //もし光源を見つけたら
         {
          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をリセット
         ClearTimer(3);  //タイマ−3をリセット
         OnFwd(OUT_B);   //モーターを回転し光源捜索
         if(fastTimer(3)==150);   //1.5秒過ぎたら
         {
           Onrev(OUT_B);Wait(150);  //センサーを戻して
           Off(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);    //光源に向かって直進
         }       
    }     
 }

感想

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

プログラムやホームページに関するコメントお願いします。



添付ファイル: filekaitenn1.jpg 309件 [詳細] filekaiten2.jpg 302件 [詳細] filekaiten.jpg 318件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-02-09 (金) 09:55:43