2011a

目次

チーム紹介

課題について

指令

交差点、ろたり、近道、直角、急カブがある黒いセンのマップを移動する。

ルール

キットだけを使う。

ロボット紹介

ロボット全体

車輪の部分は課題1のときの車輪をそのまま利用。 センサの部分は極簡単に構成。 <上>

up.jpg

A,Cはそれぞれ左と、右の車輪をうごかします。 1, 3は二個光センサを使います。 ソリョンの場合は1のセンサが道をさがし2のセンサで交差点を探します。 やのすのばあいは1,3のセンサの中に線を挟んで道を探します。

<前>

mae.jpg

センサ前にでっているので先に道の変化をわかるようにしました。

<下>

sita.jpg

本にある基本的な車輪をつかいました。 そしてそこで前の部分にセンサをつけました。

<センサ>

senser.jpg

二つのセンサがある位置をはっきりするため。 やのすの場合は線を挟む必要があります。 センサを線の太さより広く間隔あけてつけました。

概要

問題点

工夫した点と改善点

プログラム紹介

ソリョン

#define THRESHOLD 40// 閾値 40基準に黒いところと明るいところを判別する
task main ()
{
int michi=0;//なんかい交差点に入ったのかを覚えている変数
  int check;//センサ1が黒い線を探すときに必要な変数
   SetSensor(SENSOR_1, SENSOR_LIGHT);//せんさ1をつかう
   SetSensor(SENSOR_3, SENSOR_LIGHT);//せんさ3をつかう
   while (michi<=7) //せんさ1、3が七回め黒い線に入ったときが終わり
 {
   if ((SENSOR_1 < THRESHOLD)&&(SENSOR_3 > THRESHOLD))//センサ1が線のうえ、センサ3が白のうえにあるばあい
         {   
           OnFwd(OUT_A+OUT_C); //前に移動する          
         } 
  
       if ((SENSOR_1 < THRESHOLD)&&(SENSOR_3 < THRESHOLD))//せんさ1、3が同時に黒い線に入るとイベント発生
         {   
		Off(OUT_A+OUT_C);//せんさ1、3が同時に黒い線に入ったと教えてあげた後
              PlaySound(SOUND_UP); //交差点に入ったことを教えってくれる音 
		  Wait(150);
		if(michi==2)  //michi2のばあいはロタリに入ったのでロタリ通過プログラム発動
	        {//すなわちロタリ左にいくため左にちょっとだけ回る 
			
			Off(OUT_A+OUT_C);
			Wait(10);
	
			OnFwd(OUT_C); 	
			OnRev(OUT_A); 
			Wait(25);
			Off(OUT_A+OUT_C);		
		}
		if(michi==4) //michi4のばあいは近道に入ったので近道通過プログラム発動
	        {//この部分は完全に入力されたプログラムで動く
			OnFwd(OUT_A+OUT_C);
                    Wait(30); 	
			OnRev(OUT_C); 
			Wait(120);
			OnFwd(OUT_C);
			Wait(200);
			OnRev(OUT_C);
			Wait(140);
			Off(OUT_A+OUT_C);	
		}
		if(michi==5)//michi5のばあいはまたロタリに入ったのでロタリ通過プログラム発動
	        {//すなわちロタリ左にいくため左にちょっとだけ回る 
			Off(OUT_A+OUT_C);
			Wait(10);
	
			OnFwd(OUT_C); 	
			OnRev(OUT_A); 
			Wait(25);
			Off(OUT_A+OUT_C);	
		}
		OnFwd(OUT_A+OUT_C);//得に何でもない交差点はそのまま通過する
		Wait(35);
		Off(OUT_A+OUT_C);	
       	michi=michi+1;  //交差点を通過したので交差点カウンタ michiは+1
         } 
           if (SENSOR_1 > THRESHOLD)//黒い線をさがすための部分、センサ1が線からはなれて白い部分に入ると
         {   	    
          check=1;
	ClearTimer(0);
	    while((Timer(0)<=5)&&(check))//まず黒線を探すため右にまがる 、Timerを使って一定時間移動
              {	
		OnFwd(OUT_A);              
            OnRev(OUT_C);
            
              if(SENSOR_1 < THRESHOLD) //探したらcheck=0になって線探し中止
                     {check=0;}			
            }//while
		
		 if(check==1)
		{ClearTimer(0);
		     while((Timer(0)<=10)&&(check))//もし右に回るとき探さなかったら、左に回る
          		    {	
				OnFwd(OUT_C);              //migini chotto magate michi wo sagasu
           	             OnRev(OUT_A);
           		      if(SENSOR_1 < THRESHOLD)
                	      {check=0;}	
          		  }//while
		}
         }//if   
 }
 Off(OUT_A+OUT_C);//得に指定されてない交差点はそのまま通過する。
PlaySound(SOUND_UP);//終了を教えてくれる音
		  Wait(150);
PlaySound(SOUND_UP);
		  Wait(150);
PlaySound(SOUND_UP);
		  Wait(150);
}

