2006a/MemberOnly/進行状況A

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

ロボット

ロボット自体は、最初は走行用の車のロボットの上に光センサーをつけただけのいたってシンプルなものであった。持ち運びも楽だし、壊れにくい。 しかしそれだけでは寂しいので、ちょっと飾りをつけて愛嬌のある奴にしてみた。車の部分は前の課題で使用したのが残っていたので、そう苦労はなかった。

200607281317000.jpg

ー其の1ー 光源を見失った時は曲を演奏しながら旋回して光源を探す

制作者 SHU Kayo Fuji [#e91d659a]

試作プログラム

#define Do 262          //メロディの周波数を定義する
#define Re 294
#define Mi 330
#define Fa 349
#define Sol 392
#define Ra 440

task play_music()         //音楽演奏のタスク
{
  while (true)
  {
PlayTone(Do,15);Wait(20);   //カエルの歌を演奏♪
PlayTone(Re,15);Wait(20);
PlayTone(Mi,15);Wait(20);
PlayTone(Fa,15);Wait(20);
PlayTone(Mi,15);Wait(20);
PlayTone(Re,15);Wait(20);
PlayTone(Do,35);Wait(40);

PlayTone(Mi,15);Wait(20);
PlayTone(Fa,15);Wait(20);
PlayTone(Sol,15);Wait(20);
PlayTone(Ra,15);Wait(20);
PlayTone(Sol,15);Wait(20);
PlayTone(Fa,15);Wait(20);
PlayTone(Mi,35);Wait(40); 

PlayTone(Do,35);Wait(40);
PlayTone(Do,35);Wait(40);
PlayTone(Do,35);Wait(40);
PlayTone(Do,35);Wait(40);  

PlayTone(Do,5);Wait(10);
PlayTone(Do,5);Wait(10);
PlayTone(Re,5);Wait(10);
PlayTone(Re,5);Wait(10);
PlayTone(Mi,5);Wait(10);
PlayTone(Mi,5);Wait(10);
PlayTone(Fa,5);Wait(10);
PlayTone(Fa,5);Wait(10); 

PlayTone(Mi,15);Wait(20);
PlayTone(Re,15);Wait(20);
PlayTone(Do,35);Wait(40);
Wait(40);
}
}

task main()                      //メインタスク
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を定義。ライトセンサー
start play_music ;         //音楽演奏のタスクをスタート
OnFwd(OUT_A);           //旋回する
OnRev(OUT_C);
until(SENSOR_1>60);        //光源がみつかったら・・・
while(true){            //光源認識中は以下を実行
if(SENSOR_1>60){
stop play_music ;          //まず演奏を止めて、
OnFwd(OUT_A+OUT_C);         //光に向かって走る!
}
else{                 //光を見失ったら、
start play_music ;          //再び音楽を鳴らしながら旋回して、光を探す
OnFwd(OUT_A);
OnRev(OUT_C);
}}
}
}

完成プログラム

#define Do 262        //メロディの周波数を定義する
#define Re 294
#define Mi 330
#define Fa 349
#define Sol 392
#define Ra 440



task play_music()              //音楽演奏のタスク
{
   while (true)
   {
PlayTone(Do,15);Wait(20);   //カエルの歌を演奏♪
PlayTone(Re,15);Wait(20);
PlayTone(Mi,15);Wait(20);
PlayTone(Fa,15);Wait(20);
PlayTone(Mi,15);Wait(20);
PlayTone(Re,15);Wait(20);
PlayTone(Do,35);Wait(40);
PlayTone(Mi,15);Wait(20);
PlayTone(Fa,15);Wait(20);
PlayTone(Sol,15);Wait(20);
PlayTone(Ra,15);Wait(20);
PlayTone(Sol,15);Wait(20);
PlayTone(Fa,15);Wait(20);
PlayTone(Mi,35);Wait(40);
PlayTone(Do,35);Wait(40);
PlayTone(Do,35);Wait(40);
PlayTone(Do,35);Wait(40);
PlayTone(Do,35);Wait(40);
PlayTone(Do,5);Wait(10);
PlayTone(Do,5);Wait(10);
PlayTone(Re,5);Wait(10);
PlayTone(Re,5);Wait(10);
PlayTone(Mi,5);Wait(10);
PlayTone(Mi,5);Wait(10);
PlayTone(Fa,5);Wait(10);
PlayTone(Fa,5);Wait(10);
PlayTone(Mi,15);Wait(20);
PlayTone(Re,15);Wait(20);
PlayTone(Do,35);Wait(40);
Wait(40);
}
}
task main()              //メインタスク
{
SetSensor(SENSOR_1,SENSOR_LIGHT);   //センサー1を定義。光センサー
while(true){              //試作からの変更点。最初の部分ををWhileのルーチンに組み込んだ
start play_music ;           //カエルの歌を鳴らしながら旋回。
OnFwd(OUT_A);
OnRev(OUT_C);
until(SENSOR_1>60);          //光源を感知したら、
stop play_music;           //演奏をストップして、
OnFwd(OUT_A+OUT_C);          //光に向かって走る!
if(SENSOR_1<60){           //光を見失ったら,
start play_music ;          //再び演奏しながら旋回。
OnFwd(OUT_A);
OnRev(OUT_C);
}else{OnFwd(OUT_A+OUT_C);      //光を見つけたら、演奏をストップして、光に向かう。
stop play_music ;          
}}
}

