懐中電灯などの光源を用意する。まず明るさに比例した周波数の音を出しながら全方角の中から光源のある方角を探し、探した後は、光源の光を追いかけて進むロボットを作成せよ。
今回はモーターを3つ使って2つはタイヤを動かすためのモーター、もう1つはセンサーだけを回転させるように作りました。本体全体で光を探すために回転すると時間がかかってしまう。しかし、光センサーだけが回転すると時間を大幅に削減することができます。また、センサーを回転させるのには輪ゴムにより動力を伝達させました。ギアだと組み合わせるのが大変であり、また輪ゴムの方がスムーズに動けるんではないかと思ったので、ギアはやめました。光源を見つけたらロボットは光源に向かって直進し、光を見失ったらまたセンサーだけ回転して光を探しまします。
#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(FastTimer(0)<TURN_TIME) //もし光源を見つけたら { 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をリセット ClearTimer(3); //タイマ−3をリセット OnFwd(OUT_B); //モーターを回転し光源捜索 if(fastTimer(3)==150); //1.5秒過ぎたら { Onrev(OUT_B);Wait(150); //センサーを戻して Off(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); //光源に向かって直進 } } }
プログラムが複雑で作るのが大変だったけどなんとかできてよかった。次はいよいよロボコンに向けたロボット、プログラム作りなのでがんばっていきたいです。
プログラムやホームページに関するコメントお願いします。