[[2018a/Member]]

#contents

* 課題[#w3f30b24]
**ライントレースロボットの製作 [#v30a912c]
幅2ミリの黒線をトレースするロボットを作る
**以下のコースを進み,課題を達成させる [#u99b98ee]
#ref(./コース.png,70%,コース)
 1. Aをスタート
 2. Bを直進
 3. Cで一時停止の後、直進
 4. Dで一時停止の後、Xの空き缶をキャッチしてD地点に戻る
 5. DからEに向かい、Eを直進
 6. Fを左折
 7. Gで一時停止の後、左折
 8. Hで一時停止の後、右折
 9. Iで一時停止の後、右折
 10. Lを直進
 11. Kを直進
 12. Jで一時停止の後、空き缶をYに置きてJに戻りBに向かう
 13. Bで一時停止の後、左折
 14. Aで停止
 (一時停止の指定がある場所は、1秒間停止すること)

* 製作したロボット[#wbc0bea6]
小回りを利かせるために2輪ローバーにした.また,そのためのバランサーの先に光センサーを取り付けた.缶をつかむ機構はクワガタのような型にした.開閉にはラックを前後させ,2本の角に支点を設けることで動かす機構を採用した.
#ref(./)

* 製作したプログラム[#i91f01f2]

 #define x 45 //閾値の設定
 #define r 65 //90度の旋回時間(roll time)
 #define g 35 //缶をつかみに・離しに行くまでの時間(go time)

**サブルーチン・右側トレース [#qb0298bf]
 sub line2()
 {
 ClearTimer(0);
    while(FastTimer(0)<=55/2){ //交差点を判断する値
    if(SENSOR_2>x+7){ //光センサーの値が閾値+7以上だったら左に急旋回
        OnRev(OUT_A);
        OnFwd(OUT_C);
        ClearTimer(0);
    }else if(SENSOR_2>=x+5){ //光センサーの値が閾値+5以上だったら左に曲がる
        Off(OUT_A);
        OnFwd(OUT_C);
        ClearTimer(0);
    }else if(SENSOR_2>x){ //光センサーの値が閾値より大きかったら直進
        OnFwd(OUT_AC);
        ClearTimer(0);
    }else if(SENSOR_2>=x-5){ //光センサーの値が閾値-5以上だったら右に曲がる
        Off(OUT_C);
        OnFwd(OUT_A);
        ClearTimer(0);
    }else{         //それ以外だったら右に急旋回
        OnRev(OUT_C);
        OnFwd(OUT_A);
	 }
     }
    Off(OUT_AC);      //交差点が来たらとまれ
    PlaySound(SOUND_DOUBLE_BEEP); //停止と同時に音を出せ
 }

**サブルーチン・左側トレース(基本) [#eb284728]
 sub line()
 {
 ClearTimer(0);
    while(FastTimer(0)<=55/2){ //交差点を判断する値
    if(SENSOR_2>x+7){ //光センサーの値が閾値+7以上だったら右に急旋回
        OnRev(OUT_C);
        OnFwd(OUT_A);
        ClearTimer(0);
    }else if(SENSOR_2>=x+5){ //光センサーの値が閾値+5以上だったら右に曲がる
        Off(OUT_C);
        OnFwd(OUT_A);
        ClearTimer(0);
    }else if(SENSOR_2>x){ //光センサーの値が閾値より大きかったら直進
        OnFwd(OUT_AC);
        ClearTimer(0);
    }else if(SENSOR_2>=x-5){ //光センサーの値が閾値-5以上だったら左に曲がる
        Off(OUT_A);
        OnFwd(OUT_C);
        ClearTimer(0);
    }else{         //それ以外だったら右に急旋回
        OnRev(OUT_A);
        OnFwd(OUT_C);
	 }
     }
    Off(OUT_AC);      //交差点が来たらとまれ
    PlaySound(SOUND_DOUBLE_BEEP); //停止と同時に音を出せ
 }


**サブルーチン・離すプログラム [#of5668e3]
 sub release()
 {
        OnFwd(OUT_C); //左に曲がる
        OnRev(OUT_A);
        Wait(r);
        Off(OUT_AC);

        OnFwd(OUT_AC); //前進
        Wait(g);
        Off(OUT_AC);

        OnRev(OUT_B); //腕を開く
        Wait(10);
        Off(OUT_B);

        OnRev(OUT_AC); //後退
        Wait(g);
        Off(OUT_AC);

        OnRev(OUT_C);180度旋回
        OnFwd(OUT_A);
        Wait(r*2);`
        Off(OUT_AC);
 }




**サブルーチン・掴むプログラム [#ab92bbb8]
 sub cat()
 {
        OnFwd(OUT_AC); //前進
        Wait(g);
        Off(OUT_AC);

        OnFwd(OUT_B); //腕を閉じる
        Wait(10);
        Off(OUT_B);

        OnRev(OUT_AC); //後退
        Wait(g);
        Off(OUT_AC);
 }


**メインプログラム [#fcaf5452]
 task main()
 {

        SetSensor(SENSOR_2,SENSOR_LIGHT); //光センサーを定義

        OnFwd(OUT_AC);
        Wait(30);
        Off(OUT_AC);

        line();
        line();
        Wait(100);  //until C

        OnFwd(OUT_AC);
        Wait(70);
        Off(OUT_AC);

        line();
        Wait(100);  //until D
        cat();
        Wait(100);  //Dで停止

        OnFwd(OUT_C);  //D turn
        OnRev(OUT_A);
        Wait(r);
        Off(OUT_AC);
        Wait(100);

        line();  //until E
        line();  //until G

        OnFwd(OUT_C);  //Gで曲がる
        OnRev(OUT_A);
        Wait(r);
        Off(OUT_AC);
        Wait(100);

        line();
        line();
        Wait(100);  //until H

        OnFwd(OUT_C);  //Hで曲がる
        Off(OUT_C);
        Wait(r);
        Off(OUT_AC);

        line();
        Wait(100);  //until I

        OnFwd(OUT_A);  //Iで曲がる
        Off(OUT_C);
        Wait(r/2);
        Off(OUT_AC);

        line2();

        Wait(100);  //until J

        release();

        line();
        Wait(100);  //until B

        OnFwd(OUT_C);
        OnRev(OUT_A);
        Wait(r);
        Off(OUT_AC); //Bで曲がる

        line(); //until A
        OnFwd(OUT_AC); /枠内へ
        Wait(300);
        Off(OUT_AC); //停止
 }


* まとめ[#wf4cffdf]

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