#contents

*このページについて [#a0bc2ad2]
 このページは課題3の「ロボット」と「プログラム」紹介のページです。&br;

*課題 [#n83ba5be]
-懐中電灯などの光源を用意する。まず明るさに比例した周波数の音を出しながら全方角の中から光源のある方角を探し、探した後は、光源の光を追いかけて進むロボットを作成せよ。

-ただし支給されているモータ、光センサ、タッチセンサはいくつ使ってもよい。

*ロボット紹介 [#c514da91]
 ここでは制作したロボットの写真と各部の説明を行っています。
**ロボットの写真 [#b1a38216]
1,側面&ref(P1000003.JPG);
2,前面&ref(4.jpg);
光センサーを2個使ったロボットを制作した。&br;
*プログラムの紹介 [#d0e7959e]
 /*Serch Light program*/
 
 #define TURN_T 430  //ロボットが回転して光を探す時間4.3秒
 
 void move(int i){   /*ロボットの動きを変数(i)で定義*/
	switch(i){
	case 0:                                //move(1)の時、停止
		Off(OUT_A+ OUT_C);break;
	case 1:                                //move(2)の時、前進
		OnFwd(OUT_A+ OUT_C);break;
	case 3:                                //move(3)の時、右回転
		OnFwd(OUT_A);
		OnRev(OUT_C);break;
	case 4:                                //move(4)の時、左回転
		OnFwd(OUT_C);
		OnRev(OUT_A);break;
	}
 }
 
 void play_music(int light_p){  /*光の強度に合わせて音を鳴らす*/
	PlayTone(light_p,2);
	Wait(2);
 }
 
 task main(){ /*メインプログラム*/
 
	SetSensor(SENSOR_1,SENSOR_LIGHT);  //センサー1を光センサーとして定義	
	SetSensor(SENSOR_3,SENSOR_LIGHT);  //センサー3を光センサーとして定義
	int light_max = 0;		    //回転中の光強度の最大値を入れる変数
	int time_max = 0;                   //回転中の光強度が最大値だった時間を入れる変数
	
	ClearTimer(0);             //タイマーの初期化
 
	move(3);                   //4.3秒間右回転して、最も明るい位置を探す
	while(FastTimer(0) < TURN_T){
		play_music((SENSOR_1-24)*100);  //光強度に比例した音を鳴らす
		if(SENSOR_1 > light_max){        //光強度が最大だったときの時間をtime_maxに代入
			light_max = SENSOR_1;
			time_max = FastTimer(0);
		}
	}
	move(0);           //止まる
	move(4);           //左回りで光強度が最大だった位置にもどる
	Wait(TURN_T - time_max);
	while(true){       //光を追うプログラム開始
	move(1);           //0.5秒直進する
	Wait(50);        
		if(SENSOR_1+3 < SENSOR_3){     //もし、右側のセンサーが明るければ、左右のセンサーが同じ明るさになるまで右回転
			move(3);
			until(SENSOR_1 > SENSOR_3);
		}	
		if(SENSOR_3+3 < SENSOR_1){     //もし、左側のセンサーが明るければ、左右のセンサーが同じ明るさになるまで左回転
			move(4);
			until(SENSOR_1 < SENSOR_3);
		}
	}
 }
 

*苦労した点 [#q1f03546]
-光の強度に比例した高さの音を鳴らすのに苦労した。光の強度が変わったことを明確に知るために、光の強度の変化に対する音程の変化は、できるだけ大きくしたい。しかし、センサーの強度は暗闇で25〜27、光を当てても65くらいであるので、センサー強度に定数aを掛けて、音の周波数にすると、25*a以下と65*a以上の周波数領域が使用されないことになる。特に、人間の耳は低い周波数の変化に対して敏感なので、25*aの周波数領域を使用することは重要である。そのため、[周波数]=([センサー強度] - [24])*[定数a]とすることで、低い周波数帯を有効に活用できるようになり、暗い場所と明るい場所での音の差がはっきりわかるようになった。

**改善点 [#c65d9910]
-初め、光センサー1つで光を追うロボットを制作した。[写真3]しかし、センサーが一つだけの場合、光を追うのにセンサー(ひいてはロボット自体)を左右に振り、光の強度が最も高い点を探さなければならない。そこで、光センサーを2つ使ったロボットを制作した。[写真4]&br;
&size(20){3,改良前};&ref(P1000005.JPG);
&size(20){4,改良後};&ref(6.jpg);
*感想(反省など) [#t3c0a84c]
-変数を使うことで、ロボットのプログラミングの幅が広がった。
-光センサーをを2個使うことで、光を探す無駄な動きとその動きをさせるプログラムを減らすことができた。

**個人のページへ [#ca14d8ea]
・[[2006b/A4/a4r]]

**ご自由にコメントをどうぞ [#xfd9e8d4]
-周波数に比例した音を人間が聞き取りやすいように、なかなかうまく工夫されていますね。 -- [[松本(教員)]] &new{2007-01-17 (水) 16:19:14};

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS