2012b/Member

メンバー紹介

ロボ

ロボットの説明

ロボ

ロボの前部に取り付けられた装置でピンポン玉をはさみます。パクと呼びます。

ロボ ロボ

パクはチューブによってモーターBとつながれています。チューブを使うことによりモーターを回しすぎてもよくなり、微妙な調節が必要なくなりました。

ロボ

後輪はRUNを押すときよくとれるので困りました。バランスをとるため付けられています。

プログラムの説明

 黒線をなぞるプログラム等P30から応用しました。土木工学科が書いたと思ってハードルを下げて読んでいただけると幸です。

 便宜上ロボの前部に取り付けられたピンポン玉を挟む装置をパクと表記する。

#define THRESHOLD 43  //黒線の上51、白い場所の上37より設定
#define HIPOWER 7 //強く回す
#define LOWPOWER 2	//弱く回す
#define set_power_H SetPower(OUT_AC,HIPOWER);   //モーターACを強く回す
#define set_power_L SetPower(OUT_AC,LOWPOWER);  //モーターACを弱く回す
#define go_forward set_power_H; OnFwd(OUT_AC);  //前進
#define turn_left1 set_power_L;OnFwd(OUT_C); OnRev(OUT_A);  //左折
#define turn_left0 set_power_L;OnFwd(OUT_A); Off(OUT_C);  //弱く左折
#define turn_right0 set_power_L;OnFwd(OUT_A); Off(OUT_C);  //弱く右折
#define turn_right1 set_power_L;OnFwd(OUT_A); OnRev(OUT_C);  //右折
#define STEP 1  //STEPごとにライトセンサーが判定をだす
#define set_power_L_p SetPower(OUT_B,1);  //パクが脱輪しないようにモーターを弱くする
#define pakum(t) set_power_L_p;OnFwd(OUT_B);Wait(t);Off(OUT_B);   //パクがピンポン玉を挟む
#define pakuu(t) set_power_L_p;OnRev(OUT_B);Wait(t);Off(OUT_B);  //パクがピンポン玉を離す
#define go(t) OnFwd(OUT_AC);Wait(t);  //前進
#define back(t) OnRev(OUT_AC);Wait(t);  //後退
#define left(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);  //左折
#define right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);  //右折
#define MUSHI 30 //タイマー1,2,3でライトセンサーが角だと判断する秒数
task main()
{
  pakuu(70);  //ピンポン玉をはさみ
  go(50);   //黒線を越えます
  right(20);  //進行方向に向く

1

  SetSensor(SENSOR_2,SENSOR_LIGHT);
  ClearTimer(0);  //このタイマーで場所を区切る
  int n=0; //黒線を無視した回数を数える

 黒線を乗り越えた後、急カーブなどで無視してしまうことがあったので回数制限をもうけるためカウンターを使った。

  while(FastTimer(0) <= 1400){ //14秒以下は下図のように角を無視しない
    if(SENSOR_2 < THRESHOLD -3) {
      turn_left1;
    } else if (SENSOR_2 < THRESHOLD -1) {
      turn_left0;
    } else if (SENSOR_2 < THRESHOLD +2) {
       go_forward;
    } else if (SENSOR_2 < THRESHOLD +5) {
       turn_right0;
    } else {
      turn_right1;
     }
    Wait(STEP);
   } 

 黒線に反応しづらかったため左折のときのしきい値を-5,-2から-3,-1にした。 2

   while((1400 <= FastTimer(0))&&(FastTimer(0) <= 2000)){ //14秒から20秒の間は下図のように黒線を乗り越える
   if(SENSOR_2 < THRESHOLD -3) {
     turn_left1;
   } else if (SENSOR_2 < THRESHOLD -1) {
     turn_left0;ClearTimer(1);
   } else if (SENSOR_2 < THRESHOLD +2) {
      go_forward;ClearTimer(1);
   } else if (SENSOR_2 < THRESHOLD +5) {
      turn_right0;ClearTimer(1);
   } else {
     turn_right1;ClearTimer(1);
    }
   Wait(STEP);
   if((FastTimer(1) >= MUSHI)&&(n<1)){ //n<1より乗り越えた後、角の判定がでても乗り越えないようにする
     go(20);
     right(5)
     PlaySound(SOUND_UP); //乗り越えたら音を鳴らす
     n++; //乗り越えた回数を数える
     }  
   }

3

  while((2000 <= FastTimer(0))&&(FastTimer(0) <= 3000)){//20秒から30秒の間は下図のように角をやり過ごす
   if(SENSOR_2 < THRESHOLD -3) {
     turn_left1;
   } else if (SENSOR_2 < THRESHOLD -1) {
     turn_left0;ClearTimer(2);
   } else if (SENSOR_2 < THRESHOLD +2) {
      go_forward;ClearTimer(2);
   } else if (SENSOR_2 < THRESHOLD +5) {
      turn_right0;ClearTimer(2);
   } else {
     turn_right1;ClearTimer(2);
    }
   Wait(STEP);
   if((FastTimer(2) >= MUSHI)&&(2>n>=1)){ //角をやりすごした後、角の判定がでないようにする
     left(50);
     PlaySound(SOUND_UP); //音を鳴らす
     n++; //やりすごした回数を数える
   }

4

  while(3000 <= FastTimer(0)){ //30秒以上のとき角にぶつかるとシュートする
   if(SENSOR_2 < THRESHOLD -3) {
     turn_left1;
   } else if (SENSOR_2 < THRESHOLD -1) {
     turn_left0;ClearTimer(3);
   } else if (SENSOR_2 < THRESHOLD +2) {
      go_forward;ClearTimer(3);
   } else if (SENSOR_2 < THRESHOLD +5) {
      turn_right0;ClearTimer(3);
   } else {
     turn_right1;ClearTimer(3);
    }
   Wait(STEP);
   if((FastTimer(3) >= MUSHI)&&(n>=2)){
     right(20); //角度の調整
     pakum(100); //パクを開く
     back(80); //後退
     go(80); //シュート!!!!!!!!!!!!!!!!!!
     } 
 }
}
}

5

感想

 黒線が薄くなっていくのにはまいったが、あまりに失敗しすぎて楽しかった。

    ( ^o^)<ロボティクス楽しいなー!


添付ファイル: file9.jpg 269件 [詳細] file8.png 312件 [詳細] file7.png 269件 [詳細] file6.jpg 272件 [詳細] file5.jpg 251件 [詳細] file4.jpg 274件 [詳細] file3.jpg 259件 [詳細] file2.jpg 276件 [詳細] file1.jpg 279件 [詳細] file7171.jpg 267件 [詳細] fileIMG_7171.jpg 124件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-12-26 (水) 16:37:08