学習ノート Hypodytes rubripinnis

課題3:光を追いかけるプログラム課題4右

アクセス数:今日1 総数&counter([total|today|yesterday]);   最終更新日:2005-12-16 (金) 00:26:24

光を追いかけるプログラム『センサー1個ver.』                  movie

作成者:Hypodytes rubripinnis
#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が最大値−マイナス以上まで
          }
   }
}

仕組み&工夫したところ

  • まず本体については、センサーの角度を斜めにして感度を良くしたところです(赤矢印)。
  • プログラムでこだわったのは、決められた値以上の光に向かって行くのではなく、最大値を探し出し、その光源に向かって行くようにしたところです。
  • 難しかったところは、1周して光の最大値を見つけ出すところでした。最終的には簡単でシンプルなプログラムでスムーズに見つけ出すことが出来るようになりました。
  • 光の方向に向かって軌道修正する時は、きっちり最大値を入力してしまうとうまく動かないので、minusを引くことで、数値に幅を持たせました。
  • 光源の方向に旋回する時は、右に少し旋回して、その後左に旋回するようにすると効率よく光源を見つけることが出来ました。

movie1

movie2

robo5-2.JPG robo5.JPG



添付ファイル: filerobo5-2.wmv 90件 [詳細] filerobo5.wmv 112件 [詳細] filerobo5.JPG 93件 [詳細] filerobo5-2.JPG 86件 [詳細]

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