- 追加された行はこの色です。
- 削除された行はこの色です。
[[2005/C4]]
* 光を追いかけて進むロボット [#h061ee37]
** ロボットの概要 [#u6f35273]
~ このロボットを作ったときは、懐中電灯がなかったので
~ 太陽の光に向かうロボットとなりました。。。
~ 光センサーは、値の上下が激しいのと、あと周囲の明るさを平均的に得るために、光センサーの前に青い半透明のパーツをつけました。
~ 光センサーの値の変動が激しいのと、あと周囲の明るさを平均的に得るために、光センサーの前に青い半透明のパーツをつけました。
** ロボットの写真 [#p7f525a4]
&ref();
** プログラムの解説 [#v846ce5b]
- 右と左についている光センサーの値の差が少ない場合は、取りあえず直進するようになっています。
- それよりも差があり、かつそれよりもちょっとだけ差が大きい場合は、明るい方のセンサーがついている側のモーターをfloatしています。
- それよりも差がある場合は、floatでなくoffしています。
- プログラム中に解説のためのコメントは入れません。コメントが付くと入れると、かえってゴチャゴチャしてきそうなので。
- プログラム中に解説のためのコメントは入れません。コメントが入っていると、かえってゴチャゴチャしそうなので。
** プログラム [#ffa73496]
#define LIGHT_L SENSOR_1
#define LIGHT_R SENSOR_3
#define L OUT_A
#define R OUT_C
task main(){
SetSensor(LIGHT_L,SENSOR_LIGHT);
SetSensor(LIGHT_R,SENSOR_LIGHT);
Off(L+R);
while(1){
if(LIGHT_L-LIGHT_R>2 || LIGHT_R-LIGHT_L>2){
if(LIGHT_L>LIGHT_R){
if(LIGHT_L-LIGHT_R>4){
Off(L);
OnFwd(R);
}else{
Float(L);
OnFwd(R);
}
}else{
if(LIGHT_R-LIGHT_L>4){
Off(R);
OnFwd(L);
}else{
Float(R);
OnFwd(L);
}
}
}else{
OnFwd(L+R);
}
Wait(10);
}
}
** コメント欄 [#tdf3dfd9]
コメントを書き込んでください。
#comment