2006a/A5

〜もくじぃぃ〜

課題3 光を追いかけるロボット

制作者 ポロリ ドラ 毛利 モロ

ロボット名 ザンテ♪ ザンテ♪ しかしこのザンテ♪零号機はボツになった・・・

経緯

P1010006.JPGセンサーが2つ→→→P1000001.JPGセンサー1つに変えたザンテ♪初号機

今回のロボットは今までのプログラミングと少し違っていたため少し苦労した。
また、曲を「残●な天●のテー●゛」にしました(≧Å≦)ゞ
※曲のデータは、諸処の事情でここには載せていません。聞きたい人は、各自のノートから探して下さい。何処かにあります。
今回のザンテ♪は「スマートに」をコンセプトに作りました。今までの4輪駆動をやめて、前輪・後輪タイヤをできるだけ近くに寄せた。
そのため車体全体のバランスがとてもよくなり、動きがとてもスムーズなFR仕様車が完成した。
次にセンサーについてだが、できるだけ光源を見つけやすくなるだろうと思いフロントのしかもタイヤより高い位置に取り付けた。
しかし!!!逆に光を感知しにくくなった。。。
また、プログラミングに関してもプログラミングがいかれてて、光源を見つけるどころか、
光源から離れて行くという奇妙なヤツができてしまった・・・
そこで、一旦フロント部分を解体して光センサーを一つにした。そのセンサーの取り付け位置もほぼタイヤと同じぐらいの高さに取り付けた。
その結果、光源を前以上に見つけやすくなった♪

P1000003.JPG タイヤをかなり密着させた P1000002.JPG 真上からみたザンテ♪初号機!!コンセプトは「スマートに」 P1000004.JPG完成したザンテ♪初号機

プログラミング

光を追いかけるプログラミング その1  (作成者:ポロリ)

#define TURN_TIME 200                     //一回転する時間を200とおく
 
 task main ()
 {
   SetSensor(SENSOR_1, SENSOR_LIGHT);     
   int light_max=0;                       //最初の光量を0とする        
   int time_max=0;                        //最初の時間を0としる
   ClearTimer(0);                         //タイマーのリセット
   
   OnFwd(OUT_A);                          //回転
   OnRev(OUT_C);
   
   while(FastTimer(0)<TURN_TIME){      //回転時間が決めた時間より小さいとき      
     if(SENSOR_1>light_max){              //光量がセンサー1より小さいとき
       light_max=SENSOR_1;             
       time_max=FastTimer(0);
     }
   }
   OnFwd(OUT_A);                          //最大の時間まで回転
   OnRev(OUT_C);                        
    Wait(time_max);
}
  

光を追いかけるプログラミング その2  (作成者:ドラ)

int Light=0;                                //最初の光量を0とおく
int turn_time=300;                          //回転時間を300とおく

task main()
{
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  ClearTimer(0);                            //タイマーリセット
  
 
  while(Timer(0)<=turn_time)                //決めた回転時間より短い時間の間
     {
        if(SENSOR_1>Light)                  //決めた光量より大きい値をセンサー1が感知したとき
          {
              Light=SENSOR_1;               //センサー1で感知した光量の値に置き換える
          }
          
       OnFwd(OUT_A);                        //回転
       OnRev(OUT_C);
     }
     
   OnFwd(OUT_A);
   OnRev(OUT_C);
   until(SENSOR_1>=Light);          //センサー1の値を超えるまで
     
  while(true)
     {
        if(SENSOR_1<Light)                  //センサーが光から外れたとき  
          {
              OnFwd(OUT_A);
              OnRev(OUT_C);
              until(SENSOR_1>=Light);       //センサーが光を見るまで
          }
        else                  //センサーが光の中のとき
          {
              OnFwd(OUT_A+OUT_C);           
              until(SENSOR_1<Light);        //センサーが光からはずれるまで
          }  
     }
}
 

光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探すプログラミング  (作成者:毛利)

