[[2005/C2/どみ]]
*光を追いかけるロボット [#p27993c0]
#ref(2005/C2/どみ/課題4/kadai4.jpg,100%,光を追う者)
キャタピラのロボットに光センサを2つつけたもの。センサは真正面を向くのではなく、少しずつ左右に開いていて、どちらが懐中電灯を捉えているかを割り出しやすくしてある。

*プログラム [#wf84d1ff]
 #define torch 30						//懐中電灯基準値
 int light_l;
 int light_r;
 
 task main() {
 	SetSensor(SENSOR_1,SENSOR_LIGHT);			//左光センサ
 	SetSensor(SENSOR_3,SENSOR_LIGHT);			//右光センサ
 
 	while (true) {
 		if ((SENSOR_1 < torch)&&(SENSOR_3 < torch)) {	//懐中電灯を見失ったとき
 			if (light_l > light_r) {		//laが大→懐中電灯は左
 			if (light_l > light_r) {		//light_lが大→懐中電灯は左
 				OnFwd(OUT_C);
 				OnRev(OUT_A);			//左回転
 			} else {				//lbが大→懐中電灯は右
 			} else {				//light_rが大→懐中電灯は右
 				OnFwd(OUT_A);
 				OnRev(OUT_C);			//右回転
 			}
 		} else {					//懐中電灯を捉えているとき
 			OnFwd(OUT_A+OUT_C);			//前進
 			light_l = SENSOR_1;			//light_lに左センサの値を代入
 			light_r = SENSOR_3;			//light_rに右センサの値を代入
 		}
 	}
 }
左右どちらかのセンサが懐中電灯を捉えていれば前進する。前進中は、左右のセンサの値を変数light_l・light_rとして保存しており、懐中電灯を見失ったときに両者を比較し、どちらのセンサが懐中電灯を捉えていたのか判別する。それによって懐中電灯が逃げた方向へと回転するようにして、無駄なく懐中電灯を追うことができるようになっている。

*コメントをお願いします [#h6d5a86c]
-まあ『懐中電灯が突然後ろに行ったりする』のは無しにしましょう。もちろん、どちらのセンサもある一定の明るさより暗くなった場合には、少しずつ探すのをやめて、ぐるっと一周するモードに切り替わるようにプログラムを改良することはそれほど難しくはないと思いますが… -- [[松本(教員)]] &new{2006-01-07 (土) 00:03:11};
-プログラムを全く新しいものに変更しました。 -- [[どみ]] &new{2006-01-13 (金) 23:18:38};

#comment



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