課題3 #contents *課題内容 [#ob7e69df] 懐中電灯の光を追いかけて進むロボットを製作し、以下の中から2種類以上のプログラムを作成せよ。 光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探す 光源を見失った時には明るさに比例した周波数の音を出しながら旋回して光源を探す 光源を見失っていないときにはある曲を演奏し、見失った時には別の曲を演奏しながら光源を探す 上記のいずれかに『光源に近づき過ぎると停止する』という機能を追加する ただし支給されているモータ、光センサ、タッチセンサはいくつ使ってもよい。 全てメソ、アナクスナムゥンによる製作 *ロボットの説明 [#s3321e54] 写真はないけど、ロボットの前方に光センサーを一つ装備。 本体は最初に作った本に書いてあったものがベースになっている。 *曲のプログラム1(マリオのテーマ) [#ad58949e] #define minus 15 #define Do 523 #define Re 587 #define Mi 659 #define Fa 698 #define So 784 #define La 880 #define Si 988 #define So_ 392 PlayTone(Mi,25); Wait(35); PlayTone(Mi,25); Wait(50); PlayTone(Mi,25); Wait(50); PlayTone(Do,25); Wait(30); PlayTone(Mi,40); Wait(45); PlayTone(So,50); Wait(100); PlayTone(So_,50); Wait(100); *曲のプログラム2(チューリップ) [#a7f4f4fd] #define minus 15 #define Do 523 #define Re 587 #define Mi 659 #define Fa 698 #define So 784 #define La 880 #define Si 988 #define So_ 392 PlayTone(Do,25); Wait(30); PlayTone(Re,25); Wait(50); PlayTone(Mi,25); Wait(50); PlayTone(Do,25); Wait(30); PlayTone(Re,25); Wait(50); PlayTone(Mi,25); Wait(50); PlayTone(So,50); Wait(100); PlayTone(Mi,25); Wait(50); PlayTone(Re,25); Wait(50); PlayTone(Do,25); Wait(30); PlayTone(Re,25); Wait(50); PlayTone(Mi,25); Wait(50); PlayTone(Re,25); Wait(50); PlayTone(Do,25); Wait(30); PlayTone(Re,25); Wait(50); PlayTone(Mi,25); Wait(50); PlayTone(Do,25); Wait(30); PlayTone(Re,25); Wait(50); PlayTone(Mi,25); Wait(50); PlayTone(So,50); Wait(100); PlayTone(Mi,25); Wait(50); PlayTone(Re,25); Wait(50); PlayTone(Do,25); Wait(30); PlayTone(Re,25); Wait(50); PlayTone(Mi,25); Wait(50); PlayTone(Do,25); Wait(30); *プログラム1 ( 光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探す)[#ud194d51] #define top OnFwd(OUT_A+OUT_C); //top =直進 #define right OnRev(OUT_C);OnFwd(OUT_A); //right =右旋回 #define left OnRev(OUT_A);OnFwd(OUT_C); //left =左旋回 #define minus 15 #define Do 523 #define Re 587 #define Mi 659 #define Fa 698 #define So 784 #define La 880 #define Si 988 #define So_ 392 int light_max; //light_maxを定義 int time_max; //time_maxを定義 task main() { SetSensor(SENSOR_2,SENSOR_LIGHT); //センサー2を光センサーとする light_max=SENSOR_2; //センサ−2をlight_maxに指定 time_max=Timer(0); //time_maxをTimer(0)に指定 ClearTimer(0); //Timer(0)をリセット while(Timer(0)<=14) //Timer(0)が14以下のとき { right; //右旋回 if(SENSOR_2>light_max) センサ−2が最大値より大きければ { ClearTimer(1); //Timer(1)をリセット light_max =SENSOR_2 ; //センサ−2を最大値に指定 } else //そうじゃなければ { light_max = light_max; //light_maxをそのままで time_max =Timer(1); //time_maxをTimer(1)に指定 } } ClearTimer(1); //Timer(1)をリセット while(Timer(1)<= time_max) //Timer(1)がtime_max以下の時 { left; //左旋回 } while(true) { if(SENSOR_2>= light_max-minus) //センサー2が最大値以上のとき { top; //演奏しながら直進 PlayTone(Mi,25); Wait(35); PlayTone(Mi,25); Wait(50); PlayTone(Mi,25); Wait(50); PlayTone(Do,25); Wait(30); PlayTone(Mi,40); Wait(45); PlayTone(So,50); Wait(100); PlayTone(So_,50); Wait(100); } if(SENSOR_2< light_max-minus) //センサ−2が最大値より小さいとき { right; //右旋回 ClearTimer(2); //Timer(2)をリセット until((SENSOR_2>= light_max-minus)||(Timer(2)==5)); //センサ−2が最大値以上、またはTimer(2)が5まで } if(SENSOR_2< light_max-minus) //センサ−2が最大値-マイナスより小さいとき { left; //左旋回 until(SENSOR_2>= light_max-minus); //センサ−2が最大値-マイナスまで } } } *プログラム2(光源を見失っていないときにはある曲を演奏し、見失った時には別の曲を演奏しながら光源を探す )[#w39cc7fb] #define light_min 50 //最低光を40 #define light_max 90 //最高光を80 task main(){ SetSensor(SENSOR_2,SENSOR_LIGHT); //光センサーをセンサー2とする while(true) { Off(OUT_A+OUT_C); //センサーが反応しないとき停止 stop play_music1; //マリオ stop play_music2; //チューリップ if(SENSOR_2<light_min) //センサー2が最低光値を下回るとき { start play_music1; //マリオ演奏 stop play_music2; //チューリップはまだ OnFwd(OUT_A); //右に旋回 OnRev(OUT_C); until(SENSOR_2>light_min); //センサー2が最低光値を上回るまで } if((SENSOR_2<light_max)&&(SENSOR_2>light_min)) //センサー2が最低光値を上回り最高光値を下回るとき { stop play_music1; //マリオ止まる start play_music2;//チューリップ演奏 OnFwd(OUT_A+OUT_C); //前進 until((SENSOR_2>light_max)||(SENSOR_2<light_min));//センサー2が最低光値を下回る、 } //または最高値を上回るまで } } *工夫したところ [#q864e74a] マリオの音をリズミカルにするのを頑張った!!やはり光を追いかけるのが難しく 時間を費やしたけれど、時間をかけてプログラムを作った。←工夫じゃねぇ(笑) *苦労したところ [#u561818c] 課題3に関しては、どのようにすれば思った通りに動くのか全く見当がつかなく、先輩のプログラムとかを見て考え理解する事に一番時間を費やした。 *反省点 [#j2ca8008] センサー2個でやろうとして、結局できなくて1個でやってしまった。 実際めっちゃむずくてうまくいかなかったのでしっかり説明を聞けば良かった。 しかし、最終的には理解できたので、この課題の内容もふまえて、ロボコンに挑みたいと思う。 -授業中にも説明しましたが、プログラムを張り付ける前に、製作したのはどのようなロボットなのか、それをまず説明してください。 -- [[松本(教員)]] &new{2006-08-18 (金) 11:06:24}; -プログラム中のコメント文について。例えば『light_maxを定義』というのはプログラムを見ればすぐにわかることなので、それよりも light_max というのはどんな変数なのか、という説明をコメント文としてちゃんと書いておきましょう。 -- [[松本(教員)]] &new{2006-08-18 (金) 11:08:26}; #comment