製作に苦労した点


光を追いかけるところと、演奏との切り替えが難しかったが、タスクを分けてWhileのルーチンに組み込むことで解決した。 試作の時は上手く音が鳴らなかった。音の長さを調整する部分がいまいち分かりにくく、実際の曲のテンポに合わせるのが大変だった。微調整を繰り返して、なんとか完成に持って来れた。しかし、再び音が鳴り始めるまでに少し時間差があるのでより良く改善していきたい。 [#m974664e]

工夫した点


切り替えのところでplay_musicのタスクを作ると、While中の切り替えの記述が楽になった。defineであらかじめ音の周波数を定義していたので、演奏のプログラムがちょっとラクになった。演奏のプログラムがどうしても長くなってしまうので、何とか短くできないかと思ったが、一つ一つ音を指定して鳴らしている以上無理そうだ。


ー其の2ー 光源を認識しているときはある曲を演奏し、見失った時は別の曲を演奏しながら光源を探す 

制作者 SHU Kayo Fuji [#cccdb034]

試作プログラム

#define Do  262        //周波数を定義。
#define Re  294        //演奏のプログラムが楽にできる
#define Mi  330
#define Fa  349
#define Sol 392
#define Ra  440 

task play_music()
{
while(true) {
PlayTone(Do,15);Wait(20);  //カエルの歌を演奏♪
PlayTone(Re,15);Wait(20);
PlayTone(Mi,15);Wait(20);
PlayTone(Fa,15);Wait(20);
PlayTone(Mi,15);Wait(20);
PlayTone(Re,15);Wait(20);
PlayTone(Do,35);Wait(40);
PlayTone(Mi,15);Wait(20);
PlayTone(Fa,15);Wait(20);
PlayTone(Sol,15);Wait(20);
PlayTone(Ra,15);Wait(20);
PlayTone(Sol,15);Wait(20);
PlayTone(Fa,15);Wait(20);
PlayTone(Mi,35);Wait(40); 
PlayTone(Do,35);Wait(40);
PlayTone(Do,35);Wait(40);
PlayTone(Do,35);Wait(40);
PlayTone(Do,35);Wait(40);
PlayTone(Do,5);Wait(10);
PlayTone(Do,5);Wait(10);
PlayTone(Re,5);Wait(10);
PlayTone(Re,5);Wait(10);
PlayTone(Mi,5);Wait(10);
PlayTone(Mi,5);Wait(10);
PlayTone(Fa,5);Wait(10);
PlayTone(Fa,5);Wait(10); 
PlayTone(Mi,15);Wait(20);
PlayTone(Re,15);Wait(20);
PlayTone(Do,35);Wait(40);
Wait(40);
}
} 
  


task play_music2()
{
while(true)

PlayTone(Do,55);Wait(60);   //ヴィヴァルディ ”春”を演奏♪
PlayTone(Mi,55);Wait(60);
PlayTone(Mi,55);Wait(60);
PlayTone(Mi,55);Wait(60);
PlayTone(Re,25);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Sol,175);Wait(180);
PlayTone(Sol,25);Wait(30);
PlayTone(Fa,25);Wait(30);
PlayTone(Mi,55);Wait(60);
PlayTone(Mi,55);Wait(60);
PlayTone(Mi,55);Wait(60);
PlayTone(Re,25);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Sol,175);Wait(180);
PlayTone(Sol,25);Wait(30);
PlayTone(Fa,25);Wait(30);
PlayTone(Mi,55);Wait(60);
PlayTone(Fa,25);Wait(30); 
PlayTone(Sol,25);Wait(30);
PlayTone(Fa,55);Wait(60);
PlayTone(Mi,55);Wait(60);
PlayTone(Re,175);Wait(180);
}}



task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);   //センサー1は光センサーであると宣言
start play_music;           //カエルの歌を演奏しながら旋回する
OnFwd(OUT_A);  
OnRev(OUT_C);              
until(SENSOR_1>60);          //センサー1は光を認識したら・・・
while(true){
if(SENSOR_1>60){stop play_music ;
start play_music2;           //ヴィヴァルディ”春”を演奏しながら、
OnFwd(OUT_A+OUT_C);          //光に向かって走る
}
else{stop play_music2 ;                //光を見失ったら、
start play_music;           //再びカエルの歌を演奏しながら旋回 
OnFwd(OUT_A);
OnRev(OUT_C);
}}
}

