◇目次◇ #contents *課題3:光を追いかけるロボット [#z4541206] 懐中電灯の光を追いかけて進むロボットを製作し、以下の中から2種類以上のプログラムを作成せよ。 1. 光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探す 2. 光源を見失った時には明るさに比例した周波数の音を出しながら旋回して光源を探す 3. 光源を見失っていないときにはある曲を演奏し、見失った時には別の曲警を演奏しながら光源を探す 4. 上記のいずれかに『光源に近づき過ぎると停止する』という機能を追加する ただし支給されているモータ、光センサ、タッチセンサはいくつ使ってもよい。 (期限:7月6日)〜2006a/練習問題より抜粋〜 **[[NQC入門/6. サウンド機能を使う:http://yakushi.shinshu-u.ac.jp/robotics/?cmd=read&page=NQC%C6%FE%CC%E7%2F6.%20%A5%B5%A5%A6%A5%F3%A5%C9%B5%A1%C7%BD%A4%F2%BB%C8%A4%A6&word=NQC%C6%FE%CC%E7%2F6.%20%A5%B5%A5%A6%A5%F3%A5%C9%B5%A1%C7%BD%A4%F2%BB%C8%A4%A6]] [#e3ed6fb5] *完成までの過程 [#j6f3b5a8] 作成者:ヨコチン/トシ/J/マサ 作成日時:7/5, **光を追うロボット [#df561cd3] ***光を追うロボットを作ってみる [#hd848129] -いきなり課題に挑むのは難しいと思い、まずは光を単純に追うロボットの作成に挑む。 -その時のロボット -その時のプログラミング プログラミング作成者:ヨコチン/トシ/J/マサ #define go_straight OnFwd(OUT_A+OUT_C); //直進 #define turn_right OnFwd(OUT_A);OnRev(OUT_C); //右旋回 #define turn_left OnFwd(OUT_C);OnRev(OUT_A); //左旋回 #define minus 15 //マイナス int max; //maxを定義 int time; //timeを定義 task main() { SetSensor(SENSOR_2,SENSOR_LIGHT); //センサー2:光センサー max=SENSOR_2; //センサー2をmaxに指定 time=Timer(0); //timeをタイマー0に指定 ClearTimer(0); //タイマー0をリセット while(Timer(0)<=14) //タイマー0が14以下の時 { turn_right //右旋回 if(SENSOR_2>max) //センサー2が最大値以上なら { ClearTimer(1); //タイマー1をリセット max=SENSOR_2 ; //センサー2を最大値に指定 } else //そうでなければ { max=max; //maxをそのまま time=Timer(1); //timeをタイマー1に指定 } } ClearTimer(1); //タイマー1をリセット while(Timer(1)<=time) //timeがタイマー以下の時 {turn_left} //左旋回 while(true) { if(SENSOR_2>=max-minus) //センサー2が最大値−マイナス以上の時 {go_straight} //直進 if(SENSOR_2<max-minus) //センサー2が最大値−マイナス未満の時 { turn_right //右旋回 ClearTimer(2); //タイマー2をリセット until((SENSOR_2>=max-minus)||(Timer(2)==5)); //センサー2が最大値−マイナス以上、またはタイマー2が5まで } if(SENSOR_2<max-minus) //まだセンサー2が最大値−マイナス未満の時 { turn_left //左旋回 until(SENSOR_2>=max-minus); //センサー2が最大 値−マイナス以上まで } } } -キッドは簡単に作れたが、プログラミグが一気に難しくなり、困難を極めた。~ そのため過去の先輩たちのプログラミングを参考に挑戦したところうまくいったので、オリジナルにアレンジしていきたい。 --正直一から自分たちで作るのは無理があった、しかし少しずつ学んでいこうと思う。 **曲を演奏するロボット [#q58793f9] ***曲を演奏するロボットを作ってみる [#if02251b] -これもまた、いきなり課題に挑むのは難しいため、曲の作成に挑戦 -そのときのプログラム→使った曲♪ #define go_straight OnFwd(OUT_A+OUT_C); #define turn_left OnRev(OUT_A);OnFwd(OUT_C); #define Do 523 //「ド」 #define Re 587 //「レ」 #define Mi 659 //[ミ」 #define Fa 698 //「ファ」 #define Sol 784 //「ソ」 task play_music() { while(true) { PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Mi,30); Wait(40); //「ミ」 PlayTone(Re,15); Wait(20); //「レ」 PlayTone(Re,30); Wait(40); //「レ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,30); Wait(40); //「レ」 PlayTone(Do,15); Wait(20); //「ド」 PlayTone(Do,15); Wait(40); //「ド」 PlayTone(Re,25); Wait(30); //「レ」 PlayTone(Re,25); Wait(30); //「レ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Mi,15); Wait(20); //「ミ」 PlayTone(Fa,15); Wait(20); //「ファ」 PlayTone(Mi,15); Wait(20); //「ミ」 PlayTone(Do,15); Wait(20); //「ド」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Mi,15); Wait(20); //「ミ」 PlayTone(Fa,15); Wait(20); //「ファ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Do,30); Wait(30); //「ド」 PlayTone(Re,30); Wait(30); //「レ」 PlayTone(Sol,30); Wait(30); //「ソ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,30); Wait(40); //「レ」 PlayTone(Do,15); Wait(20); //「ド」 PlayTone(Do,15); Wait(20); //「ド」 **課題一つ目 [#q16969d7] 光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探す 曲・・喜びの歌 -プログラミング #define go_straight OnFwd(OUT_A+OUT_C); #define turn_left OnRev(OUT_A);OnFwd(OUT_C); #define Do 523 //「ド」 #define Re 587 //「レ」 #define Mi 659 //[ミ」 #define Fa 698 //「ファ」 #define Sol 784 //「ソ」 task play_music() { while(true) { PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Mi,30); Wait(40); //「ミ」 PlayTone(Re,15); Wait(20); //「レ」 PlayTone(Re,30); Wait(40); //「レ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,30); Wait(40); //「レ」 PlayTone(Do,15); Wait(20); //「ド」 PlayTone(Do,15); Wait(40); //「ド」 PlayTone(Re,25); Wait(30); //「レ」 PlayTone(Re,25); Wait(30); //「レ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Mi,15); Wait(20); //「ミ」 PlayTone(Fa,15); Wait(20); //「ファ」 PlayTone(Mi,15); Wait(20); //「ミ」 PlayTone(Do,15); Wait(20); //「ド」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Mi,15); Wait(20); //「ミ」 PlayTone(Fa,15); Wait(20); //「ファ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Do,30); Wait(30); //「ド」 PlayTone(Re,30); Wait(30); //「レ」 PlayTone(Sol,30); Wait(30); //「ソ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,30); Wait(40); //「レ」 PlayTone(Do,15); Wait(20); //「ド」 PlayTone(Do,15); Wait(20); //「ド」 Wait(40); } } task main () { SetSensor(SENSOR_2,SENSOR_LIGHT); //センサ−2を光センサーと定義 while(true) { start play_music; //音楽スタート while (SENSOR_2 <50) //光の強さが50未満のとき { turn_left; //左回転 } while (SENSOR_2 >50) //光の強さが50より大のとき { stop play_music; //音楽ストップ go_straight; //直進 } } } **課題二つ目 [#yfaa8901] 光源を見失っていないときにはある曲を演奏し、見失った時には別の曲を演奏しながら光源を探す 曲・・1、喜びの歌 2、ドレミの歌 -プログラミング #define go_straight OnFwd(OUT_A+OUT_C); #define turn_left OnRev(OUT_A);OnFwd(OUT_C); #define Do 523 //「ド」 #define Re 587 //「レ」 #define Mi 659 //「ミ」 #define Fa 698 //「ファ」 #define Sol 784 //「ソ」 task play_music1() //曲1 { while(true) { PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Mi,30); Wait(40); //「ミ」 PlayTone(Re,15); Wait(20); //「レ」 PlayTone(Re,30); Wait(40); //「レ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,30); Wait(40); //「レ」 PlayTone(Do,15); Wait(20); //「ド」 PlayTone(Do,15); Wait(40); //「ド」 PlayTone(Re,25); Wait(30); //「レ」 PlayTone(Re,25); Wait(30); //「レ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Mi,15); Wait(20); //「ミ」 PlayTone(Fa,15); Wait(20); //「ファ」 PlayTone(Mi,15); Wait(20); //「ミ」 PlayTone(Do,15); Wait(20); //「ド」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Mi,15); Wait(20); //「ミ」 PlayTone(Fa,15); Wait(20); //「ファ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Do,30); Wait(30); //「ド」 PlayTone(Re,30); Wait(30); //「レ」 PlayTone(Sol,30); Wait(30); //「ソ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Sol,20); Wait(30); //「ソ」 PlayTone(Fa,20); Wait(30); //「ファ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Do,20); Wait(30); //「ド」 PlayTone(Re,20); Wait(30); //「レ」 PlayTone(Mi,20); Wait(30); //「ミ」 PlayTone(Re,30); Wait(40); //「レ」 PlayTone(Do,15); Wait(20); //「ド」 PlayTone(Do,15); Wait(20); //「ド」 Wait(40); } } task play_music2() //曲2 { while(true) { PlayTone(Do,25); Wait(20); //「ド」 PlayTone(Re, 5); Wait(20); //「レ」 PlayTone(Mi,25); Wait(20); //「ミ」 PlayTone(Do, 5); Wait(20); //「ド」 PlayTone(Mi,25); Wait(20); //「ミ」 PlayTone(Do, 5); Wait(20); //「ド」 PlayTone(Mi,35); Wait(40); //「ミ」 PlayTone(Re,25); Wait(20); //「レ」 PlayTone(Mi,10); Wait(20); //「ミ」 PlayTone(Fa,10); Wait(20); //「ファ」 PlayTone(Fa,10); Wait(20); //「ファ」 PlayTone(Mi,10); Wait(20); //「ミ」 PlayTone(Re,15); Wait(20); //「レ」 PlayTone(Fa,35); Wait(40); //「ファ」 PlayTone(Mi,25); Wait(20); //「ミ」 PlayTone(Fa, 5); Wait(20); //「ファ」 PlayTone(Sol,25); Wait(20); //「ソ」 PlayTone(Mi, 5); Wait(20); //「ミ」 PlayTone(Sol,25); Wait(20); //「ソ」 PlayTone(Mi, 5); Wait(20); //「ミ」 PlayTone(Sol,25); Wait(40); //「ソ」 } } task main () { SetSensor(SENSOR_2,SENSOR_LIGHT); //センサー2を光センサーと定義 while(true) { stop play_music2; //音楽2ストップ start play_music1; //音楽1スタート while (SENSOR_2 <50) //光の強さが50未満のとき { turn_left; //左回転 } stop play_music1; //音楽1ストップ start play_music2; //音楽2スタート while (SENSOR_2 >50) //光の強さが50より大のとき { go_straight; //直進 } } } ***今回の課題に使用したキッド [#w9814006] **苦労した点 [#eef74b11] **工夫した点 [#tbf400b5] **完成後期 [#n442d13c] *掲示板 [#g307e0d4] コメントやアドバイスお願いします☆ #comment