***[[学習ノート Hypodytes rubripinnis>2005/A5/学習ノート Hypodytes rubripinnis]] [#ja9017cd]
***課題3:光を追いかけるプログラム[[課題4右>2005/A5/課題4右]] [#bf0b18eb]

''アクセス数:今日&counter(today); 総数&counter(all);   最終更新日:&lastmod;''

*&color(red){現在製作中!しばしお待ちを!!}; [#a0482bd1]

*光を追いかけるプログラム『センサー2個ver.』                  &size(30){&color(red){'''movie'''''↓''};}; [#w0f52751]

 作成者: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個有ったほうがスムーズに動き、プログラムも簡単にできるだろうと思い、「ついで」と思って作ってみましたが、こちらの方が大変でした。あ〜英語の発表とテストどうしよ〜
-先生に出来が良いといわれたのがとても嬉しかった!

&size(30){☆[['''movie1''':http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&pcmd=open&file=robo6.wmv&refer=2005%2FA5%2F%B3%D8%BD%AC%A5%CE%A1%BC%A5%C8%20Hypodytes%20rubripinnis%2F%B8%F7%A4%F2%C4%C9%A4%A4%A4%AB%A4%B1%A4%EB%A5%ED%A5%DC%A5%C3%A5%C8%A1%D8%A5%BB%A5%F3%A5%B5%A1%BC%A3%B2%B8%C4ver.%A1%D9]]};

&size(30){☆[['''movie2''':http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&pcmd=open&file=robo6-2.wmv&refer=2005%2FA5%2F%B3%D8%BD%AC%A5%CE%A1%BC%A5%C8%20Hypodytes%20rubripinnis%2F%B8%F7%A4%F2%C4%C9%A4%A4%A4%AB%A4%B1%A4%EB%A5%ED%A5%DC%A5%C3%A5%C8%A1%D8%A5%BB%A5%F3%A5%B5%A1%BC%A3%B2%B8%C4ver.%A1%D9]]};

&ref(2005/A5/学習ノート Hypodytes rubripinnis/光を追いかけるロボット『センサー2個ver.』/robo6.JPG,30%);
&ref(2005/A5/学習ノート Hypodytes rubripinnis/光を追いかけるロボット『センサー2個ver.』/robo6-2.JPG,30%);


#comment


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