2006b/MemberOnly/進行状況A

課題3:光を追いかけるロボット

リンクのページ

光を追いかけるロボット

robotic (21).JPG robotic (22).JPG

  • 完全したロボット、二つの光センサーを使っている、簡単でできたロボットだ。もっと可愛いに見えるように二つの目が前につけた。

robotic (23)#.JPG robotic (24).JPG

  • ロボットの後ろから支えて左右に光センサーを斜めにつけた。センサーをちょっと斜めにした理由は、ロボットが床に走るとき光源の光は上から下に斜めにして、光センサーをもっと容易に光源に当たて追いかけるためだ。

光を追いかけるロボットのプログラム

#define TURN_TIME 700                    //回転時間は700をする

#define G2 392                       //タスク1の音階の周波数を定義する
#define C 523                                  
#define D 587                                  
#define E 659                                  
#define F 698                                  
#define G 784

#define Do 523                           //タスク2の音階の周波数を定義する
#define Do_s 554
#define Re 587
#define Re_s 622
#define Mi 659
#define Fa 698
#define Fa_s 740
#define Sol 784
#define Sol_s 831
#define La 880
#define La_s 932
#define Si 988
#define Do_up 1047
#define Re_up 1175
                                  
task play_music1()                       //喜びの歌の音楽を演奏するプログラム(タクス ミューズ1)                             
{
   while (true){
       PlayTone(E,30); Wait(35);
       PlayTone(E,30); Wait(35);
       PlayTone(F,30); Wait(35);
       PlayTone(G,30); Wait(35);
       PlayTone(G,30); Wait(35);
       PlayTone(F,30); Wait(35);
       PlayTone(E,30); Wait(35);
       PlayTone(D,30); Wait(35);
       PlayTone(C,30); Wait(35);
       PlayTone(C,30); Wait(35);
       PlayTone(D,30); Wait(35);
       PlayTone(E,30); Wait(35);
       PlayTone(E,60); Wait(65);
       PlayTone(D,15); Wait(20);
       PlayTone(D,30); Wait(35);
       Wait(30);
       
       PlayTone(E,30); Wait(35);
       PlayTone(E,30); Wait(35);
       PlayTone(F,30); Wait(35);
       PlayTone(G,30); Wait(35);
       PlayTone(G,30); Wait(35);
       PlayTone(F,30); Wait(35);
       PlayTone(E,30); Wait(35);
       PlayTone(D,30); Wait(35);
       PlayTone(C,30); Wait(35);
       PlayTone(C,30); Wait(35);
       PlayTone(D,30); Wait(35);
       PlayTone(E,30); Wait(35);
       PlayTone(D,60); Wait(65);
       PlayTone(C,15); Wait(20);
       PlayTone(C,60); Wait(65);
       Wait(30);
       
       PlayTone(D,30); Wait(35);            
       PlayTone(D,30); Wait(35);             
       PlayTone(E,30); Wait(35);             
       PlayTone(C,30); Wait(35);             
       PlayTone(D,30); Wait(35);             
       PlayTone(E,15); Wait(20);             
       PlayTone(F,15); Wait(20);             
       PlayTone(E,30); Wait(35);             
       PlayTone(C,30); Wait(35);             
       PlayTone(D,30); Wait(35);             
       PlayTone(E,15); Wait(20);             
       PlayTone(F,15); Wait(20);             
       PlayTone(E,30); Wait(35);             
       PlayTone(D,30); Wait(35);             
       PlayTone(C,30); Wait(35);            
       PlayTone(D,30); Wait(35);             
       PlayTone(G2,50); Wait(55);            
       Wait(30);                             
       
       PlayTone(E,30); Wait(35);
       PlayTone(E,30); Wait(35);
       PlayTone(F,30); Wait(35);
       PlayTone(G,30); Wait(35);
       PlayTone(G,30); Wait(35);
       PlayTone(F,30); Wait(35);
       PlayTone(E,30); Wait(35);
       PlayTone(D,30); Wait(35);
       PlayTone(C,30); Wait(35);
       PlayTone(C,30); Wait(35);
       PlayTone(D,30); Wait(35);
       PlayTone(E,30); Wait(35);
       PlayTone(D,60); Wait(65);
       PlayTone(C,15); Wait(20);
       PlayTone(C,60); Wait(65);
       Wait(60);
       }
}

