[[2006a/A1]] #contents *課題3:光を追いかけるロボット [#we03515a] 懐中電灯の光を追いかけて進むロボットを製作し、以下の中から2種類以上のプログラムを作成せよ。 +光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探す +光源を見失った時には明るさに比例した周波数の音を出しながら旋回して光源を探す +光源を見失っていないときにはある曲を演奏し、見失った時には別の曲警を演奏しながら光源を探す +上記のいずれかに『光源に近づき過ぎると停止する』という機能を追加する ただし支給されているモータ、光センサ、タッチセンサはいくつ使ってもよい。 *ロボット [#n95dfc0e] 誰か写真をアップしてください。+コメント **完成ロボット [#n4674919] 製作者(xxx) **特徴+工夫した点 [#l77c4535] **課題点 [#ya5e13de] *プログラム [#p42eee5d] **xxxバージョン [#tbf01de1] #define left(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C); #define front(j) OnFwd(OUT_A+OUT_C);Wait(j);Off(OUT_A+OUT_C); #define back(j) OnRev(OUT_A+OUT_C);Wait(j);Off(OUT_A+OUT_C); #define right(j) OnRev(OUT_C);OnFwd(OUT_A);Wait(j);Off(OUT_A+OUT_C); #define turntime 200 int lightmax=0; int timemax=0; task main() { while(true) { SetSensor(SENSOR_1,SENSOR_LIGHT); ClearTimer(0); OnRev(OUT_C);OnFwd(OUT_A); while(FastTimer(0) < turntime) { if(SENSOR_1 > lightmax) {lightmax=SENSOR_1; timemax=FastTimer(0);} } left(200 - timemax); front(100); } } **コメント [#v08bf2c0] **僕バージョン [#l6a7a070] 作成者/僕 作成日/7月12日 光源を見失っていないときにはある曲を演奏し、見失った時には別の曲警を演奏しながら光源を探す。+近づきすぎると停止する。 #define C 523 // ドの音 #define C# 554 // #define D 587 // レの音 #define D# 622 // #define E 659 // ミの音 #define F 698 // ファの音 #define F# 740 // #define G 784 // ソの音 #define G# 831 // #define A 440 // ラの音 #define A# 446 // #define B 494 // シの音 task play_music1() // 音楽を演奏するタスク // 曲名:チェリー { while(true) { PlayTone(E,50);Wait(40); PlayTone(D,25);Wait(15); PlayTone(C,25);Wait(15); PlayTone(C,75);Wait(65); PlayTone(C,25);Wait(15); PlayTone(G,50);Wait(40); PlayTone(A,50);Wait(40); PlayTone(G,33);Wait(23); PlayTone(F,33);Wait(23); PlayTone(G,33);Wait(23); PlayTone(E,50);Wait(40); PlayTone(D,25);Wait(15); PlayTone(C,25);Wait(15); PlayTone(C,75);Wait(65); PlayTone(E,25);Wait(15); PlayTone(G,50);Wait(40); PlayTone(F,33);Wait(23); PlayTone(E,33);Wait(23); PlayTone(F,33);Wait(23); PlayTone(E,50);Wait(40); PlayTone(E,50);Wait(40); PlayTone(D,25);Wait(15); PlayTone(C,25);Wait(15); PlayTone(C,75);Wait(65); PlayTone(C,25);Wait(15); PlayTone(G,50);Wait(40); PlayTone(A,50);Wait(40); PlayTone(G,33);Wait(23); PlayTone(F,33);Wait(23); PlayTone(G,33);Wait(23); PlayTone(E,50);Wait(40); PlayTone(D,25);Wait(15); PlayTone(C,25);Wait(15); PlayTone(C,75);Wait(65); PlayTone(E,25);Wait(15); PlayTone(G,50);Wait(40); PlayTone(F,33);Wait(23); PlayTone(E,33);Wait(23); PlayTone(D,33);Wait(23); PlayTone(C,100);Wait(90); Wait(50); } } #define C 523 #define D 587 #define E 659 #define F 698 #define G 784 #define A 440 #define B 494 task play_music2() // 音楽を演奏するタスク // 第六の幸運をもたらす宿 { while(true) { PlayTone(G,25);Wait(30); PlayTone(E,25);Wait(30); PlayTone(G,50);Wait(55); PlayTone(G,25);Wait(30); PlayTone(E,25);Wait(30); PlayTone(G,50);Wait(55); PlayTone(A,25);Wait(30); PlayTone(G,25);Wait(30); PlayTone(F,25);Wait(30); PlayTone(E,25);Wait(30); PlayTone(D,25);Wait(80); PlayTone(E,25);Wait(30); PlayTone(F,50);Wait(55); PlayTone(G,25);Wait(30); PlayTone(C,25);Wait(30); PlayTone(C,25);Wait(30); PlayTone(C,25);Wait(30); PlayTone(C,12);Wait(17); PlayTone(D,12);Wait(17); PlayTone(E,12);Wait(17); PlayTone(F,12);Wait(17); PlayTone(G,50);Wait(55); PlayTone(G,25);Wait(30); PlayTone(D,25);Wait(30); PlayTone(D,25);Wait(30); PlayTone(F,25);Wait(30); PlayTone(E,25);Wait(30); PlayTone(D,25);Wait(30); PlayTone(C,50);Wait(55); Wait(20); } } #define TURN_TIME 600 #define right(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t); #define left(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t); #define front OnFwd?(OUT_A+OUT_C); task main () { int light_max=0; int time_max=0; SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1=ライト SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー2=ライト light_max=SENSOR_1; //センサー1が最大 ClearTimer(0); //タイマーを0 OnFwd(OUT_A);OnRev(OUT_C); //光を探す左回転 while(time_max<TURN_TIME){ //タイマーは6秒以内 stop play_music1; start play_music2; //第六 if(SENSOR_1>light_max) //もし1が最大なら { light_max=SENSOR_1;//最大値を更新 time_max=FastTimer(0); } left(600-time_max); //一周から時間を差し引い front; } stop play_music1; start play_music2; //チェリー while(true) { if((SENSOR_1>=light_max)&&(SENSOR_3>=light_max)) { front; } if((SENSOR_1<=light_max)&&(SENSOR_3>=light_max)) { OnRev(OUT_A);OnFwd(OUT_C); until((SENSOR_1>=light_max)&&(SENSOR_3>=light_max)); } if((SENSOR_1>=light_max)&&(SENSOR_3<=light_max)) { OnFwd(OUT_A);OnRev(OUT_C); until((SENSOR_1>=light_max)&& (SENSOR_3>=light_max)); } if((SENSOR_1>=THRESHOLD)&&(SENSOR_3>=THRESHOLD)) { Off(OUT_A+OUT_C); } } } 光源を探して追いかけるまでがうまく出来なくて大変だった。あと、音楽がなって欲しい部分で鳴らすのに手間取った。工夫した点は、センサーを二つつけて、光の明るさの差を明確にした部分です。今回はプログラムがつらつらと長くなってしまい、すっきりとまとめることが出来なかった点が欠点でした。 [#u2b4bc99] *感想 [#i0075af7] *反省点 [#bc377d9c]