【メニュー】

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

課題の内容

懐中電灯の光を追いかけて進むロボットを製作し、以下1〜4の中から2種類以上のプログラムを作成せよ。

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

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

(期限:7月6日)

ロボット完成までの課程

与えられた課題をクリアするために…

両方一時に完成する事は難しいので、一つ一つのプログラムから作成していく事にした。

  1. 光を追いかけるロボットの作成
  2. 曲を演奏するロボットの作成(課題の1と4)

1.光を追いかけるロボットの作成

ロボットの特徴

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

作成者:イケス・カツヤ・ウメ・カトゥ
日時:7月6日(木)
#define go_straight OnFwd(OUT_A+OUT_C);       //直進
#define turn_right OnFwd(OUT_A);OnRev(OUT_C); //右旋回
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);  //左旋回
#define minus 15                              //マイナス

int max;   //maxを定義
int time;  //timeを定義
task main()
{
   SetSensor(SENSOR_2,SENSOR_LIGHT);   //センサー2:光センサー
   max=SENSOR_2;                       //センサー2をmaxに指定
   time=Timer(0);                      //timeをタイマー0に指定
   ClearTimer(0);                      //タイマー0をリセット
   while(Timer(0)<=14)                 //タイマー0が14以下の時
   {
       turn_right                      //右旋回
       if(SENSOR_2>max)                //センサー2が最大値以上なら
         {
          ClearTimer(1);               //タイマー1をリセット
          max=SENSOR_2 ;               //センサー2を最大値に指定
         }
       else                            //そうでなければ
         {
          max=max;                     //maxをそのまま
          time=Timer(1);               //timeをタイマー1に指定
         }
  }
  ClearTimer(1);                       //タイマー1をリセット
  while(Timer(1)<=time)                //timeがタイマー以下の時
  {turn_left}                          //左旋回
  while(true)
  {
       if(SENSOR_2>=max-minus)         //センサー2が最大値?マイナス以上の時
         {go_straight}                 //直進
       if(SENSOR_2<max-minus)          //センサー2が最大値?マイナス未満の時
         {
          turn_right                   //右旋回
          ClearTimer(2);               //タイマー2をリセット
          until((SENSOR_2>=max-minus)||(Timer(2)==5));  //センサー2が最大値?マイナス以上、またはタイマー2が5まで
         }
       if(SENSOR_2<max-minus)          //まだセンサー2が最大値?マイナス未満の時
         {
          turn_left                    //左旋回
          until(SENSOR_2>=max-minus);  //センサー2が最大値?マイナス以上まで
         }
   }
}

2.曲を演奏するロボットの作成

演奏曲

『プログラム』

作成者:イケス・カトゥ
#define Mi  330
#define Fa  349
#define So  392
#define Ra  440
#define Si  494
#define Do  523
#define Re  587
#define mi  659


