課題

指定された経路を黒い線にそって動くロボットを作成する。

そして、途中のP地点とQ地点の間においたピンポン玉を 目的地まで運んで、ゴールに入れる。その途中で三叉路および交差点では2秒間停止する。

ロボットの説明

kikai1.jpg kikai2.jpg

モーターは左右のタイヤに二つとピンポン玉を運ぶためのアームの上げ下げ用に一つ使いました。

光センサーはロボットができるだけ滑らかに動いてもらうためにできる限りロボット本体の近くに取り付けました。

はじめはアームを取り付けずにそのままピンポン玉を運ぼうとしたが、運んでいく過程でピンポン玉が転がってしまうのでアームを取り付けてピンポン玉が転がっていかないようにしました。

プログラムの説明1

定義文

#define THRESHOLD 42
#define go_forward OnFwd(OUT_A);OnFwd(OUT_C); // 直進
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);   // 左旋回
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);  // 右旋回
#define STEP 1   // 1回の判断で動作させる時間
#define down OnFwd(OUT_B);Wait(15);Off(OUT_B);//アームを下げる
#define up OnRev(OUT_B);Wait(15);Off(OUT_B);//アームを上げる

作成したプログラム

task main()
{
   
   SetSensor(SENSOR_2,SENSOR_LIGHT);
  ClearTimer(0);
   
 
 while (FastTimer(0)<1600){                   //
        
            
           if (SENSOR_2 < THRESHOLD-3) {
               turn_left;
               
           } else {
               if (SENSOR_2 < THRESHOLD+3) {
                   go_forward;
               } else {
                   turn_right;
                   }
}
}
    
ClearTimer(0);
       while (FastTimer(0)< 17) {      //
          
           if (SENSOR_2 < THRESHOLD-3) {
               turn_left;
           } else {
               if (SENSOR_2 < THRESHOLD+3) {
                   go_forward;
               } else {
                   turn_right;
                   }
               ClearTimer(0);// カウンタをリセット
              }
           Wait(STEP);
        }
       PlaySound(SOUND_DOWN);
       Off(OUT_AC);Wait(200);
       turn_right;Wait(25);  // 進行方向修正
       go_forward;Wait(18);
       down;
  ClearTimer(0);
   
while (FastTimer(0)<1100){        //
        
             
           if (SENSOR_2 < THRESHOLD-3) {
               turn_left;
               
           } else {
               if (SENSOR_2 < THRESHOLD+3) {
                   go_forward;
               } else {
                   turn_right;
                   }
   
        }
}
 ClearTimer(0);
       while (FastTimer(0)< 20) {      //
          
           if (SENSOR_2 < THRESHOLD-3) {
               turn_left;
           } else {
               if (SENSOR_2 < THRESHOLD+3) {
                   go_forward;
               } else {
                   turn_right;
                   }
               ClearTimer(0);// カウンタをリセット
              }
        Wait(STEP);
        }
       PlaySound(SOUND_DOWN);
       Off(OUT_AC);Wait(200);
       turn_right;Wait(20);  // 進行方向修正
       go_forward;Wait(15);
	ClearTimer(0);
	    
	    
	while (FastTimer(0)<700){       //
	         
	              
	            if (SENSOR_2 < THRESHOLD-3) {
	                turn_left;
	                
	            } else {
	                if (SENSOR_2 < THRESHOLD+3) {
	                    go_forward;
	                } else {
	                    turn_right;
	                    }
   
      }
}
turn_right;Wait(20);
up;
go_forward;Wait(100);
Off(OUT_AC);
}

ロボットの進み方

ko-su1.jpg ko-su2.jpg

AからBまでは左上の写真の赤い矢印の方向に進んでいく。

右上の写真より、

,寮屬だのところは交差点判断をしないでライントレースをするだけにしました。

△領仗Г寮のところは交差点を判断すようにしました。そして交差点の判断をした後アームを下げてピンポン玉を運ぶようにしました。

の青い線のところも交差点判断をしないでライントレースをするだけにしました。

い硫色の線のところは交差点を判断すようにしました。

イ離團鵐の線のところは交差点判断をしないでライントレースをするだけにしました。そして最後にアームを上げてピンポン玉をゴールに転がしました。

問題点

.蹈椒奪箸鯑阿す部屋の明るさによって進む時間が変わる。

▲蹈椒奪箸ピンポン玉を取るときと取らない時がある。

最後にピンポン玉があまり転がらない。

解決法

,修療堙抻間を測って時間をいじる。

何回もやってピンポン玉を置くところを調節する。

紙の折り目をきれいにし紙を平らにする。

プログラムの説明2 (タイマーだけではないやつ)

定義文

#define THRESHOLD 43
#define go_forward OnFwd(OUT_AC); // 直進
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);   // 左旋回
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);  // 右旋回
#define STEP 1   // 1回の判断で動作させる時間
#define shoot OnRev(OUT_B);Wait(30);Off(OUT_B);

作成したプログラム

task main()
{
   SetSensor(SENSOR_2,SENSOR_LIGHT);
   int black=0; // 続けて黒になった回数 (カウンタ)SetSensor(SENSOR_2,SENSOR_LIGHT);
	ClearTimer(0);    
	while (FastTimer(0)<1800){         
	            if (SENSOR_2 < THRESHOLD-3) {
	                turn_left     
	            } else {
	                if (SENSOR_2 < THRESHOLD+3) {
	                    go_forward;
	                } else {
	                    turn_right;
	                    }
      }
}
down;
       while (black < 10)     
      {
           if (SENSOR_2 < THRESHOLD-5)      
            {
                  turn_right;
                  black++;        // カウンタを増やす   
            }
           else if (SENSOR_2 < THRESHOLD+5) {
                   go_forward;
                   black=0;          }
           else {                 
                   turn_left;     
                   black=0;  // カウンタをリセット
                    }              
      }
      Off(OUT_AC);Wait(200);
       OnFwd(OUT_AC);Wait(20);
       ClearTimer(0);
      while (FastTimer(0)<500)
        {
           if (SENSOR_2 < THRESHOLD-5)      
            {
                  turn_right;
            }
           else if (SENSOR_2 < THRESHOLD+5) {
                   go_forward;
                   black=0;           }
           else {                 
                   turn_left;     
                     }              
      }
        Off(OUT_AC);Wait(100);
         shoot;
}

ロボットの進み方

交差点の判断を一回少なくするために右側をライントレースするようにしました。

また、シュートはアームを一回たんさせてシュートするようにしました。

まとめ・感想

わからないところは先生に聞いたり、友達に相談をするなどして頑張ってプログラムを完成させました。

部屋の明るさによって進む時間が違ったり、ピンポン玉を取れるときと取れない時があるので何回もロボットを動かしたのでたいへんでした。


添付ファイル: fileko-su2.jpg 71件 [詳細] fileko-su1.jpg 77件 [詳細] filekikai01.jpg 34件 [詳細] fileko-su.jpg 37件 [詳細] filekikai2.jpg 104件 [詳細] filekikai1.jpg 84件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-08-01 (土) 09:39:29 (1481d)