[[2010a]]
*目次 [#f8b8a456]
#contents

*課題2 [#da324a89]
課題2:黒い線に沿って動くロボット †

各チームで作成したコースを1周するロボットを製作せよ。交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する)

   1. 空き缶をコース上に戻して再びコースに戻って進む
   2. 空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む
   3. 奇数回目に空き缶に遭遇したら、その場で反転して進み、偶数回目に遭遇したら、空き缶を押しのけて進む

ただし、

    * 速さと正確さを追求すること
    * コースを1周したら自動的に止まること
    * 交差点では一時停止すること

*メンバー紹介 [#v48511d0]
 しょうご、カズ、マコト

*コース紹介 [#nef8554c]
A2左のコースと同じ

*ロボット紹介 [#a690a204]
 三人で一台のロボットを作りました。
#ref(20100621140444.jpg)
前。重心が前に行き過ぎたのでタイヤをつけて安定するようにした。
#ref(20100621140553.jpg)
横。後ろの羽は特に意味はないです。




*それぞれのプログラムの紹介 [#k258a730]
それぞれ順番に1、2、3となっています。
**しょうごのプログラム [#o8eca2c2]
 #define go OnFwd(OUT_A+OUT_C);                              //前進
 #define turn_right OnFwd(OUT_C);OnRev(OUT_A);Wait(5);    //右曲り  
 #define turn_left OnFwd(OUT_A);OnRev(OUT_C);Wait(5);    //左曲がり
 #define tomaru Off(OUT_A+OUT_C);              //止まる
 #define lstop Float(OUT_A+OUT_C);             //なめらかに止まる
 #define back OnRev(OUT_A+OUT_C);              //後退
 #define turn_leftb OnFwd(OUT_A);OnRev(OUT_C);              //左曲がりfreetime
 #define turn_rightb OnFwd(OUT_C);OnRev(OUT_A);             //右曲がりfreetime


 task main(){
 int s;
  s=0;
 SetSensor(SENSOR_1,SENSOR_LIGHT);                          //光センサー1
 SetSensor(SENSOR_2,SENSOR_TOUCH);                          //タッチセンサー
 SetSensor(SENSOR_3,SENSOR_LIGHT);             //光センサー2
 
 while (s == 3){ 
 
 if(SENSOR_2 == 1){                                         //課題缶をコースに戻す開始
   turn_right;
   turn_rightb;
   until(SENSOR_3>45)
   go;
    Wait(80);
   back;
    Wait(80);
     turn_left;
    turn_leftb;
    until(SENSOR_1>45)                   //課題缶をコースに戻す終了
 Off(OUT_A+OUT_C);
 }
  
 if (SENSOR_1>45 && SENSOR_3>45){             //光センサー1,2が黒の時(前進)
	go;
  }
 
 else if(SENSOR_3>45){                  //光センサー1が黒左に曲がる
	tomaru; 
	turn_left;
 }

 else if(SENSOR_1>45){                  //光センサー3が黒右に曲がる 
	tomaru;
	turn_right;
  }

 else{                          //光センサー1,2が黒(交差点)止まった後前進
	tomaru;
	Wait(200);       
	PlaySound(SOUND_UP) ;  Wait(100);
	go; 
        Wait(40);
         s=s+1;
        }
 
 }
 Off(OUT_A+OUT_C);                    //交差点3つ通過後止まる

 }

 
**カズのプログラム [#bb6424f1]
 #define START OnFwd(OUT_A+OUT_C);                      //前進
 #define STOP Off(OUT_A+OUT_C);                         //停止
 #define BACK OnRev(OUT_A+OUT_C);                       //後退
 #define arm_l OnFwd(OUT_B);Wait(80);Off(OUT_B);        //アームの操作
 #define BORDER 40                                      //閾値
 #define LIGHT OnFwd(OUT_C);                            //左折
 #define RIGHT OnFwd(OUT_A);                            //右折
 #define RECIRCLE OnFwd(OUT_A);OnRev(OUT_C);            //時計回り
 #define CIRCLE OnFwd(OUT_C);OnRev(OUT_A);              //反時計回り


 take main()
 { 
  SetSensor(SENSER_1,SENSER_LIGHT);                     //センサー1を光センサー
  SetSensor(SENSER_2,SENSER_TOUCH);                     //センサー2をタッチセンサー
  SetSenser(SERECIRCLENSER_3,SENSER_LIGHT);             //センサー3を光センサー
    int flat = 0 ;                                       
  while(flat<8){
  if((SENSER_1>BORDER)&&(SENSER_3>BORDER)){
     START;
  }else if((SENSER_1<BORDER)&&(SENSER_3>BORDER)){       //左折
    LIGHT;
  }else if((SENSER_1>BORDER)&&(SENSER_3<BORDER)){       //右折
     RIGHT;
  }else if((SENSER_1<BORDER)&&(SENSER_3<BORDER)){    
     START;  
      flat=flat++;
  }
   

   if(SENSER_2==1){                          //タッチセンサーが反応したら
     STRAT;Wait(80);flat++;
      if(SENSER_1>BORDER){
      if(SENSER_3>BORDER){START;}
       else{RECIRCLE;}  
      }
    else{
    if(SENSER_3>BORDER){CIRCLE;}
  }
  }
   BACK;
   RIGHT;
   START;
   LIGHT;
   START;
   flat++;  
   }
 }

   ClearTimer(0);                             //タイマー0セット
     while(Timer(0)<600){
     if(SENSER_1>BORDER)
          {if(SENSER_3>BORDER){START;}
     else
         {RECIRCLE;}
     else
           {if(SENSER_3>BORDER){CIRCLE;}
     else{START;}
  }
 }
 STOP;
 }
**マコトのプログラム [#y99d2434]
 #define go_front OnFwd(OUT_A+OUT_C);  //前進
#define turn_left(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C); //左折
#define turn_right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);//右折
#define stay Off(OUT_A+OUT_C);//止まる
#define THRESHOLD 40//閾値
task main()
 {
   SetSensor(SENSOR_1,SENSOR_LIGHT);   //センサー1を光センサー
   SetSensor(SENSOR_2,SENSOR_TOUCH);//センサー2をタッチセンサー
   SetSensor(SENSOR_3,SENSOR_LIGHT);   //センサー3を光センサー
   

 while(true)
 {start follow_line;
 int n=0;
 while(n==1){
    if(SENSOR_2==1)
    turn_left(200);
    n++;
 }
 while(n==2){
    if(SENSOR_2==1)
    go_front;
    n--;}
 int turn_count=0;
task follow_line()
 {
 while(turn_count<10){
 go_front;
 until((SENSOR_1<THRESHOLD)||(SENSOR_3<THRESHOLD))
 stay;
 if(SENSOR_1<THRESHOLD){
 OnFwd(OUT_C);OnRev(OUT_A);
 until(SENSOR_1>THRESHOLD)
 stay;}
 if(SENSOR_3<THRESHOLD){
 OnFwd(OUT_A);OnRev(OUT_C);
 until(SENSOR_3>THRESHOLD)
 stay;
 if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)){
 Wait(100);
 turn_count++;
 go_front;
 until((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))
 stay;}
 stay;}
 }
 }


*全体の反省点 [#a3ea6c86]
・偶数回目、奇数回目というのがどうやればいいのか分からずに苦戦した。 マコト &br;
・カンを運ぶプログラムをどのように作ればいいか考えるのに苦労した。 カズ
・カンを運ぶプログラムをどのように作ればいいか考えるのに苦労した。 カズ      &br;
・止まり方を考えるのに苦労した。                  ショウ

*コメント [#lf62dd8b]
#comment
コメントをよろしくお願いします。


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