光を追いかけるロボット?

目次

光を見失ったときには演奏しながら旋回して光源を探すロボット

ロボット

プログラム1(失敗)

 プログラム 一つ目 (制作者 祭)  一回しか光探しをしない。失敗  

#define stop_turning Off(OUT_A+OUT_C);
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);
#define turn_time 425

task main ()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
if(SENSOR_1<50){          //明るさが50より小さいとき
int light_max=0,time_max=0;
turn_right;            //右に旋回
ClearTimer(0);          //タイマーをリセット
while(FastTimer(0)<turn_time){  
if(SENSOR_1>light_max){       //センサーが今までで一番明るい光を感知したとき    
light_max=SENSOR_1;
time_max=FastTimer(0);
}
}
stop_turning;Wait(100);
turn_left;             //左に旋回
Wait(turn_time-time_max);     //一周にかかる時間から一番明るいところからの時間を引く
  OnFwd(OUT_A+OUT_C);  //前進
}
}

   失敗の解決

無限ループを使う。     

 改良点

はじめから光源を向いていた時にはそのまま進むようにする

  曲の決定

 パッヘルベルのカノンを使うことにしたけどきっちりした楽譜がなかったので少し変に聞こえる。  

プログラム2(成功)

プログラム 二つ目 (制作者 祭&メンチカツ) 成功

#define stop_turning Off(OUT_A+OUT_C);
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);
#define turn_time 425
#define  A  440
#define  B  466
#define  C  523
#define  D  587
#define  E  659
#define  F  698
#define  G  784
#define  A1  880
#define  B1  988
#define  C1  1047
#define  D1  1175
task play_music()
{
 while(true)       パッヘルベルのカノン 演奏
 {
   PlayTone(G,50);Wait(55);
   PlayTone(E,25);Wait(30);
   PlayTone(F,25);Wait(30);
   PlayTone(G,50);Wait(55);
   PlayTone(E,25);Wait(30);
   PlayTone(F,25);Wait(30);
   PlayTone(G,20);Wait(25);
   PlayTone(B,25);Wait(30);
   PlayTone(A,25);Wait(30);
   PlayTone(B,25);Wait(30);
   PlayTone(C,25);Wait(30);
   PlayTone(D,25);Wait(30);
   PlayTone(E,25);Wait(30);
   PlayTone(F,25);Wait(30);
   PlayTone(E,50);Wait(55);
   PlayTone(C,25);Wait(30);
   PlayTone(D,25);Wait(30);
   PlayTone(E,50);Wait(55);
   PlayTone(C,25);Wait(30);
   PlayTone(D,25);Wait(30);
   PlayTone(E,25);Wait(30);
   PlayTone(F,25);Wait(30);
   PlayTone(E,25);Wait(30);
   PlayTone(D,25);Wait(30);
   PlayTone(E,25);Wait(30);
   PlayTone(C1,25);Wait(30);
   PlayTone(B1,25);Wait(30);
   PlayTone(C1,25);Wait(30);
   PlayTone(A1,50);Wait(55);
   PlayTone(C1,25);Wait(30);
   PlayTone(B1,25);Wait(30);
   PlayTone(A1,50);Wait(55);
   PlayTone(G,25);Wait(30);
   PlayTone(F,25);Wait(30);
   PlayTone(G,25);Wait(30);
   PlayTone(F,25);Wait(30);
   PlayTone(E,25);Wait(30);
   PlayTone(F,25);Wait(30);
   PlayTone(G,25);Wait(30);
   PlayTone(A1,25);Wait(30);
   PlayTone(B1,25);Wait(30);
   PlayTone(C1,25);Wait(30);
   PlayTone(A1,50);Wait(55);
   PlayTone(C1,25);Wait(30);
   PlayTone(B1,25);Wait(30);
   PlayTone(C1,50);Wait(55);
   PlayTone(B1,25);Wait(30);
   PlayTone(C1,25);Wait(30);
   PlayTone(B1,25);Wait(30);
   PlayTone(A1,25);Wait(30);
   PlayTone(B1,25);Wait(30);
   PlayTone(C1,25);Wait(30);
   PlayTone(D1,25);Wait(30);
   PlayTone(C1,25);Wait(30);
   PlayTone(A1,25);Wait(30);
   PlayTone(B1,25);Wait(30);
   PlayTone(C1,200);Wait(205);
   }
   }
   
 
task main ()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
while(true){
if(SENSOR_1<60){       //明るさが60より小さいとき
start play_music ;      //音楽をならす
int light_max=0,time_max=0;   
turn_right;          //右に旋回
ClearTimer(0);         //タイマーをリセット
while(FastTimer(0)<turn_time){
if(SENSOR_1>light_max){
light_max=SENSOR_1;
time_max=FastTimer(0);
}
}
stop_turning;Wait(100);
turn_left;
Wait(turn_time-time_max);
 stop play_music ;         //音楽を止める
 OnFwd(OUT_A+OUT_C);
}else{               //はじめから光源を向いていたとき
stop play_music ;         //音楽をならさない 
OnFwd(OUT_A+OUT_C);        //前進
}
}
}

苦労した点&今後の課題

無限ループを使うときwhileを使うのはわかったけどどこまでをくくるのかということ。はじめから光源を向いていたときどうするかで悩んだ。一応ifを使い明るさが60以上だと光源を向いていることにしたけど複数の光源があるときや60以下の光源のときの対策をしていないのでそれをなんとかする。

コメントをどうぞ



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-14 (金) 16:23:10 (4790d)