ヤスノ

#define THRESHOLD 40  // 閾値

task main ()
{   
  int rcx=0;  //何回、交差点に入ったのかを覚えている変数
  int check;  //センサが黒線を探すときに必要な変数
  SetSensor(SENSOR_1, SENSOR_LIGHT); //センサ1に光センサを使う
  SetSensor(SENSOR_3, SENSOR_LIGHT); //センサ3に光センサを使う
while (rcx<=5)  //五回目にセンサ1、2が黒線にかかった時、終わり
{
       if ((SENSOR_1 >= THRESHOLD)&&(SENSOR_3 >= THRESHOLD)) // 黒線上から外れている時  
       {
           OnFwd(OUT_A+OUT_C);
        } 
  else if ((SENSOR_1 < THRESHOLD)&&(SENSOR_3 > THRESHOLD))  // センサ1が黒線上の時      
       {                
           OnRev(OUT_A);
           OnFwd(OUT_C);
        }
  else if ((SENSOR_1 > THRESHOLD)&&(SENSOR_3 < THRESHOLD))  // センサ3が黒線上の時      
       {
           OnRev(OUT_C);
           OnFwd(OUT_A);
        }
  else if((SENSOR_1 < THRESHOLD)&&(SENSOR_3 < THRESHOLD))  //センサ1センサ3がどちらも黒線上の時
         {
           PlaySound(SOUND_UP);Wait(150);
           if(rcx==1){
            OnFwd(OUT_A);
            OnFwd(OUT_C);}
           if(rcx==2){
            OnFwd(OUT_A);
            OnFwd(OUT_C);} 
           if(rcx==3)  //ロータリーに入った
            {
            Off(OUT_A+OUT_C);
            Wait(20);
            OnRev(OUT_A);
            OnFwd(OUT_C);
            Wait(30);
            OnFwd(OUT_A+OUT_C);
            Wait(150);
            OnRev(OUT_A);
            OnFwd(OUT_C);
            Wait(30);
            OnFwd(OUT_A+OUT_C);}
           if(rcx==4)  //二回目のロータリーに入った
            {    
            Off(OUT_A+OUT_C);
            Wait(20);
            OnRev(OUT_A);
            OnFwd(OUT_C);
            Wait(30);
            OnFwd(OUT_A+OUT_C);
            Wait(150);
            OnRev(OUT_A);
            OnFwd(OUT_C);
            Wait(30);
            OnFwd(OUT_A+OUT_C);}
           if(rcx==5) //終わり
            {  
            Off(OUT_A+OUT_C);
            }
         }
             }
 }

まとめ

まとめ

<プログラムの図解>

map.jpg
青い矢印の部分は黒い線を次のプログラムで
SENSOR_1がくろいせんの上にあってSENSOR_3が白い部分にあった場合そのまま先進します。
そおでSENSOR_1が黒い線から離れたとき、ひだり、みぎ両方1秒づつ回りながら黒い線をさがします。
赤い矢印は他にSENSOR_1と、SENSOR_3が同時に黒い部分にはいるところで決まった動きどうりにうごきます。

コメント

     

  


添付ファイル: fileup.jpg 256件 [詳細] filesita.jpg 263件 [詳細] filesenser.jpg 307件 [詳細] filemap.jpg 288件 [詳細] filemae.jpg 297件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-07-29 (金) 17:50:54