[[光を追いかけるロボット]]

目次
#contents

光を見失ったときには演奏しながら旋回して光源を探すロボットを作成
*光を見失ったときには演奏しながら旋回して光源を探すロボット    [#yd54c69c]
#ref(2006a/B3/課題3右/hs.jpg,100%,ロボット)





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


 #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(成功) [#gc24937d]
プログラム 二つ目 (制作者 祭&メンチカツ) 成功
 

 #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);        //前進
 }
 }
 }


苦労した点&今後の課題
*苦労した点&今後の課題 [#t6859809]


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

コメントをどうぞ

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS