[[2005/C2/どみ]] *光を追いかけるロボット [#p27993c0] int l = 0; //明るさ(初期値0) int t; task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //左光センサ SetSensor(SENSOR_3,SENSOR_LIGHT); //右光センサ ClearTimer(0); //1周の時間を計る ClearTimer(1); //明るい場所からの時間 OnFwd(OUT_A); //懐中電灯探し OnRev(OUT_C); while (FastTimer(0) < 800) { if (SENSOR_1 > l) { //センサの値が最大値を超えたとき l = SENSOR_1; //最大値を上書き ClearTimer(1); //タイマーをリセット } } Off(OUT_A+OUT_C); t = FastTimer(1); //明るさが最大になった点までの回転時間を設定 OnFwd(OUT_C); OnRev(OUT_A); Wait(t); Off(OUT_A+OUT_C); //ここまでで光の方向を向く while(true) { OnFwd(OUT_A+OUT_C); //前進 Wait(10); if (SENSOR_1 > SENSOR_3) { //左センサの方が明るいとき Off(OUT_A); //左折 } else { //右センサの方が明るいとき Off(OUT_C); //右折 } Wait(30); } } *ロボットについて [#oa92ff30] キャタピラのロボットに光センサを2つつけたもの。センサは前から見てハの字になるようにセットしてある。 *プログラムについて [#q9e687dc] 最初に1回転して懐中電灯の明かりを探す。ここではタイマーを利用して、しっかり懐中電灯の方向を向くようにした。懐中電灯を探し出したら、前進しながら左右のセンサの値を比較し、明るい方向へと曲がる。しかし、懐中電灯が突然後ろに行ったりすると対応できなくなるのが弱点。 *コメントをお願いします [#h6d5a86c] -まあ『懐中電灯が突然後ろに行ったりする』のは無しにしましょう。もちろん、どちらのセンサもある一定の明るさより暗くなった場合には、少しずつ探すのをやめて、ぐるっと一周するモードに切り替わるようにプログラムを改良することはそれほど難しくはないと思いますが… -- [[松本(教員)]] &new{2006-01-07 (土) 00:03:11}; #comment