[[2006b/MemberOnly/進行状況A]] *課題 光を追いかけるロボット [#n3ce83cd] **ロボットについて [#jc8bd063] 今回の課題では、光センサーの部分をどのように装着するべきか、光をどのように探知するかに重点をおくべきでした。~ 前回の課題2からのロボのベースステーションを用いて、光センサーを装着するようにしました。 ***変更点 [#xca7f7c7] 制作をしている中での、変更点は光センサーを2個から1個にしたことです。 **プログラム [#k777191f] int Light=85; int turn_time=300; int light_max=0; int time_max; task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); ClearTimer(0); while(FastTimer(0)<turn_time){ OnFwd(OUT_A); OnRev(OUT_C); PlayTone(SENSOR_1*10,3); if(SENSOR_1>light_max){ light_max=SENSOR_1; time_max=FastTimer(0); } } while(Timer(0)<=turn_time) { if(SENSOR_1>Light) { Light=SENSOR_1; } OnFwd(OUT_A); OnRev(OUT_C); } OnFwd(OUT_A); OnRev(OUT_C); until(SENSOR_1>=Light); while(true) { if(SENSOR_1<Light) { OnFwd(OUT_A); OnRev(OUT_C); } else if (SENSOR_1>= Light){ OnFwd(OUT_A+OUT_C); } } } ***反省点 [#x858d103] 最終的に光センサーは2個の方でも良かったという反省が出た。 ***苦労した点 [#jd663231] コンパイルしてもなかなかできなくて苦労した(笑)~ ***改良型プログラム [#vb3ff2b3] #define turn_right OnFwd(OUT_A);OnRev(OUT_C); #define turn_left OnFwd(OUT_C);OnRev(OUT_A); #define go_straight OnFwd(OUT_A+OUT_C) #define light 50 task main(){ int max_right,time_max; SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1を光センサーと定義 SetSensor(SENSOR_3,SENSOR_LIGHT);//センサ−3を光センサーと定義 while(true){ if(SENSOR_1>light&&SENSOR_3<light){ //左側のセンサーが反応 turn_left; Wait(10); } if(SENSOR_1<light&&SENSOR_3>light){ //右側のセンサーが反応 turn_right; Wait(10); } if(SENSOR_1<light&&SENSOR_3<light){ //両方反応しない while(SENSOR_1<light||SENSOR_3<light){//両方反応するまで turn_left //左回転 Wait(10); until(SENSOR_1>light||SENSOR_3>light); } } if(SENSOR_1>light&&SENSOR_3>light){ //両方反応 go_straight; //直進 } } } ***反省点 [#tf6abfb1] やはりいままでのもそうだったができるだけシンプルなものにしてみた。これでも光センサーを2個使っているので、前のやつよりかは精度がかなり増した。 コメントをお願いします。 -上記のプログラムでは、光源がある程度遠くにある場合(SENSOR_1が常に85以下の場合)にはうまく動作しないのでは? それぞれの方角の明るさを比べて、より明るい方向へ向かうようなプログラムにしてみましょう(光源をどちらに動かしても対応できるように)。 -- [[松本(教員)]] &new{2007-01-17 (水) 16:13:32}; #comment