[[2011a]]

**目次 [#pec07b45]
#contents
*チーム紹介 [#ja2f2090]
-
-ソリョン
*課題について [#d44ad96e]
**指令 [#r73096db]
交差点、ろたり、近道、直角、急カブがある黒いセンのマップを移動する。

**ルール [#paf9dd69]
キットだけを使う。

*ロボット紹介 [#w95a86a4]
**概要 [#y7729e5e]
-見た目より実用性重視!

-なるべく簡単にロボットを作ってプログラムに集中!


**問題点 [#h7d0aba0]
-黒い線をどうやって認識して移動するか。
-二つの光センサの役割をどうするか。
-交差点をどうやって通るか。
-ろたりをどうやって渡るか。
-近道をどうやって認識し利用するか。
-急カブをどうやって通過するか。
-最後にどうやって止まるか。

**工夫した点と改善点 [#bc8307cb]


*プログラム紹介 [#xf289056]
#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);              
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);
}

ソリョン



*まとめ&反省 [#h2772fc9]
**まとめ [#rada20a7]
-
 

-ソリョン
黒い線を追いかけていくためにセンサ1だけをつかいました。
で基本的にせんさ1が黒いところにいて、センサ3は白いところにある時の条件式
if(SENSOR_1 < THRESHOLD)&&(SENSOR_3 > THRESHOLD)使って前に進む用にしました。
またセンサ1が黒いところから離れた場合、if(SENSOR_1 > THRESHOLD)使って黒い線を探すために
Timerを使って一定時間のあいだ右とか左回ってさがせようにせいました。
でセンサ3を使って交差点にif ((SENSOR_1 < THRESHOLD)&&(SENSOR_3 < THRESHOLD))ように
センサ1とセンサ3が同時に入った瞬間をとらえて普通の交差点はそのまま渡ったり、ロタリは
決まった規則で移動したり、近道の方に動けようにしたり、終わりを把握し止まったり
別々に順番に合わせてプログラムをしました。
PlaySound(SOUND_UP)を使って交差点に入ったときと、終わりの時をしらせてくれます。

  <プログラムの図解>




  

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