[[2005/A1]]
*明るい方へ進むロボット [#o0ac13b1]
製作者 harada コンパス 今井
#ref(PA0_0055.JPG)
*最も明るい方へ進むプログラム [#q0a22057]
#define freq 10 //センサ測定頻度
#define kaiten 25 //一周に必要な測定回数
int hikari: int koutai;
sub sagasu() //光源の方向を探すサブルーチン
{
SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー1を光センサーと定義
int w; //変数w(測定頻度)を定義
w=freq; //測定頻度をwに代入
int bmax; //変数bmax(明るさの最大値)を定義
bmax=0; //bmaxを初期化
int cn; //変数cn(測定回数)を定義
int hikari; //変数hikari(光源がある測定回数)を定義
for (cn=1; cn<=kaiten; cn++) //cnを25まで増やす
{
OnFwd(OUT_A); OnRev(OUT_C); Wait(w);Off(OUT_A+OUT_C); //w/100秒間回転
if (bmax <= SENSOR_1 ) //前の場所より明るかったら↓
{
bmax = SENSOR_1; //明るさの最大値を更新
hikari=cn; //光源のあると思われる測定回数を記録
PlayTone(220,50); //明るさの最大値が更新された場合に『ド』を鳴らす
}
else{PlayTone(262,50); //明るさの最大値が更新されない場合に『ミ』を鳴らす
}
}
koutai=kaiten-hikari; //光源までの回転数を計算する
if(back <= kaiten/2 )
{
repeat(koutai) //光源の方向を向く
{
OnFwd(OUT_C); OnRev(OUT_A);
Wait(w);
Off(OUT_A+OUT_C);
Wait(60);
}
}
else
{
repeat(hikari)
{
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(w);
Off(OUT_A+OUT_C);
Wait(60);
}
}
}
sub zenshin(){OnFwd(OUT_A+OUT_C);Wait(200);Float(OUT_A+OUT_C);} //前進するサブルーチン
task main()
{
while(true)
{
sagasu();
zenshin();
}
}
*感想(解説) [#e18610b3]
プログラムには本当に苦労しましたiやwを使って回数を定義して、さらに回転するごとに少し止まり音を鳴らします。そうして、明るくなったら音質を変えてプログラムが機能しているかどうか調べました。光の最も明るい方向を調べたならば逆回転してその方向を向き、前進します。ロボットは動物をイメージしました。その写真を下に添付しておきます。
#comment