完成プログラム

#define Do  262           //周波数の定義。
#define Re  294
#define Mi  330
#define Fa  349
#define Sol 392
#define Ra  440
task play_music()
{
while(true){
PlayTone(Do,15);Wait(20);      //カエルの歌を演奏♪
PlayTone(Re,15);Wait(20);
PlayTone(Mi,15);Wait(20);
PlayTone(Fa,15);Wait(20);
PlayTone(Mi,15);Wait(20);
PlayTone(Re,15);Wait(20);
PlayTone(Do,35);Wait(40);
PlayTone(Mi,15);Wait(20);
PlayTone(Fa,15);Wait(20);
PlayTone(Sol,15);Wait(20);
PlayTone(Ra,15);Wait(20);
PlayTone(Sol,15);Wait(20);
PlayTone(Fa,15);Wait(20);
PlayTone(Mi,35);Wait(40);
PlayTone(Do,35);Wait(40);
PlayTone(Do,35);Wait(40);
PlayTone(Do,35);Wait(40);
PlayTone(Do,35);Wait(40);
PlayTone(Do,5);Wait(10);
PlayTone(Do,5);Wait(10);
PlayTone(Re,5);Wait(10);
PlayTone(Re,5);Wait(10);
PlayTone(Mi,5);Wait(10);
PlayTone(Mi,5);Wait(10);
PlayTone(Fa,5);Wait(10);
PlayTone(Fa,5);Wait(10);
PlayTone(Mi,15);Wait(20);
PlayTone(Re,15);Wait(20);
PlayTone(Do,35);Wait(40);
Wait(40);
}}
task play_music2()
{
while(true){
PlayTone(Do,55);Wait(60);        //ヴィヴァルディ”春”を演奏♪
PlayTone(Mi,55);Wait(60);
PlayTone(Mi,55);Wait(60);
PlayTone(Mi,55);Wait(60);
PlayTone(Re,25);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Sol,175);Wait(180);
PlayTone(Sol,25);Wait(30);
PlayTone(Fa,25);Wait(30);
PlayTone(Mi,55);Wait(60);
PlayTone(Mi,55);Wait(60);
PlayTone(Mi,55);Wait(60);
PlayTone(Re,25);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Sol,175);Wait(180);
PlayTone(Sol,25);Wait(30);
PlayTone(Fa,25);Wait(30);
PlayTone(Mi,55);Wait(60);
PlayTone(Fa,25);Wait(30); 
PlayTone(Sol,25);Wait(30);
PlayTone(Fa,55);Wait(60);
PlayTone(Mi,55);Wait(60);
PlayTone(Re,175);Wait(180);
}}

task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
while(true){start play_music2;               //試作からの変更点。すべての動作をWhileのルーチンに組み込んだ。
OnFwd(OUT_A);
OnRev(OUT_C);
until(SENSOR_1>60);             //光を見つけたら、
stop play_music2 ;             //春を止めてカエルの歌を演奏。
start play_music;
OnFwd(OUT_A+OUT_C);            //光に向かって直進する
if(SENSOR_1<60){             //光を見失ったら、 
stop play_music ;            //春を演奏しながら旋回。
start play_music2;
OnFwd(OUT_A);
OnRev(OUT_C);
}else{
stop play_music2 ;           //光を見つけたら、カエルの歌を演奏しながら直進。
start play_music;
OnFwd(OUT_A+OUT_C);
}}
}

製作に苦労した点

サウンド作成:簡単な曲にしようと思い、カエルの歌と春を選んだが、予想以上に大変だった。テンポの調整も難しかった。二曲作らなければならなかったので二倍大変だった。テンポを合わせるのは微調整の繰り返しなので、ただひたすら面倒だった。

工夫した点

全く違うタイプの2曲を使うことで、ロボットがおかれた状況の違いをはっきりさせた。

プログラムはおおむね其の1と同じだったので、1でやったことを応用した。play_musicのタスクを二つ作ることで記述がすっきりした。

☆反省・感想☆

☆ HPを担当したので、HPの製作には大分慣れてきた。今回はあまりプログラムの方に関与しなかったので、次回からは積極的に取り組んでいきたいですね。  ( shu )

☆ 光を追うプログラムをかなり単純なプログラムにしたが、何とか光を追うことができてよかった。何度かグループで集まることができて今までで一番スムーズにできた。ロボコンもこの調子でいきたい。      (Fuji)

☆ サウンド作成に取り組んだ。音楽関係はそれなりにわかるので、得意分野を生かすことができてよかった。サウンド作りはなかなか大変だったが、その分、完成して、曲がロボットから流れた時の感動は大きかった。   (kayo)


添付ファイル: file200607281317000.jpg 222件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-08-17 (木) 00:10:24