#define TURN_TIME 200
#define Do 1047            //「ド」がなる。
#define Re 1175            //「レ」がなる。
#define Mi 1319            //「ミ」がなる。
#define Fa 1397            //「ファ」がなる。
#define So 784             //「ソ」がなる。
#define Ra 880             //「ラ」がなる。
#define Si 988             //「シ」がなる。
task play_music()     //音楽1(曲名不明)
{
      while(true)
      {
           PlayTone(So,25);Wait(30);
           PlayTone(Do,25);Wait(30);
           PlayTone(Si,25);Wait(30);
           PlayTone(Do,25);Wait(30);
           PlayTone(Re,25);Wait(30);
           PlayTone(Ra,25);Wait(30);
           PlayTone(Re,50);Wait(60);
           PlayTone(Do,25);Wait(55);
           PlayTone(Si,25);Wait(30);
           PlayTone(Ra,25);Wait(30);
           PlayTone(Si,25);Wait(30);
           PlayTone(Do,50);Wait(55);
           PlayTone(So,50);Wait(55);
           
           PlayTone(So,25);Wait(30);
           PlayTone(Do,25);Wait(30);
           PlayTone(Si,25);Wait(30);
           PlayTone(Do,25);Wait(30);
           PlayTone(Re,25);Wait(30);
           PlayTone(Ra,25);Wait(30);
           PlayTone(Re,50);Wait(55);
           PlayTone(Do,25);Wait(30);
           PlayTone(Si,25);Wait(30);
           PlayTone(Ra,25);Wait(30);
           PlayTone(Si,25);Wait(30);
           PlayTone(Do,100);Wait(105);
         
           PlayTone(Mi,25);Wait(30);
           PlayTone(Mi,25);Wait(30);
           PlayTone(Mi,50);Wait(60);
           PlayTone(Mi,25);Wait(30);
           PlayTone(Mi,25);Wait(30);
           PlayTone(Mi,50);Wait(60);
           PlayTone(Mi,25);Wait(30);
           PlayTone(Re,25);Wait(30);
           PlayTone(Do,25);Wait(30);
           PlayTone(Re,25);Wait(30);
           PlayTone(Mi,50);Wait(55);
         
           PlayTone(Mi,25);Wait(30);
           PlayTone(Mi,25);Wait(30);
           PlayTone(Fa,25);Wait(30);
           PlayTone(Mi,25);Wait(30); 
           PlayTone(Re,25);Wait(30);
           PlayTone(Ra,25);Wait(30);
           PlayTone(Re,50);Wait(55);
           PlayTone(Do,25);Wait(30);
           PlayTone(Si,25);Wait(30);
           PlayTone(Ra,25);Wait(30);
           PlayTone(Si,25);Wait(30);
           PlayTone(Do,100);Wait(105);
           
      }
}

int Light=0;
int turn_time=90; 


task main()
{
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  ClearTimer(0);
  
  
  while(Timer(0)<=turn_time)
     {
        if(SENSOR_1>Light)
          {
              Light=SENSOR_1;
          }
          
       OnFwd(OUT_A);
       OnRev(OUT_C);
     }
     
   OnFwd(OUT_A);
   OnRev(OUT_C);
   start play_music;                    //センサ−1の値を超えるまで音楽がなる
   until(SENSOR_1>=Light);
     
  while(true)
     {
        if(SENSOR_1<Light)    
          {
              OnFwd(OUT_A);
              OnRev(OUT_C);
              until(SENSOR_1>=Light);
          }
       else
          {
              OnFwd(OUT_A+OUT_C);
              stop play_music;          //センサー1の値を下回ると音楽が止まる
              until(SENSOR_1<Light);
          }  
     }
}
             
 

光源を見失っていないときにはある曲を演奏し、見失った時には別の曲を演奏しながら光源を探すプログラミング  (作成者:モロ)

#define Do 532
#define Re 587
#define Mi 659
#define Fa 698
#define So 784
#define Ra 880
#define Doa 1047
#define Rea 1175
#define Mia 1319
#define Faa 1397
#define Si 988 

task play_music2()                    //音楽2(曲名不明)
{
      while(true)
      {
           PlayTone(So,25);Wait(30);      
           PlayTone(Doa,25);Wait(30);
           PlayTone(Si,25);Wait(30);
           PlayTone(Doa,25);Wait(30);
           PlayTone(Rea,25);Wait(30);
           PlayTone(Ra,25);Wait(30);
           PlayTone(Rea,50);Wait(60);
           PlayTone(Doa,25);Wait(55);
           PlayTone(Si,25);Wait(30);
           PlayTone(Ra,25);Wait(30);
           PlayTone(Si,25);Wait(30);
           PlayTone(Doa,50);Wait(55);
           PlayTone(So,50);Wait(55);
           
           PlayTone(So,25);Wait(30);
           PlayTone(Doa,25);Wait(30);
           PlayTone(Si,25);Wait(30);
           PlayTone(Doa,25);Wait(30);
           PlayTone(Rea,25);Wait(30);
           PlayTone(Ra,25);Wait(30);
           PlayTone(Rea,50);Wait(55);
           PlayTone(Doa,25);Wait(30);
           PlayTone(Si,25);Wait(30);
           PlayTone(Ra,25);Wait(30);
           PlayTone(Si,25);Wait(30);
           PlayTone(Doa,100);Wait(105);
         
           PlayTone(Mia,25);Wait(30);
           PlayTone(Mia,25);Wait(30);
           PlayTone(Mia,50);Wait(60);
           PlayTone(Mia,25);Wait(30);
           PlayTone(Mia,25);Wait(30);
           PlayTone(Mia,50);Wait(60);
           PlayTone(Mia,25);Wait(30);
           PlayTone(Rea,25);Wait(30);
           PlayTone(Doa,25);Wait(30);
           PlayTone(Rea,25);Wait(30);
           PlayTone(Mia,50);Wait(55);
         
           PlayTone(Mia,25);Wait(30);
           PlayTone(Mia,25);Wait(30);
           PlayTone(Faa,25);Wait(30);
           PlayTone(Mia,25);Wait(30);
           PlayTone(Rea,25);Wait(30);
           PlayTone(Ra,25);Wait(30);
           PlayTone(Rea,50);Wait(55);
           PlayTone(Doa,25);Wait(30);
           PlayTone(Si,25);Wait(30);
           PlayTone(Ra,25);Wait(30);
           PlayTone(Si,25);Wait(30);
           PlayTone(Doa,100);Wait(105);
           
      }
} 
 
