[[2006a/A4]]~ 班員、土佐犬. NRLP. けいすけ.うーじ.~ #contents *演奏をしながら光を追うロボット [#k418e5c1] 愛称:名前はまだ無い 写真を撮りましょう。 **制作過程 [#fde0dfb4] こんな感じです +ロボの完成図を想像する。 +先輩方のプログラムを参考に、実現度合いを考える。 +とりあえず本体をプログラムが動く程度に組み立てる。 +音楽とロボの動きを担当別に作る。 +テストを繰り返し、完成! **迷ったらモルダウ.ver [#p88dffb4] 光を失ったら回りながらもるだうします 製作者:うーじ. けいすけ. NRLP. 製作日時:7月6日 #define pika 36 //反応するライトの強さ #define zen OnFwd(OUT_A+OUT_C); //前進 #define hidari OnFwd(OUT_C);OnRev(OUT_A); //左回り #define migi OnFwd(OUT_A);OnRev(OUT_C); //右回り //↓音階を定義 #define C 523 //ド #define Cis 554 //ド♯ #define D 587 //レ #define Dis 622 //レ♯ #define E 659 //ミ #define F 698 //ファ #define Fis 740 //ファ♯ #define G 784 //ソ #define Gis 831 //ソ♯ #define A 880 //ラ #define Ais 932 //ラ♯ #define H 988 //シ #define C8th 1047 //1オクターヴ上、ド #define C8thes 1109 //1オクターヴ上、ド♯ task morudau() //モルダウの楽譜 { while(true) { PlayTone(C,20); Wait(20); PlayTone(F,35); Wait(40); PlayTone(G,20); Wait(20); PlayTone(Gis,35); Wait(40); PlayTone(Ais,18); Wait(20); PlayTone(C8th,35); Wait(40); PlayTone(C8th,16); Wait(20); PlayTone(C8th,55); Wait(60); PlayTone(C8thes,55); Wait(60); PlayTone(C8thes,55); Wait(60); PlayTone(C8th,90); Wait(100); PlayTone(C8th,18); Wait(20); PlayTone(Ais,38); Wait(40); PlayTone(C8th,18); Wait(20); PlayTone(Ais,38); Wait(40); PlayTone(Ais,18); Wait(20); PlayTone(Gis,38); Wait(40); PlayTone(Ais,18); Wait(20); PlayTone(Gis,58); Wait(60); PlayTone(G,58); Wait(60); PlayTone(G,58); Wait(60); PlayTone(F,118); Wait(120); Wait(200); } } task main() //仕事始め { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ1を左ライトセンサとする SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ3を右ライトセンサとする while(true) { if(SENSOR_1<pika&&SENSOR_3>pika) //もし右センサのみ反応したら { stop morudau; //モルダウは演奏せず migi; //右へ回る Wait(11); } if(SENSOR_1>pika&&SENSOR_3<pika) //もし左センサのみ反応したら { stop morudau; //モルダウの演奏はせず hidari; //左へ回る Wait(11); } if(SENSOR_1<pika&&SENSOR_3<pika) //もしセンサ2個とも光を失ったら { while(SENSOR_1<pika||SENSOR_3<pika) //どちらかのセンサが光を失っている間 { start morudau; //モルダウを演奏し migi; //右へ回る Wait(11); until(SENSOR_1>pika||SENSOR_3>pika); //どちらかのセンサが光を得るまで } } if(SENSOR_1>pika&&SENSOR_3>pika) //もし両方のセンサに光が当たっているならば { stop morudau; //モルダウは演奏せず zen; //前進 } } } **走る際にはコロブチカ.ver [#u04451ef] 直進の時、ロシアンミュージックが流れます 製作者:土佐犬. けいすけ. NRLP. 製作日時:7月6日 #define pika 36 #define zen OnFwd(OUT_A+OUT_C); #define hidari OnFwd(OUT_C);OnRev(OUT_A); #define migi OnFwd(OUT_A);OnRev(OUT_C); #define C 523 #define Cis 554 #define D 587 #define Dis 622 #define E 659 #define F 698 #define Fis 740 #define G 784 #define Gis 831 #define A 880 #define Ais 932 #define H 988 #define C8th 1047 #define C8thes 1109 task morudau() { while(true) { PlayTone(C,20); Wait(20); PlayTone(F,35); Wait(40); PlayTone(G,20); Wait(20); PlayTone(Gis,35); Wait(40); PlayTone(Ais,18); Wait(20); PlayTone(C8th,35); Wait(40); PlayTone(C8th,16); Wait(20); PlayTone(C8th,55); Wait(60); PlayTone(C8thes,55); Wait(60); PlayTone(C8thes,55); Wait(60); PlayTone(C8th,90); Wait(100); PlayTone(C8th,18); Wait(20); PlayTone(Ais,38); Wait(40); PlayTone(C8th,18); Wait(20); PlayTone(Ais,38); Wait(40); PlayTone(Ais,18); Wait(20); PlayTone(Gis,38); Wait(40); PlayTone(Ais,18); Wait(20); PlayTone(Gis,58); Wait(60); PlayTone(G,58); Wait(60); PlayTone(G,58); Wait(60); PlayTone(F,118); Wait(120); Wait(200); } } ここまでは迷ったらモルダウ.verと同じ task korobu() //コロブチカの楽譜 { while(true) { PlayTone(A,35); Wait(40); PlayTone(E,15); Wait(20); PlayTone(F,15); Wait(20); PlayTone(G,35); Wait(40); PlayTone(A,2); Wait(2); PlayTone(G,3); Wait(3); PlayTone(F,12); Wait(15); PlayTone(E,15); Wait(20); PlayTone(D,35); Wait(40); PlayTone(D,15); Wait(20); PlayTone(F,15); Wait(20); PlayTone(A,35); Wait(40); PlayTone(H,2); Wait(2); PlayTone(A,3); Wait(3); PlayTone(G,12); Wait(15); PlayTone(F,15); Wait(20); PlayTone(E,35); Wait(40); PlayTone(E,15); Wait(20); PlayTone(F,15); Wait(20); PlayTone(G,35); Wait(40); PlayTone(A,35); Wait(35); PlayTone(F,35); Wait(40); PlayTone(D,35); Wait(40); PlayTone(D,75); Wait(80); Wait(80); } } task main() //仕事始め { SetSensor(SENSOR_1,SENSOR_LIGHT); ライトセンサを左右ともセット SetSensor(SENSOR_3,SENSOR_LIGHT); while(true) { if(SENSOR_1<pika&&SENSOR_3>pika) //右センンサ反応で { migi; //右へ回る Wait(11); } if(SENSOR_1>pika&&SENSOR_3<pika) //左センサ反応で { hidari; //左へ回る Wait(11); } if(SENSOR_1<pika&&SENSOR_3<pika) //もしセンサが両方とも光を見失ってしまったら { while(SENSOR_1<pika||SENSOR_3<pika) //センサのどちらかが光を見失っている限り { start morudau; //モルダウを演奏 stop korobu; //コロブチカの演奏を停止 migi; //右へ回る Wait(11); until(SENSOR_1>pika||SENSOR_3>pika); //どちらかのセンサが光を見つけるまで。 } } if(SENSOR_1>pika&&SENSOR_3>pika) //センサが両方とも光を感知している場合 { while(SENSOR_1>pika||SENSOR_3>pika) //センサのどちらかが光を感知している限り { stop morudau; //モルダウの演奏をやめ start korobu; //コロブチカを演奏し zen; //前進 until(SENSOR_1<pika||SENSOR_3<pika); //どちらかのセンサが光を見失うまでは。 } } } } *反省 [#p45111ff] 色々と **失敗した点 [#m78c3ec6] -車体見た目にこだわれていない。 -光に過敏に反応し過ぎて動きがカクカクである。 -プログラムが非常に長くなってしまった。 -2つめのプログラムでカーブがなぜかうまくいかない。なぜか… -急な光の動きにはついていけない。 -ドレミしか読めない人がいる。だからABCを読むのに苦労した。 **工夫した点 [#cd18b369] -シンプルイズザベスト。 -左右のセンサで光を左右に追いかけることができる。 -構造が簡単なので微調整が簡単。 -曲は載せていない分もいろいろ作った。 -短いコードでコンパクトに収まるようにセンサやモータの位置をコンパクトにした。 **次への課題 [#qff78c2a] -プログラムをもっとすっきり、マクロなどを使ってより簡略化させる。 -見た目を派手に改造する。 -より安全に、より慎重に行動できるようにモータの力を調節する。 -音階はドレミ表示が分かりやすい。 *感想 [#r693c263] 演奏がうまくいった時の感動が大きいと思った。~ 文字だらけ→ロボの行動 となる変化が分かりやすく、興味がより沸いた。~ 演奏テストをする際、音が大きすぎて恥ずかしかった。 *コメントをお願いします [#i1c7e9f6] #comment