task play_music2()                           //大塚愛の「さくらんぼ」の音楽を演奏するプログラム(タクス ミューズ2)
{
 while (true)
 {      PlayTone(La,15);Wait(20);
	PlayTone(Si,15);Wait(20);
	PlayTone(La,15);Wait(20);
	PlayTone(Sol,15);Wait(20);
	PlayTone(Sol,50);Wait(60);
	PlayTone(Si,25);Wait(30);
	
	PlayTone(Re_up,25);Wait(30);
	PlayTone(Fa_s,15);Wait(20);
	PlayTone(Fa_s,50);Wait(55);
	PlayTone(Sol,50);Wait(55);
	PlayTone(Sol,15);Wait(20);
	
	PlayTone(Fa_s,15);Wait(20);
	PlayTone(Sol,15);Wait(20);
	PlayTone(Si,25);Wait(30);
	PlayTone(Re,15);Wait(20);
	PlayTone(Re,50);Wait(55);
	PlayTone(Mi,25);Wait(30);
	
	PlayTone(Sol,25);Wait(30);
	PlayTone(Fa_s,15);Wait(20);
	PlayTone(Sol,15);Wait(20);
	PlayTone(La,15);Wait(20);
	PlayTone(Re,15);Wait(20);
	PlayTone(Si,25);Wait(30);
	
	PlayTone(Fa_s,15);Wait(20);
	PlayTone(Sol,25);Wait(30);
	PlayTone(Re,15);Wait(20);
	PlayTone(Do,25);Wait(30);
	PlayTone(Re,25);Wait(30);
	PlayTone(Mi,25);Wait(30);
	
	PlayTone(Sol,15);Wait(20);
	PlayTone(Sol,15);Wait(20);
	PlayTone(Fa_s,15);Wait(20);
	PlayTone(Sol,15);Wait(20);
	PlayTone(La,15);Wait(20);
	PlayTone(La,15);Wait(20);
	
	PlayTone(La,15);Wait(20);
	PlayTone(Si,15);Wait(20);
	PlayTone(La,15);Wait(20);
	PlayTone(Sol,15);Wait(20);
	PlayTone(Sol,50);Wait(55);
	PlayTone(Si,15);Wait(20); 
	
	PlayTone(Re_up,25);Wait(30);
	PlayTone(Fa_s,15);Wait(20);
	PlayTone(Fa_s,50);Wait(55);
	PlayTone(Sol,50);Wait(55);
	PlayTone(Sol,15);Wait(20);
	
	PlayTone(Fa_s,15);Wait(20);
	PlayTone(Sol,15);Wait(20);
	PlayTone(Si,25);Wait(30);
	PlayTone(Re,15);Wait(20);
	PlayTone(Re,50);Wait(55);
	PlayTone(Mi,25);Wait(30);
	
	PlayTone(Sol,25);Wait(30);
	PlayTone(Fa_s,15);Wait(20);
	PlayTone(Sol,15);Wait(20);
	PlayTone(La,15);Wait(20);
	PlayTone(Re,15);Wait(20);
	PlayTone(Si,25);Wait(30);
	
	PlayTone(Do_up,25);Wait(30);
	PlayTone(Si,25);Wait(30);
	PlayTone(La,25);Wait(30);
	PlayTone(Mi,25);Wait(30);
	PlayTone(Sol,15);Wait(20);
	PlayTone(Sol,15);Wait(20);
	
	PlayTone(Fa_s,15);Wait(20);
	PlayTone(Sol,15);Wait(20);
	PlayTone(La,15);Wait(20);
	PlayTone(Fa_s,15);Wait(20);
	PlayTone(Sol,25);Wait(30);
	Wait(50);
	}
}
task main()
{SetSensor(SENSOR_1,SENSOR_LIGHT);               //センサー1を光センサーに設定
 SetSensor(SENSOR_3,SENSOR_LIGHT);               //センサー3を光センサーに設定
 int light_max,time_max;                         //light_maxとtime_maxを定義する
 ClearTimer(0);                                  //タイマー0をリセット
 start play_music1;                              //喜びの歌の音楽を流す
 while(FastTimer(0)<TURN_TIME)                   //旋回中の行動を設定
 {OnFwd(OUT_A);OnRev(OUT_C);                     //右旋回
  if(SENSOR_1>light_max);                        //light_maxの値より光センサーの値が高いときの行動を設定
  {light_max=SENSOR_1;                           //現在の光センサーの値をlight_maxに設定
   ClearTimer(1);}                               // タイマー1をリセット                                 
   }
  time_max=FastTimer(1);                         //旋回時間をtime_maxに設定
  OnFwd(OUT_C);OnRev(OUT_A);                     //左旋回
  Wait(time_max);
  
 stop play_music1;                               //喜びの歌の音楽を停止
 start play_music2;                              // 「さくらんぼ」の音楽を流す                          
 while(true)
 {OnFwd(OUT_A+OUT_C);                            //前進
  if(SENSOR_1>SENSOR_3)                          //光センサー1の値が光センサー3の値より大きいときの行動を設定
  {Off(OUT_A);OnFwd(OUT_C);                      //旋回して光を探す
   Wait(10);}
  if(SENSOR_3>SENSOR_1)                          //光センサー3の値が光センサー1の値より大きいときの行動を設定
  {Off(OUT_C);OnFwd(OUT_A);                      //旋回して光を探す
   Wait(10);}
  }
}

工夫した点

robotic (26).JPG=========>robotic (25).JPG

  • 最初の光センサーは二つをあわせて後ろの真ん中から斜めに組み付いたが、ロボットは光を追いかけてスムースに走れない。最後に、二つの光センサーわ少し幅を開いて立てた、左右へ曲がれるになった、光を追いかけてスムースになった。
  • 曲を作るのは大変だった、またNQCで作ったプログラムをコピーして課題3の中に乗り付けることができないので、も一度全部課題3で編集に長いプログラムを打ち。曲は何回も直して作った曲だ。すごく大変だった。

robotic6.JPG<======>robotic7.JPG

  • 先生のコメントにより、2つの光センサーの間に一つの壁を付けた。左右の光が左右の光センサーに当たりやすくなり、曲がるときはもっとスムースに、早くなる。左右の光がはっきり分別して、光源追いかける。

コメント

  • 2つの光センサの間に壁を設ければ左右のセンサの距離が近くても値の違いが大きくなると思います。一度試してください。 -- 松本(教員)? 2007-01-09 (火) 13:52:52
  • 光センサーを斜め上に向けたのはいいアイデアですね。 -- まいける(TA) 2007-01-26 (金) 13:32:12


添付ファイル: filerobotic7.JPG 222件 [詳細] filerobotic6.JPG 219件 [詳細] filerobotic5.JPG 109件 [詳細] file070112_1333~01.jpg 95件 [詳細] filerobotic (23)#.JPG 243件 [詳細] filerobotic (21).JPG 236件 [詳細] filerobotic (22).JPG 207件 [詳細] filerobotic (24).JPG 226件 [詳細] filerobotic (25).JPG 239件 [詳細] filerobotic (26).JPG 251件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-01-26 (金) 13:32:12