- 追加された行はこの色です。
- 削除された行はこの色です。
[[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 300 時間を定義
#define TURN_TIME 150
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
int light_max; 光の値を変数と定義
int time_max; 時間を変数と定義
ClearTimer(0); タイマーをリセット
while(FastTimer(0)< TURN_TIME) 3秒間の間
int time_max;
ClearTimer(0);
while(FastTimer(0)< TURN_TIME)
{
start play_music1; 音楽1スタート
OnFwd(OUT_B); センサーがついたモーター回転
if(SENSOR_1> light_max)
start play_music1;
OnFwd(OUT_B);
if(SENSOR_1>50)
{
ClearTimer(1); タイマー1をカウント開始
light_max=SENSOR_1; 回転したうちで一番
} 強い値をセンサーに代入
ClearTimer(1);
}
}
OnFwd(OUT_A);OnRev(OUT_C); 右回転
Wait(ClearTimer(1));
stop play_music1; 音楽1止める
OnRev(OUT_B);Wait(150);
Off(OUT_B);
OnFwd(OUT_A);OnRev(OUT_C);
Wait(FastTimer(1));
OnFwd(OUT_C);
stop play_music1;
while(true)
{
start play_music2; 音楽2開始
if(SENSOR_1<light_max) もし光をセンサーが探知 { できなかったら
OnFwd(OUT_B);Wait(300); モーターを光を探知する
until(SENSOR_1>=light_max); まで回転
start play_music2;
if(SENSOR_1<50)
{
Off(OUT_A+OUT_C);
ClearTimer(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 他の場合は
else
{
OnFwd(OUT_A+OUT_C); 進む
OnFwd(OUT_A+OUT_C);
}
}
}
*感想 [#q20453a1]
プログラムが複雑で作るのが大変だったけどなんとかできてよかった。次はいよいよロボコンに向けたロボット、プログラム作りなのでがんばっていきたいです。
プログラムやホームページに関するコメントお願いします。
-センサを回転する機構の写真があればぜひ掲載してください。 -- [[松本(教員)]] &new{2007-01-09 (火) 13:57:08};
#comment