[[2019a/Member]]

目次
#contents
*課題2について [#u74e2052]

*ロボットについて [#m5de3aaa]

**タイヤ [#xf6b7f3f]

**アーム [#x5e87750]

*プログラムについて [#id4fac50]
**ライントレースの仕組み [#ld4d1ed2]

**交差点認識の方法 [#p8c71d7c]

***直角交差点 [#zcb84290]

***円形交差点 [#f1b8055c]

**使用したサブルーチン [#pfa6529b]

***定義・マクロ [#c109df9b]

まずグローバル変数のtを定義します.
 int t;
次に交差点を認識するための時間を2種類定義します.
 #define KOUSATEN 20      //直角交差点用
 #define ENKEIKOUSATEN 13 //円形交差点用
ライントレースに使用する光センサーの値を定義します.
 #define kuro 41
 #define kurohai 43   
 #define hai 45
 #define shirohai 47
ライントレースの動作のマクロです.
 #define go_ahead OnFwd(OUT_AC);                                   //直進
 #define turn_left SetPower(OUT_AC,3);Off(OUT_A);OnFwd(OUT_C);     //左回転
 #define turn_right SetPower(OUT_AC,3);OnFwd(OUT_A);Off(OUT_C);    //右回転
 #define Uturn_left SetPower(OUT_AC,3);OnRev(OUT_A);OnFwd(OUT_C);  //左旋回
 #define Uturn_right SetPower(OUT_AC,3);OnFwd(OUT_A);OnRev(OUT_C); //右旋回
一時停止のマクロです.交差点では,1秒間停止しなければならないので,時間は1秒です.
 #define kyukei Wait(100);
ライントレースの1つの動作の継続時間を定義します.
 #define STEP 1

***follow_line1 [#seefd551]
follow_line1はライントレースをして直角の交差点で止まるサブルーチンです.光センサーの値がkuroの状態が一定時間(KOUSATEN)の間続くと止まります.そのために,kuroの動作ではタイマーをリセットせず時間を計り続けます.それ以外の動作の時は1回ずつタイマーをリセットしています.
 sub follow_line1()
 {
    SetSensor(SENSOR_2,SENSOR_LIGHT);
   
    ClearTimer(0);         //まずタイマー0をリセット
    while(FastTimer(0)<KOUSATEN)    //タイマー0の値がKOUSATEN(20)未満のとき繰り返す
        {
        if(SENSOR_2<kuro)           //光センサーの値がkuro(41)未満なら
            {
           Uturn_left;       //左旋回
             }
        else if(SENSOR_2<kurohai)  //光センサーの値がkurohai(43)未満なら
            {
           turn_left;ClearTimer(0); //左回転,そしてタイマー0をリセット
            }
        else if(SENSOR_2<hai)       //光センサーの値がhai(45)未満なら
            {
           go_ahead;ClearTimer(0);  //直進,そしてタイマー0をリセット
            }
        else if(SENSOR_2<shirohai)  //光センサーの値がshirohai(49)未満なら
            {
           turn_right;ClearTimer(0);//右回転,そしてタイマー0をリセット
            }
        else             //それ以外(光センサーの値が49以上)なら
            {
           Uturn_right;ClearTimer(0);//右旋回,そしてタイマー0をリセット
            }
         Wait(STEP);                 //いずれかの動作をSTEP(1)だけ実行
        }
    Off(OUT_AC);                      
    kyukei;                          //1秒間停止  
 }

***follow_line2 [#a8201e5e]
follow_line2は,tの間だけライントレースをして止まるサブルーチンです.基本的な仕組みはfollow_line1と同じです.follow_line1との違いは,KOUSATENの代わりにグローバル変数tを用いることで任意の時間tの間は止まることなく進むことができます.そのために,それぞれの動作でタイマーをリセットすることはなく,このサブルーチンが始まってからの時間を計り続けます.

 sub follow_line2()
 {
    SetSensor(SENSOR_2,SENSOR_LIGHT);
   
    ClearTimer(0);         //まずタイマー0をリセット
    while(FastTimer(0)<t)
        {
        if(SENSOR_2<kuro)
            {
           Uturn_left;
             }
        else if(SENSOR_2<kurohai)
            {
           turn_left;
            }
        else if(SENSOR_2<hai)
            {
           go_ahead;
           }
        else if(SENSOR_2<shirohai)
            {
           turn_right;
            }
        else 
            {
           Uturn_right;
            }
         Wait(STEP);
        }
    Off(OUT_AC);
    PlaySound(SOUND_CLICK);
 }
 

**実際の経路に沿ったプログラム [#ge3070f3]



*感想・反省点 [#c3f3176f]

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