[[2006a/B7]] **今回のメンバー [#m3c997be] クーロン茶、tako(ru-)、おかじ * 光を追いかけるロボット [#q50edd42] **命名:希望の光を追っかける、明るい未来に夢見る演奏ロボット 『みゅーじっ君<Hope&Lightばーじょん>』byおかじ ゝ( ´ ∇`) √ [#z8109ced] #ref(2006a/B7/課題3左/060706_1706~01 2.jpg,100%,側面) 今回のプログラムは何かと回転したりしてよく動き回り、さらに正確に光を探すことが求められます。そこで土台に安定した動きをするキャタピラを採用しました!!!上の写真は製造過程の物です。今からいろいろといじくります。 #ref(2006a/B7/課題3左/SN340012.JPG,50%,正面) #ref(2006a/B7/課題3左/060707_1507~01.jpg,100%,後面) そして見事にいじくったロボットが上の写真です。前にセンサーがついていますが、実はうしろにもついてます!しっぽみたいなのがそうです。頭のプロペラ?は一応動く様にしましたが、プログラムに組み込むと容量がでかくなるので今回は組み込んでありません。ちなみに動かしたときにはタケ●コプターのごとく激しくうごきました。 #ref(2006a/B7/課題3左/SN340011.JPG,50%,正面) 課題編〜 光を探している時だけチャルメラの音楽を鳴らすプログラムです。 1、これがチャルメラの音楽ベースです。 #define Sol 784 //ソの音階 #define Ra 880 //ラの音階 #define Si 988 //シの音階 void play_music() //VOIDのプログラム(チャルメラ)です。 { PlayTone(Sol,20);Wait(25); //ソを演奏 PlayTone(Ra,20);Wait(25); //ラを演奏 PlayTone(Si,60);Wait(65); //シを演奏 PlayTone(Ra,20);Wait(25); //ラを演奏 PlayTone(Sol,15);Wait(30); //ソを演奏 PlayTone(Sol,15);Wait(20); //ソを演奏 PlayTone(Ra,15);Wait(20); //ラを演奏 PlayTone(Si,15);Wait(20); //シを演奏 PlayTone(Ra,15);Wait(20); //ラを演奏 PlayTone(Sol,15);Wait(20); //ソを演奏 PlayTone(Ra,60);Wait(65); //ラを演奏 } 2、そしてこれが完成形!課題1のプログラムです。 #define Sol 784 //ソの音階 #define Ra 880 //ラの音階 #define Si 988 //シの音階 void play_music() { PlayTone(Sol,20);Wait(25); //ソを演奏 PlayTone(Ra,20);Wait(25); //ラを演奏 PlayTone(Si,60);Wait(65); //シの音階 PlayTone(Ra,20);Wait(25); //ラを演奏 PlayTone(Sol,15);Wait(30); //ソを演奏 PlayTone(Sol,15);Wait(20); //ソを演奏 PlayTone(Ra,15);Wait(20); //ラを演奏 PlayTone(Si,15);Wait(20); //シの音階 PlayTone(Ra,15);Wait(20); //ラを演奏 PlayTone(Sol,15);Wait(20); //ソを演奏 PlayTone(Ra,60);Wait(65); //ラを演奏 } task main() //メインタスク { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1がライトセンサーであると宣言 while(true) //以下を無限ループ { if (SENSOR_1>=50){ //閾値が50以上の時 OnFwd(OUT_A+OUT_C); //前に進む }if (SENSOR_1<50){ //閾値が50未満の時 OnFwd(OUT_A); //モーターA前進 OnRev(OUT_C); //モーターC後退 {play_music();} //チャルメラ演奏 } } } 次は課題2、『光を探している時に音楽をならし、光を見つけたら別の音楽を鳴らしながら進むプログラム』です。製作tako,音楽おかじ #define Lre 400 #define Hsi 988 define GO OnFwd(OUT_A+OUT_C);Wait(300); #define TRUN OnFwd(OUT_A);OnRev(OUT_C);Wait(152); #define Do 523 #define Do2 554 #define Re 587 #define Re2 622 #define Mi 659 #define Fa 698 #define Fa2 740 #define So 784 #define So2 831 #define Ra 880 #define Ra2 932 #define Si 950 #define Do1 1047 #define Re1 1175 void play_music() //ベートーベン(運命)より最初の部分 { PlayTone(Do,20);Wait(50); PlayTone(Do,20);Wait(50); PlayTone(Do,20);Wait(50); PlayTone(Lre,60);Wait(100); PlayTone(Do,20);Wait(50); PlayTone(Do,20);Wait(50); PlayTone(Do,20);Wait(50); PlayTone(Lre,60);Wait(100); PlayTone(Do,20);Wait(50); PlayTone(Do,20);Wait(50); PlayTone(Do,20);Wait(50); PlayTone(Hsi,40);Wait(100); } void clasic_music() //小フーガト単調より第一楽章 { { PlayTone(So,55); Wait(60); PlayTone(Re1,55); Wait(60); PlayTone(Si,75); Wait(80); PlayTone(Ra,45); Wait(50); PlayTone(So,35); Wait(40); PlayTone(Si,35); Wait(40); PlayTone(Ra,35); Wait(40); PlayTone(So,35); Wait(40); PlayTone(Fa2,35); Wait(40); PlayTone(Ra,35); Wait(40); PlayTone(Re,55); Wait(60); PlayTone(So,40); Wait(45); PlayTone(Re,40); Wait(45); PlayTone(Ra,40); Wait(45); PlayTone(Re,40); Wait(45); PlayTone(Si,45); Wait(50); PlayTone(Ra,28); Wait(33); PlayTone(So,28); Wait(33); PlayTone(Ra,35); Wait(40); PlayTone(Re,52); Wait(57); PlayTone(So,50); Wait(55); PlayTone(Re,28); Wait(33); PlayTone(So,28); Wait(33); PlayTone(Ra,45); Wait(50); PlayTone(Re,28); Wait(33); PlayTone(Ra,28); Wait(33); PlayTone(Si,45); Wait(50); PlayTone(Ra,28); Wait(33); PlayTone(So,28); Wait(33); PlayTone(Ra,40); Wait(45); PlayTone(Re,28); Wait(33); PlayTone(Re1,28); Wait(33); PlayTone(Do1,28); Wait(33); PlayTone(Si,28); Wait(33); PlayTone(Ra,28); Wait(33); PlayTone(So,28); Wait(33); PlayTone(Si,28); Wait(33); PlayTone(Ra,28); Wait(33); PlayTone(So,28); Wait(33); PlayTone(Fa2,28); Wait(33); PlayTone(Ra,28); Wait(33); PlayTone(So,43); Wait(48); Wait(50); } } task main() //メインタスク { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1がライトセンサーであると宣言 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3がライトセンサーであると宣言 while(true) //以下無限ループ { if(SENSOR_1>=50){ //閾値が50以上の時 OnFwd(OUT_A+OUT_C); //前進 {clasic_music();} //小フーガト短調を演奏 } if (SENSOR_1<50){ //閾値が50未満の時 {play_music();} //ベートーベンを演奏 GO; //前に進む TRUN; //90度回転 GO; //前に進む TRUN; //90度回転 GO; //前に進む TRUN; //90度回転 GO; //前に進む TRUN; //90度回転 } } } **工夫した点 [#adc011e4] 1、足回り。タイヤだと回転するスピードが早く、光を追いかけにくくなるので、スピードが落ち着いていて、かつ小回りが効くキャタピラを使用した。 2、ロボットの車体は安定性を重視して、マニュアルどおりの車体を採用。 3、プログラムに関して、音楽とメインタスクとを混合する所が何度試してもうまくいかず音楽が流れなかった。そこで過去の先輩達のプログラムを見ていた所、一昨年のプログラムに、VOIDなるものを発見しました。これは使えると思いすぐに実践したところ、演奏に成功しました。先輩達に感謝しています。 4、 光を探す際に、ただ回るだけでは面白みがないので、正方形に探し、そのあとに回転しながら探す様にしました。 **苦労した点 [#l0107bfc] 1、小フーガの音階。一見簡単そうに見えますが、音階を合わせるのはかなり難しかった。これが1番苦労した。 2、プログラムにVOIDを使いました。これが一番スムーズに起動しました。 3、写真をみてもわかるように、前後にライトセンサーを装着しました。そうすることで死角をすくなくしました。 **反省点 [#if253234] 1、今回VOIDを使うことで音楽とサーチライトを複合することに成功しました。しかしほんとうならLIGHTMAXを使いたかったのですが、なぜかプログラムに組み込むと音楽が流れず、しかも光を感知せずグルグル回るだけになってしまいました。私達にもう少し技術があればもっと質のよいプラグラムが作れたと思います。我らなが 情けないです。m(==)m 2、小フーガに関してですが、本当なら光を探す音楽を第2楽章にしたかったのですが、容量が重いせいか光の感知が鈍くなり、うまく反応してくれなくなってしまいました。どうにかしてほかの容量をうまく削って第2楽章をいれたかったのですが、期限に間に合いませんでした。すいません。 3、ここまで作っといてなんですが、このプログラムでは光に反応するだけで光を追うことができません。それにvoidは関数なので行動と音楽を平行して行うことができませんでした。そこで.... このプログラムをベースに新たにプログラムを作成しました。今度は大丈夫です。 ***再課題 [#bc3bce3f] 1、課題1のプログラム(その1) 『製作者』tako #define Sol 784 #define Ra 880 #define Si 988 task play_music() //チャルメラのテーマ演奏プログラム { PlayTone(Sol,20);Wait(25); PlayTone(Ra,20);Wait(25); PlayTone(Si,60);Wait(65); PlayTone(Ra,20);Wait(25); PlayTone(Sol,15);Wait(30); PlayTone(Sol,15);Wait(20); PlayTone(Ra,15);Wait(20); PlayTone(Si,15);Wait(20); PlayTone(Ra,15);Wait(20); PlayTone(Sol,15);Wait(20); PlayTone(Ra,60);Wait(65); } task main() //メインタスク { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1がライトセンサーであると定義 while(true) //以下無限ループ { if (SENSOR_1>=50){ //光センサーが閾値50以上の時 OnFwd(OUT_A); //モーターA前進 Wait(50); //0,5秒起動 Off(OUT_A); //モーターA停止 OnFwd(OUT_C); //モーターC前進 Wait(50); //0,5秒起動 Off(OUT_C); //モーターC停止 }else{ //閾値が50未満の時 start play_music; //チャルメラのテーマ演奏 OnFwd(OUT_A); //モーターA前進 Wait(200); //2秒起動 Off(OUT_A); //モーターA停止 OnFwd(OUT_C); //モーターC前進 Wait(100); //1秒起動 Off(OUT_C); //モーターC停止 stop play_music; //チャルメラのテーマ演奏停止 } } } 課題1のプログラム(その2) 『制作者』 クーロン茶 #define Sol 784 #define Ra 880 #define Si 988 task play_music() { while(1) { PlayTone(Sol,20);Wait(25); PlayTone(Ra,20);Wait(25); PlayTone(Si,60);Wait(65); PlayTone(Ra,20);Wait(25); PlayTone(Sol,15);Wait(30);Wait(10); PlayTone(Sol,15);Wait(20); PlayTone(Ra,15);Wait(20); PlayTone(Si,15);Wait(20); PlayTone(Ra,15);Wait(20); PlayTone(Sol,15);Wait(20); PlayTone(Ra,60);Wait(65); Wait(10); } } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); while(1){ if (SENSOR_1>=50){ OnFwd(OUT_A+OUT_C); }if(SENSOR_1<50){ start play_music ; OnFwd(OUT_A); OnRev(OUT_C); until(SENSOR_1>=50); stop play_music ; } } } 2、課題2のプログラム 『制作者』クーロン茶 #define Lre 400 #define Hsi 988 #define Do 523 #define Do2 554 #define Re 587 #define Re2 622 #define Mi 659 #define Fa 698 #define Fa2 740 #define So 784 #define So2 831 #define Ra 880 #define Ra2 932 #define Si 950 #define Do1 1047 #define Re1 1175 #define Sol 784 task play_music() { while(1){ PlayTone(Sol,20);Wait(25); PlayTone(Ra,20);Wait(25); PlayTone(Si,60);Wait(65); PlayTone(Ra,20);Wait(25); PlayTone(Sol,15);Wait(30);Wait(10); PlayTone(Sol,15);Wait(20); PlayTone(Ra,15);Wait(20); PlayTone(Si,15);Wait(20); PlayTone(Ra,15);Wait(20); PlayTone(Sol,15);Wait(20); PlayTone(Ra,60);Wait(65); Wait(10); } } task clasic_music() { while(1){ PlayTone(So,55); Wait(60); PlayTone(Re1,55); Wait(60); PlayTone(Si,75); Wait(80); PlayTone(Ra,45); Wait(50); PlayTone(So,35); Wait(40); PlayTone(Si,35); Wait(40); PlayTone(Ra,35); Wait(40); PlayTone(So,35); Wait(40); PlayTone(Fa2,35); Wait(40); PlayTone(Ra,35); Wait(40); PlayTone(Re,55); Wait(60); PlayTone(So,40); Wait(45); PlayTone(Re,40); Wait(45); PlayTone(Ra,40); Wait(45); PlayTone(Re,40); Wait(45); PlayTone(Si,45); Wait(50); PlayTone(Ra,28); Wait(33); PlayTone(So,28); Wait(33); PlayTone(Ra,35); Wait(40); PlayTone(Re,52); Wait(57); PlayTone(So,50); Wait(55); PlayTone(Re,28); Wait(33); PlayTone(So,28); Wait(33); PlayTone(Ra,45); Wait(50); PlayTone(Re,28); Wait(33); PlayTone(Ra,28); Wait(33); PlayTone(Si,45); Wait(50); PlayTone(Ra,28); Wait(33); PlayTone(So,28); Wait(33); PlayTone(Ra,40); Wait(45); PlayTone(Re,28); Wait(33); PlayTone(Re1,28); Wait(33); PlayTone(Do1,28); Wait(33); PlayTone(Si,28); Wait(33); PlayTone(Ra,28); Wait(33); PlayTone(So,28); Wait(33); PlayTone(Si,28); Wait(33); PlayTone(Ra,28); Wait(33); PlayTone(So,28); Wait(33); PlayTone(Fa2,28); Wait(33); PlayTone(Ra,28); Wait(33); PlayTone(So,43); Wait(48); Wait(50); } } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); while(true){ if(SENSOR_1>=50){ start play_music; OnFwd(OUT_A+OUT_C); until(SENSOR_1<50); stop play_music ; } if (SENSOR_1<50){ start clasic_music; OnFwd(OUT_A); OnRev(OUT_C); until(SENSOR_1>=50); stop clasic_music ; } } } #ref(2006a/B7/課題3左/KC320004.jpg,50%,正面) *ロボットもシンプルに製作し直しました。