task play_music()  
{
   while (true)
   {
   PlayTone(Ra,30); Wait(35);
   PlayTone(Si,30); Wait(35);
   PlayTone(Si,30); Wait(35);
   PlayTone(Do,120); Wait(150);
   PlayTone(Do,30); Wait(35);
   PlayTone(Re,30); Wait(35);
   PlayTone(Do,30); Wait(35);
   PlayTone(Do,30); Wait(35);
   PlayTone(Si,120); Wait(150);
   PlayTone(Si,30); Wait(35);
   PlayTone(Do,30); Wait(35);
   PlayTone(Si,30); Wait(35);
   PlayTone(Si,30); Wait(35);
   PlayTone(Ra,120); Wait(150);
   PlayTone(Ra,30); Wait(35);
   PlayTone(Do,30); Wait(35);
   PlayTone(Ra,30); Wait(35);
   PlayTone(Si,30); Wait(35);
   PlayTone(Do,90); Wait(120);
   
   PlayTone(Ra,30); Wait(35);
   PlayTone(Si,30); Wait(35);
   PlayTone(Si,30); Wait(35);
   PlayTone(Do,120); Wait(150);
   PlayTone(Do,30); Wait(35);
   PlayTone(Re,30); Wait(35);
   PlayTone(Do,30); Wait(35);
   PlayTone(Do,30); Wait(35);
   PlayTone(Si,120); Wait(150);
   PlayTone(Si,30); Wait(35);
   PlayTone(Do,30); Wait(35);
   PlayTone(Si,30); Wait(35);
   PlayTone(Si,30); Wait(35);
   PlayTone(Ra,120); Wait(150);
   PlayTone(Mi,30); Wait(35);
   PlayTone(Fa,30); Wait(35);
   PlayTone(Mi,30); Wait(35);
   PlayTone(Mi,30); Wait(35);
   PlayTone(Ra,90); Wait(120);
  
   PlayTone(Ra,30); Wait(35);
   PlayTone(Do,30); Wait(35);
   PlayTone(mi,60); Wait(70);
   PlayTone(Do,30); Wait(35);
   PlayTone(Ra,30); Wait(35);
   PlayTone(Fa,60); Wait(70);
   PlayTone(Ra,60); Wait(65);
   PlayTone(Si,60); Wait(65);
   PlayTone(Do,30); Wait(35);
   PlayTone(Ra,90); Wait(120);
   PlayTone(Si,60); Wait(65);
   PlayTone(Do,30); Wait(35);
   PlayTone(Ra,90); Wait(120);
   PlayTone(Si,60); Wait(65);
   PlayTone(Do,30); Wait(35);
   PlayTone(Ra,60); Wait(70);
   PlayTone(Fa,30); Wait(35);
   PlayTone(Ra,30); Wait(35);
   PlayTone(Do,30); Wait(35);
   PlayTone(mi,60); Wait(65);
   PlayTone(Do,30); Wait(35);
   PlayTone(Do,30); Wait(35);
   PlayTone(Ra,30); Wait(35);
   PlayTone(Fa,60); Wait(70);
   PlayTone(Ra,60); Wait(65);
   PlayTone(Si,60); Wait(65);
   PlayTone(Do,30); Wait(35);
   PlayTone(Ra,90); Wait(120);
   PlayTone(Ra,90); Wait(95);
   PlayTone(Ra,90); Wait(95);
   PlayTone(So,60); Wait(65);
   PlayTone(Ra,120); Wait(125);
   Wait(50);
  }
  }
  task main()
  {
     SetSensor(SENSOR_1, SENSOR_TOUCH);                //センサ−1:タッチセンサー
     
     start play_music ;                                //音楽を演奏
     OnFwd(OUT_A+OUT_B);                               //直進
     
     until (SENSOR_1==1);                              //タッチセンサーが反応したとき
     stop play_music ;                                 //音楽の演奏を停止
     Off(OUT_A+OUT_B);                                 //停止
     }

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

『プログラム』

