[[2006a/A1]]
#contents
*課題3:光を追いかけるロボット [#jc49d95c]
懐中電灯の光を追いかけて進むロボットを製作し、以下の中から2種類以上のプログラムを作成せよ。

+光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探す
+光源を見失った時には明るさに比例した周波数の音を出しながら旋回して光源を探す
+光源を見失っていないときにはある曲を演奏し、見失った時には別の曲警を演奏しながら光源を探す
+上記のいずれかに『光源に近づき過ぎると停止する』という機能を追加する

ただし支給されているモータ、光センサ、タッチセンサはいくつ使ってもよい。

*完成までの道のり [#a536cf7d]


1.	光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探す

4.	上記のいずれかに『光源に近づき過ぎると停止する』という機能を追加する

をすることに決定。

**プログラム [#ub9bf207]
***基礎プログラム [#ma546646]
・光を追うプログラム(製作者:シュート・アップル)
 #define front OnFwd(OUT_A+OUT_C);   
 #define right OnRev(OUT_C);OnFwd(OUT_A);   
 #define left OnRev(OUT_A);OnFwd(OUT_C);  
 #define minus 15                               
 
 int light_max;   
 int time_max;  
 
 task main()
 {
    SetSensor(SENSOR_1,SENSOR_LIGHT);   
    light_max=SENSOR_1;                      
    time_max=Timer(0);                      
    ClearTimer(0);                      
    while(Timer(0)<=14)                 
    {
        right;                     
        if(SENSOR_1>light_max)                
          {
           ClearTimer(1);              
           light_max =SENSOR_1 ;               
          }
        else                            
          {
           light_max = light_max;                     
           time_max =Timer(1);              
          }
   }
   ClearTimer(1);                       
   while(Timer(1)<= time_max)                
   {left;}                         
   while(true)
   {
        if(SENSOR_1>= light_max-minus)         
          {front;}                 
        if(SENSOR_1< light_max-minus)          
          {
           right;                   
           ClearTimer(2);               
        until((SENSOR_1>= light_max-minus)||(Timer(2)==5));  
          }
        if(SENSOR_1< light_max-minus)         
          {
           left;                   
           until(SENSOR_1>= light_max-minus);  
          }
   }
 }

***初期プログラム [#m279d2fb]
1.	光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探す

・Ver.メリーさんの羊(製作者:シュート・アップル)
 #define front OnFwd(OUT_A+OUT_C);   
 #define right OnRev(OUT_C);OnFwd(OUT_A);   
 #define TURN_TIME 360
 #define Do 1047            
 #define Re 1175            
 #define Mi 1319            
 #define Fa 1397            
 #define So 784             
 #define Ra 880             
 #define Si 988             
 task play_music()
 {
  while (true)
    {
        PlayTone(Mi,25); Wait(30);  
        PlayTone(Re, 5); Wait(10);  
        PlayTone(Do,15); Wait(20);  
        PlayTone(Re,15); Wait(20);
 
        PlayTone(Mi,15); Wait(20);
        PlayTone(Mi,15); Wait(20);
        PlayTone(Mi,35); Wait(40);
 
        PlayTone(Re,15); Wait(20);
        PlayTone(Re,15); Wait(20);
        PlayTone(Re,35); Wait(40);
 
        PlayTone(Mi,15); Wait(20);
        PlayTone(Sol,15); Wait(20);
        PlayTone(Sol,35); Wait(40);
 
        PlayTone(Mi,25); Wait(30);
        PlayTone(Re, 5); Wait(10);
        PlayTone(Do,15); Wait(20);
        PlayTone(Re,15); Wait(20);
 
        PlayTone(Mi,15); Wait(20);
        PlayTone(Mi,15); Wait(20);
        PlayTone(Mi,35); Wait(40);
 
        PlayTone(Re,15); Wait(20);
        PlayTone(Re,15); Wait(20);
        PlayTone(Mi,25); Wait(30);
        PlayTone(Re, 5); Wait(10);
 
        PlayTone(Do,55); Wait(60);
        Wait(20);
    }
 }
 int Light=0;
 int turn_time=360; 
 task main()
 {
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  ClearTimer(0); 
  while(Timer(0)<=turn_time)
     {
        if(SENSOR_1>Light)
          {
              Light=SENSOR_1;
          }
       right }     
          right
   start play_music;                   
   until(SENSOR_1>=Light);   
  while(true)
     {
        if(SENSOR_1<Light)    
          {
              right
              until(SENSOR_1>=Light);
          }
       else
          {
              front
              stop play_music;          
              until(SENSOR_1<Light);
          }  
      } 
 }
曲の紹介にあった『メリーさんの羊』を使用した。

4.	上記のいずれかに『光源に近づき過ぎると停止する』という機能を追加する(製作者:シュート・アップル)
 #define front OnFwd(OUT_A+OUT_C);   
 #define right OnRev(OUT_C);OnFwd(OUT_A);   
 #define TURN_TIME 360
 #define Do 1047            
 #define Re 1175            
 #define Mi 1319            
 #define Fa 1397            
 #define So 784             
 #define Ra 880             
 #define Si 988             
 task play_music()
 {
    while (true)
    {
        PlayTone(Mi,25); Wait(30);  
        PlayTone(Re, 5); Wait(10);  
        PlayTone(Do,15); Wait(20);  
        PlayTone(Re,15); Wait(20); 
 
        PlayTone(Mi,15); Wait(20);
        PlayTone(Mi,15); Wait(20);
        PlayTone(Mi,35); Wait(40);
 
        PlayTone(Re,15); Wait(20);
        PlayTone(Re,15); Wait(20);
        PlayTone(Re,35); Wait(40);
 
        PlayTone(Mi,15); Wait(20);
        PlayTone(So,15); Wait(20);
        PlayTone(So,35); Wait(40);
 
        PlayTone(Mi,25); Wait(30);
        PlayTone(Re, 5); Wait(10);
        PlayTone(Do,15); Wait(20);
        PlayTone(Re,15); Wait(20);
 
        PlayTone(Mi,15); Wait(20);
        PlayTone(Mi,15); Wait(20);
        PlayTone(Mi,35); Wait(40);

        PlayTone(Re,15); Wait(20);
        PlayTone(Re,15); Wait(20);
        PlayTone(Mi,25); Wait(30);
        PlayTone(Re, 5); Wait(10);
 
        PlayTone(Do,55); Wait(60);
        Wait(20);
    }
 }
 int Light=0;
 int turn_time=360; 
 task main()
 {
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  ClearTimer(0); 
  while(Timer(0)<=turn_time)
     {
        if(SENSOR_1>Light)
          {
              Light=SENSOR_1;
          }
       right }
          right
   start play_music;                   
   until(SENSOR_1>=Light);    
  while(true)
     {
        if(SENSOR_1<Light)    
          {
              right
              until(SENSOR_1>=Light);
          }
         if(SENSOR_1>=75) 
         {
             Off(OUT_A+OUT_C);
          }
       else
          {
              front
              stop play_music;          
              until(SENSOR_1<Light);
          }  
     }
 }
1番のプログラムに加えた。
**ロボット [#da54df19]
***初号機 [#fd9a5387]
機体の先端に光センサーをななめ上向きに取り付けたのみ。
*完成 [#y16abdcd]
プログラムもロボットも初期から変更せず。
*反省・感想 [#v0cb9106]
**プログラム [#fac98aba]
**ロボット [#q146bac5]
光センサーをつけただけの簡単なものだったのでよかったと思う。

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS