[[2006b/A3]] *課題3 [#r1e59d97] 懐中電灯などの光源を用意する。まず明るさに比例した周波数の音を出しながら全方角の中から光源のある方角を探し、探した後は、光源の光を追いかけて進むロボットを作成せよ。 *ロボット作成について [#jdfac5b9] 今回はモーターを3つ使って2つはタイヤを動かすためのモーター、もう1つはセンサーだけを回転させるように作りました。これにより機体全体を動かすよりも時間が短縮でき、すぐ次の動作に移ることができるようにしました。 *苦労した点&工夫した点 [#y98c646d] +センサーを回転させる時にコードが絡まってしまいコードが絡まないように歯車で動かす方法からゴムにより回転させる方法に変えた。さらに回転した後に逆回転することでコードを絡ませないですむ。 +メロディーを作るときにうまく音程が合わず何度も数値をかえて大変だった。しかし、しっかり聞き取れるくらいまでにできてよかった。 +センサーの回転時間と本機の回転時間とでは回転角度が違ってくるのでそれぞれのモーターでの回転数をほぼ同じにした。 *プログラム [#ca62de6e] #define Do 523 音程を定義 #define Re 587 #define Me 659 task play_music1() { while(true) チャルメラ演奏 { PlayTone(Do,15); Wait(20); PlayTone(Re,15); Wait(20); PlayTone(Me,30); Wait(40); PlayTone(Re,15); Wait(20); PlayTone(Do,15);Wait(25); PlayTone(Do,13);Wait(18); PlayTone(Re,13);Wait(18); PlayTone(Me,13);Wait(18); PlayTone(Re,13);Wait(18); PlayTone(Do,13);Wait(18); PlayTone(Re,30);Wait(40); Wait(20); } } #define d_ 440 音程を定義 #define re_ 494 #define me_ 523 #define fa_ 587 #define so_ 659 #define ra_ 698 #define si_ 784 #define dd 880 #define ree 988 task play_music2() { while(true) スターウォーズ演奏 { PlayTone(d_,20);Wait(25); PlayTone(so_,20);Wait(25); PlayTone(fa_,10);Wait(15); PlayTone(me_,10);Wait(15); PlayTone(re_,10);Wait(15); PlayTone(dd,20);Wait(25); PlayTone(so_,20);Wait(25); PlayTone(fa_,10);Wait(20); PlayTone(me_,10);Wait(20); PlayTone(re_,10);Wait(20); PlayTone(dd,20);Wait(25); PlayTone(so_,20);Wait(25); PlayTone(fa_,10);Wait(15); PlayTone(mi_,10);Wait(15); PlayTone(fa_,10);Wait(15); PlayTone(ree,25);Wait(30); Wait(20); } } ここまでは音楽のプログラム。↑ 次は機械を動かすためのプログラム。↓ #define TURN_TIME 150 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); int time_max; 時間を変数と定義 ClearTimer(0); タイマー0をリセット while(FastTimer(0)< TURN_TIME) タイマーが回っている間 { start play_music1; 音楽1スタート OnFwd(OUT_B); センサーがついてるモーター回転 if(SENSOR_1>50) もし光源を見つけたら { ClearTimer(1); タイマー1をリセット } } OnRev(OUT_B);Wait(150); モーターを逆回転 Off(OUT_B); センサーを止める OnFwd(OUT_A);OnRev(OUT_C); タイヤを光源に向かせる Wait(FastTimer(1)); OnFwd(OUT_C); 光源に向かって前進 stop play_music1; 音楽1ストップ while(true) { start play_music2; 音楽2スタート if(SENSOR_1<50) もしセンサーが光源を見失ったら { Off(OUT_A+OUT_C); 前進ストップ ClearTimer(2); タイマ−2をリセット OnFwd(OUT_B); モーターを回転し光源捜索 until(SENSOR_1>=50); 見つかるまで回転 OnRev(OUT_B);Wait(FastTimer(2)); 見つかったら Off(OUT_B); モーター逆回転して止まる OnFwd(OUT_A);OnRev(OUT_C);Wait(FastTimer(2)); 光源に向く OnFwd(OUT_C); } else 他は { OnFwd(OUT_A+OUT_C); 光源に向かって直進 } } } *感想 [#q20453a1] プログラムが複雑で作るのが大変だったけどなんとかできてよかった。次はいよいよロボコンに向けたロボット、プログラム作りなのでがんばっていきたいです。 プログラムやホームページに関するコメントお願いします。 -センサを回転する機構の写真があればぜひ掲載してください。 -- [[松本(教員)]] &new{2007-01-09 (火) 13:57:08}; -プログラムのコメントをきちんとつけてください。 -- [[まいける(TA)]] &new{2007-01-12 (金) 07:33:15}; -[[前回の授業で撮った写真をアップ:http://yakushi.shinshu-u.ac.jp/robotics-photo/2006b/]]しましたので、是非使ってください。 -- [[松本(教員)]] &new{2007-01-17 (水) 16:21:52}; #comment