作成者:
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);
#define go_straight OnFwd(OUT_A+OUT_C);
#define Mi  330
#define Fa  349
#define So  392
#define Ra  440
#define Si  494
#define Do  523
#define Re  587
#define mi  659
task play_music()  
{
  while (true)
  {
  PlayTone(Ra,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Do,120); Wait(150);
  PlayTone(Do,30); Wait(35);
  PlayTone(Re,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(Si,120); Wait(150);
  PlayTone(Si,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Ra,120); Wait(150);
  PlayTone(Ra,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(Ra,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Do,90); Wait(120);
  
  PlayTone(Ra,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Do,120); Wait(150);
  PlayTone(Do,30); Wait(35);
  PlayTone(Re,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(Si,120); Wait(150);
  PlayTone(Si,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Ra,120); Wait(150);
  PlayTone(Mi,30); Wait(35);
  PlayTone(Fa,30); Wait(35);
  PlayTone(Mi,30); Wait(35);
  PlayTone(Mi,30); Wait(35);
  PlayTone(Ra,90); Wait(120);
 
  PlayTone(Ra,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(mi,60); Wait(70);
  PlayTone(Do,30); Wait(35);
  PlayTone(Ra,30); Wait(35);
  PlayTone(Fa,60); Wait(70);
  PlayTone(Ra,60); Wait(65);
  PlayTone(Si,60); Wait(65);
  PlayTone(Do,30); Wait(35);
  PlayTone(Ra,90); Wait(120);
  PlayTone(Si,60); Wait(65);
  PlayTone(Do,30); Wait(35);
  PlayTone(Ra,90); Wait(120);
  PlayTone(Si,60); Wait(65);
  PlayTone(Do,30); Wait(35);
  PlayTone(Ra,60); Wait(70);
  PlayTone(Fa,30); Wait(35);
  PlayTone(Ra,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(mi,60); Wait(65);
  PlayTone(Do,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(Ra,30); Wait(35);
  PlayTone(Fa,60); Wait(70);
  PlayTone(Ra,60); Wait(65);
  PlayTone(Si,60); Wait(65);
  PlayTone(Do,30); Wait(35);
  PlayTone(Ra,90); Wait(120);
  PlayTone(Ra,90); Wait(95);
  PlayTone(Ra,90); Wait(95);
  PlayTone(So,60); Wait(65);
  PlayTone(Ra,120); Wait(125);
  Wait(50);
 }
 }
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);       //センサー2:光センサー
  while(true)
 {
    start play_music;              //音楽を演奏
    while(SENSOR_2<60)              //明るさが60より小さいとき
   {
    go_straight;                  //直進
   }
    while(SENSOR_2>60)              //明るさが60より大きいとき 
   { 
    stop play_music;               //音楽の演奏を停止
    turn_left;                    //左旋回
   }
 }
}

その4【『光源に近づき過ぎると停止する』という機能を追加する】

『プログラム』

作成者:カツヤ・ウメ
#define THRESHOLD 100  
#define Mi  330
#define Fa  349
#define So  392
#define Ra  440
#define Si  494
#define Do  523
#define Re  587
#define mi  659
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);
#define go_straight OnFwd(OUT_A+OUT_C);
task play_music()  
{
  while (true)
  {
  PlayTone(Ra,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Do,120); Wait(150);
  PlayTone(Do,30); Wait(35);
  PlayTone(Re,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(Si,120); Wait(150);
  PlayTone(Si,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Ra,120); Wait(150);
  PlayTone(Ra,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(Ra,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Do,90); Wait(120);
  
  PlayTone(Ra,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Do,120); Wait(150);
  PlayTone(Do,30); Wait(35);
  PlayTone(Re,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(Si,120); Wait(150);
  PlayTone(Si,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Si,30); Wait(35);
  PlayTone(Ra,120); Wait(150);
  PlayTone(Mi,30); Wait(35);
  PlayTone(Fa,30); Wait(35);
  PlayTone(Mi,30); Wait(35);
  PlayTone(Mi,30); Wait(35);
  PlayTone(Ra,90); Wait(120);
 
  PlayTone(Ra,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(mi,60); Wait(70);
  PlayTone(Do,30); Wait(35);
  PlayTone(Ra,30); Wait(35);
  PlayTone(Fa,60); Wait(70);
  PlayTone(Ra,60); Wait(65);
  PlayTone(Si,60); Wait(65);
  PlayTone(Do,30); Wait(35);
  PlayTone(Ra,90); Wait(120);
  PlayTone(Si,60); Wait(65);
  PlayTone(Do,30); Wait(35);
  PlayTone(Ra,90); Wait(120);
  PlayTone(Si,60); Wait(65);
  PlayTone(Do,30); Wait(35);
  PlayTone(Ra,60); Wait(70);
  PlayTone(Fa,30); Wait(35);
  PlayTone(Ra,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(mi,60); Wait(65);
  PlayTone(Do,30); Wait(35);
  PlayTone(Do,30); Wait(35);
  PlayTone(Ra,30); Wait(35);
  PlayTone(Fa,60); Wait(70);
  PlayTone(Ra,60); Wait(65);
  PlayTone(Si,60); Wait(65);
  PlayTone(Do,30); Wait(35);
  PlayTone(Ra,90); Wait(120);
  PlayTone(Ra,90); Wait(95);
  PlayTone(Ra,90); Wait(95);
  PlayTone(So,60); Wait(65);
  PlayTone(Ra,120); Wait(125);
  Wait(50);
  }
      }
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);     //センサー1:光センサー
   while(true) 
   {
   start play_music;            //音楽を演奏
   while(SENSOR_1<60)            //明るさが60以下のとき
  {
   go_straight;               //直進
  }
   while(SENSOR_1>60)            //明るさが60より大きいとき   
  {
   if(SENSOR_1==THRESHOLD)         //明るさが100のとき
    {
    Off(OUT_A+OUT_C);            //停止
    }
    else{stop play_music;          //明るさが60より大きく100より小さいとき
   turn_left;                 //左旋回  
    }
    }
    }
    }

反省点

工夫した点

苦労した点

今後の課題

A6へのアドバイス

アドバイスお願いします!



添付ファイル: filegetmsg.jpg 406件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-26 (水) 00:40:31