2006a/B5

光を追いかけるロボット

光源を見失った時には明るさに比例した周波数の音を出しながら旋回して光源を探すプログラム

task main ()
{
  SetSensor (SENSOR_1, SENSOR_LIGHT);
  SetSensor (SENSOR_2, SENSOR_LIGHT);
  while (true)
    { 
       if(SENSOR_1 > SENSOR_3)               //SENSOR_1の値がSENSOR_3の値より大きい場合
           {
               OnFwd(OUT_A);
               Off(OUT_C);
               PlayTone(SENSOR_1 * 10, 3);   //SENSOR_1の値の10倍の周波数の音を出しながら右に旋回
            }
       if(SENSOR_1 < SENSOR_3)               //SENSOR_3の値がSENSOR_1の値より大きい場合
           {
               OnFwd(OUT_C);
               Off(OUT_A);
               PlayTone(SENSOR_3 * 10, 3);   //SENSOR_3の値の10倍の周波数の音を出しながら左に旋回
           }
     }
}

工夫

  • 二つのセンサーに角度をつけ、左右のセンサーのとる値がはっきり分かれるようにした
robo01.JPG

光を見失ったら、曲を演奏しながら光を探す

//------------------------音楽-----------------------
#define Do  523
#define Re  587
#define Mi  659
#define Fa  698
#define Sol 784
#define Ra 880
#define Si 988
#define Doa 1047
#define Rea 1175
#define Mia 1319
#define Faa 1397
task music()                                //音楽演奏用タスク[music]
{
    while (true)                         //↓演奏プログラム[高橋]
    {
        PlayTone(Mi,15); Wait(20);                   //も
        PlayTone(Sol,15); Wait(20);         //え
        PlayTone(Doa,15); Wait(20);         //あ
        PlayTone(Doa,35); Wait(40);         //が〜
        PlayTone(Doa,55); Wait(60);         //れ〜
        PlayTone(Mi,15); Wait(20);          //も
        PlayTone(Sol,15); Wait(20);                  //え
        PlayTone(Doa,15); Wait(20);                  //あ
        PlayTone(Doa,35); Wait(40);                  //が〜
        PlayTone(Doa,55); Wait(60);                  //れ〜
        PlayTone(Fa,15); Wait(20);                   //も
        PlayTone(Ra,15); Wait(20);                   //え
        PlayTone(Doa,15); Wait(20);                  //あ
        PlayTone(Doa,35); Wait(40);                  //が〜
        PlayTone(Doa,55); Wait(60);                  //れ〜
        PlayTone(Si,15); Wait(20);                   //が
        PlayTone(Ra,15); Wait(20);                   //ん
        PlayTone(Si,15); Wait(20);                   //だ
        PlayTone(Si,95); Wait(100);                  //む〜
    }
}
//----------------------音楽ここまで-----------------------
//
//-------------------------メイン--------------------------
//
task main ()
{
  SetSensor (SENSOR_1, SENSOR_LIGHT);             //センサー1,2を光センサーに設定
  SetSensor (SENSOR_2, SENSOR_LIGHT);
  int music_flag = 0;                           //変数(スイッチ)music_flagを作る 初期値0
//-----------------------↓-繰り返し-↓--------------------
  while (true)      
    {
    //
    //========センサー1========
      if(SENSOR_1 < 60 )                       //センサー1の値が60以下のとき
         {    
            if (music_flag == 0)                //music_flagが0ならば
                {
                  start music;              //演奏をスタートし
                  music_flag = 1;            //music_flagの値を1に置き換え
                }  
         }else{                          //センサー1が60以上のとき
            if (music_flag == 1)                 //music_flagが1ならば
                {
                  stop music;             //演奏をストップし
                  music_flag = 0;           //music_flagの値を0に置き換え
                }   
              }
  //  
  //=========センサー3========
    if(SENSOR_3 < 60 )                         //センサー3の値が60以下のとき
         {   
            if (music_flag == 0)              //music_flagが0ならば
                {
                 start music;             //演奏をスタートし
                 music_flag = 1;           //music_flagの値を1に置き換え
                }  
         }else{                        //センサー3が60以上のとき  
             if (music_flag == 1)               //music_flagが1ならば
                {
                 stop music;             //演奏をストップし
                 music_flag = 0;           //music_flagの値を0に置き換え
                }
              }
   //
   //==========光を追いかける基本プログラム=========
     if(SENSOR_1 > SENSOR_3)                   //センサー1がセンサー3より大きければ
          {
            OnFwd(OUT_A);                        //Aを回転
            Off(OUT_C);
           }
     if(SENSOR_1 < SENSOR_3)                   //センサー3がセンサー1より大きければ
          {
            OnFwd(OUT_C);                      //Cを回転
            Off(OUT_A);
          }
    }  
//---------------------↑-繰り返し-↑-----------------------
    } 
//丸岡

分かりにくいので

フローチャート始めました( 'Д')ノ
フローチャート.JPG
  • この動作をセンサー1,2それぞれについて行う
  • music_flagが1のとき、音楽を演奏し、0のときは演奏をやめる
  • 同時に明るいほうへ進むプログラムも実行されている
こちらは初期の誤作動時のプログラム
センサーが60以下のとき、musicが何度もスタートされる
その結果、最初のミの音だけが流れ続けた
フローチャート-1.JPG

工夫

  • スイッチ[music_flag]を使い、start music が何度も繰り返される誤作動を修正した
  • 本体のタイヤ間の距離を、やや縮め、小回りがきくようにした
  • 二つのセンサーに角度をつけ、左右のセンサーのとる値がはっきり分かれるようにした

コメントはこちらから↓

  • フローチャートいいですね! -- ゆき(TA)? 2006-07-14 (金) 14:51:39
  • 「フローチャート始めました( 'Д')ノ」って冷やし中華みたいですばらしい(ぇ -- まいける(TA) 2006-07-21 (金) 00:31:44


添付ファイル: fileフローチャート-1.JPG 262件 [詳細] filerobo01.JPG 257件 [詳細] fileフローチャート.JPG 444件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-21 (金) 00:31:44