*メンバー紹介 [#vca94d6f]
**shinshi 工学部情報工学科       [#b07f478d]
**tomato  工学部電気電子工学科 [#rfaee0c5]
**satoT   農学部のなん科 [#se33dcdf]
**nazan   理学部数理自然情報科学科 [#c328fd88]
*課題2 [#ab76d8ca]
 フィールドは課題1で使用したものを組み合わせたもの。
フィールドは課題1で使用したものを組み合わせたもの。
 start地点から始まり缶を集めてゴールにつみあげる。
http://yakushi.shinshu-u.ac.jp/robotics/?plugin=ref&page=2013b%2FMember%2FsatoT%2FMission2&src=kadai2.png

*ロボットの作成 [#ebb7f70b]
 ロボットはみんなで会議をした結果、合体型にしたほうがモーターを効率的に使用することができるのではないかという結論に達した。
ロボットはみんなで会議をした結果、合体型にしたほうがモーターを効率的に使用することができるのではないかという結論に達した。
最初は4個ずつ立てるつもりであったが、ロボットを作っていくにつれ、部品が足りない、モーターの出力が思いのほか低いなどの問題点が浮上したため缶を2個つむロボットを制作することにした。
&ref(25320.png); 
&ref(説明1.png); 


*プログラミングの説明 [#p3bb839f]
**アームのプログラム [#a1d3c7ef]
 #define kurot 37
 #define kurok 42
 #define kurog 45
 #define shiro 47
 #define hi 1
 #define low 1
 #define lift_up OnFwd(OUT_AB);
 #define lift_down OnRev(OUT_AB);
 #define tukamu OnRev(OUT_C);
 #define release OnFwd(OUT_C);
 #define MOVE_TIMEA 280
 #define MOVE_TIMEB 140
 #define MOVE_TIMEC 30
 #define MOVE_TIMED 250
 #define kousin 5
 #define pdown 6
 #define zensin 7
 #define kyatti 8
 #define anoraitore 10
 #define kankan 11
 #define bnoraitore 12
 #define cnoraitore 13
 #define bniraitore 14
 #define kanhanasu 15
 #define tyoikousin 16 
  int p=0;
  int n=0;
  int x=0;
  int y=0;
  int k=0; 
 task main()
 {
 ClearMessage(); 
 while(k < 1){
 until(Message() == kyatti);
  tukamu;
  Wait(50);
  lift_up;
  Wait(300);
  k++;
 }
 ClearMessage();
  SendMessage(anoraitore);
  Wait(10);
  while(k < 2){
 ClearMessage();
  until(Message() == kankan);
  lift_down; 
  Wait(MOVE_TIMEC);
  Off(OUT_AB);
  release;
  Wait(50);
 Off(OUT_C);
  release; 
  Wait(50);
  Off(OUT_C);
  k++;
 }
 ClearMessage();
  SendMessage(kousin);
  Wait(10);
 ClearMessage();
  while(k < 3){
  until(Message() == pdown);
  lift_down; 
 Wait(MOVE_TIMED);
  Off(OUT_AB);
  k++;
 }
 ClearMessage();
 SendMessage(zensin);
 Wait(10);
 ClearMessage();
 while(k < 4){
 until(Message() == kyatti);
 tukamu; 
 Wait(50);
 k++;
 }
 ClearMessage();
 SendMessage(bnoraitore);
 Wait(10);
 ClearMessage();
 while(k < 5){
 until(Message() == kyatti);
 tukamu;
 Wait(50);
 lift_up;
 Wait(MOVE_TIMEA);
 k++;
 }
 ClearMessage();
  SendMessage(cnoraitore);
 Wait(10);
 ClearMessage();
 while(k < 6){
 until(Message() == kankan);
 lift_down;
 Wait(MOVE_TIMEC);
  release;
  Wait(50);
  k++; 
 }
 ClearMessage();
 SendMessage(kousin);
 Wait(10);
 ClearMessage();
 while(k < 7){
 until(Message() == pdown);
 lift_down; 
 Wait(MOVE_TIMED);
  Off(OUT_AB);
  k++;
 }
 ClearMessage();
 SendMessage(zensin);
 Wait(10);
 ClearMessage();
 while(k < 8){
 until(Message() == kyatti);
 tukamu;
 Wait(50);
 k++;
 }
 ClearMessage();
 SendMessage(bniraitore);
 ClearMessage();
 while(k < 9){
 until(Message() == kanhanasu);
 release;
 Wait(50);
 k++;
 }
 ClearMessage();
 SendMessage(tyoikousin);
 Wait(10);
 Off(OUT_ABC);
 }
**タイヤの部分のプログラミング [#w0eda90e]
 #define kurot 37
 #define kurok 42
 #define kurog 45
 #define shiro 47
 #define hi 5
 #define low 2
 #define sh SetPower(OUT_AC, hi);
 #define sl SetPower(OUT_AC,low);
 #define slh SetPower(OUT_A,low); SetPower(OUT_C,hi);
 #define shl SetPower(OUT_A,hi);  SetPower(OUT_C,low);
 #define sss SetPower(OUT_A,1);SetPower(OUT_C,1);
 #define mae sh OnFwd(OUT_AC);
 #define ushiro OnRev(OUT_AC); 
 #define migi0 sl; OnFwd(OUT_C); Off(OUT_A);
 #define migi1 sl; OnFwd(OUT_C); OnRev(OUT_A); 
 #define hidari0 sl; Off(OUT_C); OnFwd(OUT_A);
 #define hidari1 sl; OnRev(OUT_C); OnFwd(OUT_A);
 #define STEP 1
 #define nMAX 5
 #define yasumi Off(OUT_AC); Wait(100);
 #define cross 25
 #define cross_line  sl; OnFwd(OUT_AC); Wait(cross); yasumi;
 #define kousin 5
 #define pdown 6
 #define zensin 7
 #define kyatti 8
 #define anoraitore 10
 #define kankan 11
 #define bnoraitore 12
 #define cnoraitore 13
 #define bniraitore 14
 #define kanhanasu 15
 #define tyoikousin 16  
  int p=0;
  int n=0;
  int x=0;
  int y=0; 
 sub hidarikan () {  
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_3,SENSOR_LIGHT);
      while(SENSOR_1 > 55){
      if (SENSOR_1 < kurot){
        hidari0;
        p++;
      } else {
      if(SENSOR_1 < kurok){
        hidari0;
      } else if (SENSOR_1 < kurog){
        mae;
      } else if (SENSOR_1 < shiro){
        migi0;
      } else {
        migi0;
       }
        p=0;
       }
        Wait(STEP);
       }
        yasumi;
        migi0;
        Wait(nMAX*STEP*2);
        cross_line;
        n++;
        p=0;
        }  
 sub hidaria () {
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_3,SENSOR_LIGHT);  
 while(n < 2){
 while(p < nMAX){
      if (SENSOR_1 < kurot){
        hidari1;
        p++;
      } else {
      if(SENSOR_1 < kurok){
        hidari0;
      } else if (SENSOR_1 < kurog){
        mae;
      } else if (SENSOR_1 < shiro){
        migi0;
      } else {
        migi1;
      }
        p=0;
       }
        Wait(STEP);
       }
        yasumi;
        migi1;
        Wait(nMAX*STEP*2);
        cross_line;
        n++;
        p=0;
        }
 } 
 sub hidarib () {
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_3,SENSOR_LIGHT);  
 while(n < 3){
 while(p < nMAX){
      if (SENSOR_1 < kurot){
        hidari1;
        p++;
      } else {
      if(SENSOR_1 < kurok){
        hidari0;
      } else if (SENSOR_1 < kurog){
        mae;
      } else if (SENSOR_1 < shiro){
        migi0;
      } else {
        migi1;
       }
        p=0;
       }
        Wait(STEP);
       }
        yasumi;
        migi1;
        Wait(nMAX*STEP*2);
        cross_line;
        n++;
        p=0;
        }
  }  
 sub hidaric () {
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_3,SENSOR_LIGHT); 
 while(n < 4){
 while(p < nMAX){
      if (SENSOR_1 < kurot){
        hidari1;
        p++;
      } else {
      if(SENSOR_1 < kurok){
        hidari0;
      } else if (SENSOR_1 < kurog){
        mae;
      } else if (SENSOR_1 < shiro){
        migi0;
      } else {
        migi1;
       }
        p=0;
       }
        Wait(STEP);
       }
        yasumi;
        migi1;
        Wait(nMAX*STEP*2);
        cross_line;
        n++;
        p=0;
        }
  } 
 sub hidarid () {
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_3,SENSOR_LIGHT); 
 while(n < 7){
 while(p < nMAX){
      if (SENSOR_1 < kurot){
        hidari1;
        p++;
      } else {
      if(SENSOR_1 < kurok){
        hidari0;
      } else if (SENSOR_1 < kurog){
        mae;
      } else if (SENSOR_1 < shiro){
        migi0;
      } else {
        migi1;
       }
        p=0;
       }
        Wait(STEP);
       }
        yasumi;
        migi1;
        Wait(nMAX*STEP*2);
        cross_line;
        n++;
        p=0;
        }
  }  
 task main ()
 { 
  int p=0;
  int n=0;
  int x=0;
  int y=0;
  int k=0;
 migi0;until(SENSOR_1 < 45); Off(OUT_AC);
 hidarikan();
 ClearMessage();
  SendMessage(kyatti);
  Wait(10);
 ClearMessage();
  while(k < 1){
  until(Message() == anoraitore);
  hidaria();
  k++;
  }
 hidarikan();
 ClearMessage();
 SendMessage(kankan);
 Wait(10);
 ClearMessage();
 while(k < 2){
 until(Message() == kousin);
 OnRev(OUT_AC);
 Wait(10);
 Off(OUT_AC);
 k++;
 } 
 ClearMessage();
 SendMessage(pdown);
 Wait(10);
 ClearMessage();
 while(k < 3){
 until(Message() == zensin);
 OnFwd(OUT_AC);
 Wait(10);
 Off(OUT_AC);
 k++;
 }
 ClearMessage();
 SendMessage(kyatti);
 Wait(10);
 ClearMessage();
 while(k < 4){
 until(Message() == bnoraitore);
 hidarib();
 hidari1;
 Wait(50);
 OnFwd(OUT_AC);
 Wait(25);
 OnRev(OUT_AC);
 Wait(50);
 Off(OUT_AC);
 migi0;
 Wait(50);
 migi1;until(SENSOR_1 <45); Off(OUT_AC);
 hidarikan();
 k++;
 }
 ClearMessage();
 SendMessage(kyatti);
 Wait(10);
 ClearMessage();
 while(k < 5){
 until(Message() == cnoraitore);
 hidaric();
 hidarikan();
 k++;
 }
 ClearMessage();
 SendMessage(kankan);
 Wait(10);
 ClearMessage();
 while(k < 6){
 until(Message() == kousin);
 OnRev(OUT_AC);
 Wait(10);
 Off(OUT_AC);
 k++;
 }
 ClearMessage();
 SendMessage(pdown);
 Wait(10);
 ClearMessage();
 while(k < 7){
 until(Message() == zensin);
 OnFwd(OUT_AC);
 Wait(10);
 Off(OUT_AC);
 k++;
 }
 ClearMessage();
 SendMessage(kyatti);
 Wait(10);
 ClearMessage();
 while(k < 8){
 until(Message() == bniraitore);
 hidarid();
 hidari0;
 Wait(10);
 OnFwd(OUT_AC);
 Wait(15);
 k++;
 }
 ClearMessage();
 SendMessage(kanhanasu);
 Wait(10);
 ClearMessage();
 while(k < 9){
 until(Message() == tyoikousin);
 OnRev(OUT_AC);
 Wait(100);
 Off(OUT_AC);
 k++;
 }
 }  
*結果 [#v2a2c4e1]
結果は最下位となってしまった。ライントレースが本番になってできなくなってしまい、お見苦しい結果を見せることになってしまった。
*感想 [#mefcc1cb]
**よかったこと [#ldd7c00a]
ロボットを作るためにたくさんの試作機を作って、試行錯誤することができた。
**改善点 [#bd11734d]
ロボットの結合部が非常にもろく、持ち運ぶたびに壊れてしまったり、モーターを動かすと取れてしまう部分などがあった。
ロボット作りに非常に時間がかかってしまいプログラミングの時間がとれず、時間を測る等の作業があまりできなかった。
*感想 [#qa090c2f]
ロボット作りというのはあまりやる機会がないのでとても楽しい作業だった。毎日9時までチームみんなで残って作業して、結果は残念だったが、貴重な経験をすることができた。

過去の作品の一部
&ref(過去作.jpg);

作業中の風景 連日の作業につかれたもよう
&ref(nazan.jpg);


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