- 追加された行はこの色です。
- 削除された行はこの色です。
[[2006a/A6]]
*課題3:光を追いかけるロボット
◇目次◇
#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,7/6
**光を追うロボット [#df561cd3]
***光を追うロボットを作ってみる [#hd848129]
-いきなり課題に挑むのは難しいと思い、まずは光を単純に追うロボットの作成に挑む。
-&size(20){COLOR(RED):使用したキッド };
&ref(2006a/A6/課題3右/DSC04224.JPG,19.0KB,曲鳴らすぜぃ♪);←→&ref(2006a/A6/課題3右/DSC04226.JPG,16.7KB,音楽ラララ♪);
--残念な事に時間があまりなく、プログラミングに時間を~
大きく割きたかったので、今回はキッドを簡単に作った。
-その時のプログラミング
プログラミング作成者:ヨコチン/トシ/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]
-これもまた、いきなり課題に挑むのは難しいため、曲の作成に挑戦
-そのときのプログラム→使った曲♪→&size(20){COLOR(RED):喜びの歌};
プログラミング作成者:ヨコチン/トシ/J/マサ
#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); //「ド」
-選曲について&プログラム
--みんなで一生懸命ネット上で曲を探したが、いいのが見つからず苦戦。~
なんだかんだで、一番よさそうな曲に決定!!('∇^d)
--曲のプログラムなんて初めてなものだから、相当苦戦…。~
曲のプログラムについてのページを見つつ、奮闘し、なんとか完成♪
**&size(30){COLOR(RED):課題一つ目};[#q16969d7]
光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探す。
曲→&size(20){COLOR(PURPLE):喜びの歌};
プログラミング作成者:ヨコチン/トシ/J/マサ
-プログラミング
#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; //直進
}
}
}
-実際やってみて。
--光センサーがなかなかライトを察知してくれないのでここが少し苦戦した。~
しかし、少し暗いところでやったところうまくいき、なんとか…(^^;;
**&size(30){COLOR(RED):課題二つ目};[#yfaa8901]
光源を見失っていないときにはある曲を演奏し、見失った時には別の曲を演奏しながら光源を探す。
曲→1→&size(20){COLOR(PURPLE):喜びの歌};、2→&size(20){COLOR(PURPLE):ドレミの歌};
プログラミング作成者:ヨコチン/トシ/J/マサ
-プログラミング
#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; //直進
}
}
}
-プログラム
--曲の切り替えとかが難しかったが、苦悩の末なんとかうまくいった。
***&size(30){COLOR(RED):今回の課題に使用したキッド};[#w9814006]
&ref(2006a/A6/課題3右/DSC04225.JPG,19.4KB,曲鳴らすよ♪);←→&ref(2006a/A6/課題3右/DSC04223.JPG,15.0KB,サウンドグッド!!);
-曲を試すときとほとんど同じキッドだけど、ちゃんと光は察知するし、~
音楽も鳴らします!!キッドは見た目によりません!!
*全体的な感想&反省 [#n451c1e9]
**苦労した点 [#eef74b11]
-曲のプログラミング
--ある音と音の感覚が難しかった、上記のタイミングだと良く聞こえる、~
同様に、ある音の長さも難しく、苦戦。~
まだまだプログラミングを組むことに関しては甘いようだ。
-光センサーの落ち度
--上記にも記したが、光センサーが光を読み取らない!!~
しかし、光センサーに実際落ち度はなく、~
教室の明かりが明るいため読み取らないと感じ、~
少しほの暗いところでやったところうまく察知してくれて解決。
--別の解決策としては光センサーが読み取る光の強さを~
プログラミングで調節すれば良いのかもしれないが、~
ここは勉強不足です、まだまだ学ぶことが多そうです。
-課題3に対するプログラム構成の問題
--前回、前々回とはまた違った形式の課題なので苦労した。~
まず、曲は何を使用するのかといったことや曲の著作権の問題と、~
プログラムを組み立てる以前の問題に苦難した。~
段々と出される課題のレベルが上がっているのも関連してか、~
ロボットの形態も考慮しなくてはならない。~
しかし、今回はそこまでキッド自体に時間を掛けることはなかった。
**工夫した点 [#tbf400b5]
-選曲
--個々人で色々試したが、今回は上記の曲に決定した。~
著作権問題とかで最近流行の曲などが使えず残念…。
-プログラム
--サブルーチンを使ったりするとやはりプログラムが組みやすかったし、~
見栄えもいい感じになるので、これからもうまくつかっていきたい。
-キッドの見た目(シンプルさが売り)
--具体的なコメントは各々の欄のコメントに譲るとして、~
ここではより全体的なことを述べたいと思う。~
工夫した点はなんですかと聞かれたら、なんと言っても、~
曲のクオリティであるとA6右メンバーは思う。~
と、他のグループにはない力の入れ方で作曲したことが今回の工夫点である。~
残念なことは今回特にロボットに工夫しなくても、~
シンプルな形態で課題をクリアーできてしまう点だ。~
だから、曲とプログラムの精度をいかに良くするかがカギであると思う。
**反省点 [#xf46eee5]
-メンバーのスケジュール管理
--ほんと、みんあサークルとかバイトとかで用事があって、予定が合わない!!~
だけどなんとか完成してよかった…。~
ただ、もっと時間があればプログラムや、キッドの質を上げられただろう。
-その反省をどう生かすか
--反省点として挙げるとすると、どこの班であっても同じ反省点であると思うのだが、~
一週間という限られた日程の中で、いかに完成までのスケジュール管理をするかが反省点であった。~
今回、その問題が露見した。~
今後、どの様に問題を解決するかがその後の課題や~
ロボコンの完成度に繋がると思うので、この反省を生かしたい。~
具体的には、皆が都合着くまで只何もしないのではなく、~
自分一人が今出来る役割をこなしたり、~
互いが互いの良いところを補完しあうということで制作速度を上げる等である。
**完成後期 [#n442d13c]
-ロボティクスの難易度
--いつもと同様一筋縄でいかないのがロボティクス。~
しかしそれがおもしろくもあるロボティクス。~
完成したときに味わう達成感もまたロボティクス。~
要するに、すっごい苦労しました…☆
-ついにロボコンへ
--もう課題はこれで終わり、次からはロボコンへの準備。~
聞くところによると障害物などがあるところで缶をころがすらしい。~
今の状態でそんな高度なキッド、プログラムを組めるのか心配である。~
しかし、めげずに%%優勝目指して%%頑張りたい!!
*掲示板 [#g307e0d4]
コメントやアドバイスお願いします☆
-ロボコンではこれまでの練習の成果を発揮できそうですね。 -- [[松本(教員)]] &new{2006-07-11 (火) 10:41:25};
#comment