学習ノート Hypodytes rubripinnis

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

アクセス数:今日2 総数&counter([total|today|yesterday]);   最終更新日:2006-02-02 (木) 17:46:46

光を追いかけるプログラム『センサー2個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 minous 35                              //minousを定義

int max;   //maxを定義
int time;  //timeを定義

task main()
{
    SetSensor(SENSOR_1,SENSOR_LIGHT);      //センサー1:光センサー
    SetSensor(SENSOR_3,SENSOR_LIGHT);      //センサー3:光センサー

    max=SENSOR_1;                          //センサー1をmaxに指定
    time=Timer(0);                         //タイマー0をtimeに指定
    ClearTimer(0);                         //タイマー0をリセット
    while(Timer(0)<=14)                    //タイマー0が14以下なら
    {
        turn_right                         //右旋回
        if(SENSOR_1>max)                   //センサー0が最大値なら
          {
           ClearTimer(1);                  //タイマー1をリセット
           max=SENSOR_1;                   //センサー1をmaxに指定
          }
        else                               //そうでないなら
          {
           max=max;                        //maxはそのまま
           time=Timer(1);                  //timeをタイマー1に指定
          }
   }

   ClearTimer(1);                          //タイマー1をリセット
   while(Timer(1)<=time)                   //タイマー1がtime以下なら
   {turn_left}                             //左旋回

   while(true)
   {
        if((SENSOR_1>=max-minous)==(SENSOR_3>=max-minous))  //センサー1,3の値が最大値の付近で、ほぼ同値なら
          {go_straight}                    //直進
        if(SENSOR_1<(max-minous))          //センサー1の値が最大値-minous未満なら
          {
           turn_right                      // 右旋回             
           until(SENSOR_1>=(max-minous));  //センサー1の値が最大値-minous以上まで
          }
        if(SENSOR_3<(max-minous))          //センサー3の値が最大値-minous未満なら
          {
           turn_left                       //左旋回
           until(SENSOR_3>=(max-minous));  //センサー3の値が最大値-minous以上まで
          }
   }
}

仕組み&工夫したところ

  • 見た目単純なプログラムだけど、なかなか大変でした。特に光の方向に向きを変える時の旋回時間を試行錯誤しました。直進の条件と同じにすると左右に首を振るだけになってしまったので、時間を指定してみたり、旋回の後に直進を入れて直進時間を指定してみましたが、光の変化に反応するのに時間がかかってしまった。今のプログラムだと、時間を指定してないので、光の変化にすばやく対応します。動きは、光の強い方へ旋回して、一定値以上になるまで回り続けます。(movie参照)
  • 直進する時は両方のセンサーに一定以上の光を当てなくてはならないので、センサーの値の誤差(minous)の調整は大変でした。この数値が大きければ、光に対しての反応は良くなりますが、大き過ぎると部屋の明かりに反応して、直進してしまうからです。
  • 本体は、センサーの角度を調整できるようにバージョンアップしてます。(赤矢印)
  • センサーを1個だけ使った時よりも、光の強い方を判断するのに 時間がかからないので、左右に曲がる時にスムーズです。
  • センサーが2個有ったほうがスムーズに動き、プログラムも簡単にできるだろうと思い、「ついで」と思って作ってみましたが、こちらの方が大変でした。あ〜英語の発表とテストどうしよ〜
  • 先生に出来が良いといわれたのがとても嬉しかった!

movie

robo6.JPG robo6-2.JPG

  • 見ました。きれいにまとまっていると思います。 -- ゆん(TA)? 2006-02-02 (木) 17:46:46


添付ファイル: filerobo6.wmv 90件 [詳細] filerobo6-2.JPG 98件 [詳細] filerobo6.JPG 114件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-02-02 (木) 17:46:46