2017b/Member/Alex/Mission2

概要

 今回の課題は黒い線の経路にそって動くロボットを作成します。

コース

333.jpg
   Dをスタート
   Cを直進
   Bを左折
   Pを左折(一時停止)
   Qを直進
   Rを左折
   Fを左折
   Sを直進(一時停止)
   Y地点の紙コップを取得してコースに戻る
   Sを直進(一時停止)
   Qを左折(一時停止)
   Rを直進
   X地点に紙コップを置いてコースに戻る
   Pを左折
   B を左折(一時停止)
   A地点へ(ゴール)

ロボット

3.jpg
コップが光センサーの邪魔にならないように、間にものを置きました。
2.jpg
右側にモーターをつけて、手の上げ下げを起動します。
3.png
左側は対応して、コープをつかむ手が形成されました。
9999.JPG
777.png
このような形の手でコップをつかみます。

ライントレースする仕組み

667.png

`それぞれの場所の光強さを示す

プログラミング概要

定義

#define t_l1 OnFwd(OUT_A,45); OnRev(OUT_C,10);  //急左折
#define t_l2 OnFwd(OUT_A,55); OnFwd(OUT_C,10);  //左折
#define t_l3 OnFwd(OUT_A,35); OnRev(OUT_C,30);  //回転左折
#define go_forward OnFwd(OUT_AC,40);       //前進
#define r_b OnRev(OUT_AC,40);          //後退
#define t_r1 OnRev(OUT_A,10); OnFwd(OUT_C,45);  //急右折
#define t_r2 OnFwd(OUT_A,10); OnFwd(OUT_C,55);  //右折
#define t_r3 OnRev(OUT_A,30); OnFwd(OUT_C,35);  //回転右折
#define DO  523       
#define STEP 1                    
#define t_off OnFwd(OUT_B,50); Wait(300); Off(OUT_B); //手落とし
#define t_on OnRev(OUT_B,50); Wait(300); Off(OUT_B); //手挙げる

サブルーチン

sub DM()
{
 int BT=0;                                  //BTは続けて暗いときになった回数
 while(BT < 140){                           //回数が140以下の時ライントレースを繰り返す
  if (SENSOR_2 < 38) {                       //光強さが38以下の時に急左折する
    t_l1;
    BT++;                  //回数増加する
    }else{
     if (SENSOR_2 < 47) {          //光強さが38〜47の間の時に左折する
       t_l2;
     } else if (SENSOR_2 < 55) {      //光強さが47〜55の間の時に前進する
       go_forward;
     } else if (SENSOR_2 < 60) {      //光強さが55〜60の間の時に右折する
       t_r2;
     } else {                //光強さが60以上の時に急右折する
       t_r1;
      }
      BT=0;                                 //回数を初期化する              
   }
	Wait(STEP);
 }
  Off(OUT_AC);
  PlayTone(DO,100); Wait(100);              //交差点で鳴らす
  Wait(1000);
  BT = 0;                  
}
sub CM()
{
 int BP=0;                 //BPは続けて暗いときになった回数
 while(BP < 140){                          //回数が140以下の時ライントレースを繰り返す
  if (SENSOR_2 < 48) {           //光強さが48以下の時に急左折する
    t_l1;
    BP++;                                  //回数増加する
     } else{
     if (SENSOR_2 < 55) {         //光強さが48〜55の間の時に前進する
       go_forward;
     } else if (SENSOR_2 < 60) {      //光強さが55〜60の間の時に回転右折する
       t_r3;
     } else {               //光強さが60以上の時に急右折する
       t_r1;
      }
      BP=0;                                //回数を初期化する
   }
	Wait(STEP);
}
  Off(OUT_AC);
  PlayTone(DO,100); Wait(100);      //交差点で鳴らす
  Wait(1000);
  BP = 0;                                   
}
CMはDMより交差点を反応しやすいです。
左側に沿って動いてます。

task main

task main()
{
 SetSensorLight(S2);
 DM();
 t_r2;                 //Cでちょっと右折する
 Wait(200);
 DM();
 OnFwd(OUT_A,55);           //Bで90度左折する
 Wait(1900);
 DM();
 t_l2;                //Pで左折する
 Wait(1200);
 CM();
 t_r2;                //Qで右折する
 Wait(300);
 CM();
 t_l2;                //Rで左折する
 Wait(300);
 DM();
 OnFwd(OUT_A,55);          //Eで90度左折する 
 Wait(1900);	
 DM();
 OnFwd(OUT_A,55);          
 Wait(3800);
 CM();
 OnFwd(OUT_A,50);          //Fで90度左折する
 Wait(1800);	
 Wait(STEP);
 OnFwd(OUT_C,35);OnFwd(OUT_A,5);  //Fのところで紙コップを探す
 Wait(200);
 Wait(STEP);
 t_on;               //手を下げる
 Wait(STEP);
 OnFwd(OUT_C,50);OnRev(OUT_A,15);   //軌道へ戻る
 Wait(1500);
 DM();
 t_r1;               //Sのところでちょっと右折する
 Wait(300);
 DM();
 go_forward;            //Qのところで反応して前にちょっと進む
 Wait(300);
 t_off;              //手を上げる
 r_b;               //後退して元の場所へ戻る
 Wait(1100);         
 t_l2;              //Qのところで左折する  
 Wait(1100);
 DM();
 t_r2;              //Rのところで右折する
 Wait(300);
 CM();
 t_l1;              //Pのところで左折する
 Wait(800);
 DM();
 OnFwd(OUT_A,50);        //Bのところで90度左折する
 Wait(1400);
 DM();
 t_r1;             //Aの前の交差点で反応してちょっと右折する
 Wait(200);
 go_forward;          //Aに入る
 Wait(500);
}

結果

 テストの時はうまく行けたけど、最後の時、電池が消耗されて、思ったより変わったので、成功できませんでした。

反省

 電池の消耗をもっと注意すべきです。


添付ファイル: file9999.JPG 47件 [詳細] file777.png 66件 [詳細] file777.jpg 29件 [詳細] file667.png 57件 [詳細] file3.jpg 51件 [詳細] file2.jpg 68件 [詳細] file123.jpg 26件 [詳細] file11.jpg 37件 [詳細] file1.jpg 30件 [詳細] file333.jpg 53件 [詳細]

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