- 追加された行はこの色です。
- 削除された行はこの色です。
[[2006a/A4]]~
#contents
*演奏をしながら光を追うロボット [#k418e5c1]
写真を撮られる前に解体される運命に…
基本的にはセンサが2個飛び出ている感じでした。
製作者:土佐犬. NRLP. けいすけ.うーじ.
愛称:名前はまだ無い
**制作過程 [#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