task play_music1()                    //音楽1(カントリーロード→メリーさんの羊)
{
   while (true)
   {
       PlayTone(Do,35); Wait(40);
       PlayTone(Re,35); Wait(40);
       PlayTone(Mi,235); Wait(240);
           
       PlayTone(Mi,15); Wait(20);
       PlayTone(Re,15); Wait(20);
       PlayTone(Do,35); Wait(40);
       PlayTone(Re,235); Wait(240);  

 
       PlayTone(Mi,35); Wait(40);
       PlayTone(Re,35); Wait(40);
       PlayTone(Do,235); Wait(240); 

       PlayTone(Mi,15); Wait(20);
       PlayTone(So,15); Wait(20);
       PlayTone(So,35); Wait(40); 

 
       PlayTone(Mi,25); Wait(30);
       PlayTone(Re, 5); Wait(10);
       PlayTone(Do,15); Wait(20);
       PlayTone(Re,15); Wait(20); 
  
 
       PlayTone(Mi,15); Wait(20);
       PlayTone(Mi,15); Wait(20);
       PlayTone(Mi,35); Wait(40); 
  
 
       PlayTone(Re,15); Wait(20);
       PlayTone(Re,15); Wait(20);
       PlayTone(Mi,25); Wait(30);
       PlayTone(Re, 5); Wait(10); 
  
 
       PlayTone(Do,55); Wait(60);
       Wait(20);
   }
} 

    

int Light=0;
int turn_time=90; 


task main()
{
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  ClearTimer(0);
  
  
  while(Timer(0)<=turn_time)
     {
        if(SENSOR_1>Light)
          {
              Light=SENSOR_1;
          }
          
       OnFwd(OUT_A);
       OnRev(OUT_C);
     }
     
   OnFwd(OUT_A);            
   OnRev(OUT_C);
   start play_music1;                        //センサ−1の値を超えるまで音楽がなる
   until(SENSOR_1<Light);
  while(true)
     {
        if(SENSOR_1<Light)    
          {
              OnFwd(OUT_A);
              OnRev(OUT_C);
              stop play_music1              //音楽1とまる
              start play_music2;            //センサ−1の値を超えるまで音楽2がなる
              until(SENSOR_1>=Light);
          }
       else
          {
              OnFwd(OUT_A+OUT_C);
              stop play_music2;             //音楽2とまる
              start play_music1;            //センサー1の値を下回るまで音楽1がながれる
              until(SENSOR_1<Light);
          }  
     }
} 

問題点

僕たちグループは全然音楽に強い人がいなくて、音楽を作るのが難しかった(′д`;)
最初にどの音楽にするかは話し合ってすぐに決まったものの、
いざ、その音楽のプログラムを作ろうとすると楽譜を見てみても全然わからずに大変だった。
それでも何とかプログラムを作ってみた。しかし、音の高さなどがところどころずれていたり、
音の長さや音と音の間の長さがまったくあってなかったりして微妙なプログラムになってしまいました。
その後、音の長さをどれぐらいにするだとかをみんなで話しあったり試行錯誤しながらようやく完成しました。
次に音楽はできたのだが、「光を追いかける」という新しいプログラミングがすごく苦労した。
まず、光源を見失ったときには曲を演奏しながらぐるっと旋回して光源を探すという課題に挑戦した。
最初はまったくわからず、先生が最初に説明してくれたようにプログラムを作ってみたがあまりうまくいかなかった。

工夫した点

光センサーの取り付けが、何処に付けるかで苦労した。最終的にはフロントタイヤと同じぐらいの高さに、
また、タイヤより前に取り付けた。そのため、光源を感知しやすくなった。
車体全体に関しても、できるだけ小回りできるようにタイヤとの間隔・重心のバランスを考えて設計した!!
また、プログラミングについてだが、3周ザンテ♪が回ってから光源を見つけるというものにした。
もともとはもっと長かった。しかしそうするとザンテ♪がだんだんと螺旋回転してしまい、
見た目が悪かったからだ。結果、見た目にもかなりいいものができたと思う。

反省&感想

今回はそれなりにみんな集まって、製作することができてよかった。また、音楽に関しても苦労はしたが面白い曲ができて楽しかった。
反省としては、曲にこだわりを持ちすぎて、曲のクオリティの方が本来のプログラミングより超えてしまったきがした(汗)
ザンテ♪はいろいろあったが、面白いヤツでそれなりに気に入ってます♪

コメントしてくんれ



添付ファイル: fileP1000004.JPG 293件 [詳細] fileP1000003.JPG 322件 [詳細] fileP1000002.JPG 281件 [詳細] fileP1000001.JPG 284件 [詳細] fileP1010008.JPG 297件 [詳細] fileP1010007.JPG 153件 [詳細] fileP1010006.JPG 298件 [詳細]

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