[[2008b/MemberOnly/進行状況A]]

2008b/A7/課題3右

#hr
CENTER:&size(25){光追跡ロボット};
#hr

CENTER:製作者:タキさ Y田

目次
#contents
-------

*課題についての説明 [#d306895c]
 インストの「top secret」を参考にして、白いホイールを投げるロボットを作成し、
 以下の動きをするようにプログラムを作成せよ。
 (重複しないように一人一つ以上のプログラムを作成すること)
 
    1. 全方向から懐中電灯の方向を探しだし、懐中電灯の手前50cmまで進んで
      懐中電灯を狙ってブロックを投げる。懐中電灯は動かさない。
    2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを
      止めれば50cmの距離まで近づいて懐中電灯を狙ってブロックを投げる。
 
 懐中電灯の代わりに携帯のライトなどを利用してもよい。モータ、光センサ、
 タッチセンサはそれぞれ2個まで使用可。ただし、平面的な方向だけでなく
 懐中電灯の高さまで含めた方向を探す場合にはモータを3個使用してもよい。

*製作したマシン [#e6da836a]

|>|CENTER:COLOR(#808080):''マシン''|
下にある画像が完成したマシンです。
このマシンの製作行程

-------

|>|CENTER:COLOR(#808080):''マシン全体図''|
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/zentai_yoko3.jpg,50%,);| |>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/zentai_ue3.jpg,50%,);|

|>|CENTER:COLOR(#808080):''アーム''|
|>|CENTER:COLOR(#808080):''ブロックを投げるアーム''|
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/aim_light3.jpg,50%,);| |>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/arm_left3.jpg,50%,);|


|>|CENTER:COLOR(#808080):''マシン''|
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/gia3.jpg,50%,);| |>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/stoper3.jpg,50%,);| |>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/kiteibu3.jpg,50%,);|
|>|CENTER:COLOR(#808080):''マシン詳細図''|
|>|CENTER:COLOR(#808080):''ストッパー   ギア   ドライブベース''|
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/stoper3.jpg,50%,);| |>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/gia3.jpg,50%,);| |>|CENTER:COLOR(#808080):&ref(2008b/A7/課題3右/kiteibu3.jpg,50%,);|

*モータ・センサに対応する端子 [#d352300d]
モータ、センサについては以下の端子に接続してあります。
-出力側
 A端子 → モータ:タイヤ(正回転:右回転,逆回転:左回転)
 B端子 → 使用せず
 C端子 → モータ:アーム(正回転:使用せず,逆回転:投げる)

-入力側
 1端子 → 光センサ(右)
 2端子 → 使用せず
 3端子 → 光センサ(左)

*プログラムの紹介 [#n9e8de4f]

Y田製作プログラム(課題1)
 task main(){
 	int  s1, s3;
 	s1 = 0;
 	s3 = 0;
 	SetSensor(SENSOR_1,SENSOR_LIGHT);
 	SetSensor(SENSOR_3,SENSOR_LIGHT); 
 	SetPower(OUT_A,5);
 	OnRev(OUT_A);
 	ClearTimer(0);
 	while(FastTimer(0) <= 500){
 		if(SENSOR_1 > s1)s1 = SENSOR_1;
 		if(SENSOR_3 > s3)s3 = SENSOR_3;
 	}
 	s1 = s1 - 5;
 	s3 = s3 - 5;
 	while(1){
 		if((SENSOR_1 > 75) || (SENSOR_3 > 75)){
 			Off(OUT_A);
 			OnRev(OUT_C);
 			Wait(17);
 			Off(OUT_C);
 			break;
 		}
 		if(SENSOR_1 < s1 && SENSOR_3 >= s3){
 			while(SENSOR_1 < s1)OnFwd(OUT_A);
 		}
 		if(SENSOR_1 >= s1 && SENSOR_3 < s3){
 			while(SENSOR_3 < s3)OnRev(OUT_A);
 		}
 	}
 }	


タキさ製作プログラム(課題2)
 /* 光追跡ロボット */
 
 /* 定数を定義 */
 #define SHI_J 75
 
 void move_fwd(void){
 	OnFwd(OUT_A);
 	Wait(27);
 	OnRev(OUT_A);
 	Wait(20);
 	Off(OUT_A);
 }
 
   
 task main(){
 	int ligth_max, left_max;
 	ligth_max = 0;
 	left_max = 0;
 	
 	SetSensor(SENSOR_1,SENSOR_LIGHT);
 	SetSensor(SENSOR_3,SENSOR_LIGHT); 
 	
 	SetPower(OUT_A,5);
 	
 	OnRev(OUT_A);
 	ClearTimer(0);
 	while(FastTimer(0) <= 500){
 		if(SENSOR_1 > ligth_max)ligth_max = SENSOR_1;
 		if(SENSOR_3 > left_max)left_max = SENSOR_3;
 	}
 	ligth_max = ligth_max - 5;
 	left_max = left_max - 5; 
 	
 	while(1){
 		if((SENSOR_1 > SHI_J) || (SENSOR_3 > SHI_J)){
 			Off(OUT_A);
 			OnRev(OUT_C);
 			Wait(17);
 			Off(OUT_C);
 			break;
 		}
 		
 		if(SENSOR_1 >= ligth_max && SENSOR_3 >= left_max){
 			while((SENSOR_1 >= ligth_max) || (SENSOR_3 >= left_max))move_fwd();
 		}
 		else if(SENSOR_1 < ligth_max && SENSOR_3 >= left_max){
 			while(SENSOR_1 < ligth_max)OnFwd(OUT_A);
 		}
 		else if(SENSOR_1 >= ligth_max && SENSOR_3 < left_max){
 			while(SENSOR_3 < left_max)OnRev(OUT_A);
 		}
 		else if(SENSOR_1 < ligth_max && SENSOR_3 < left_max){
 			while((SENSOR_1 < ligth_max) || (SENSOR_3 < left_max))OnRev(OUT_A);
 		}
 	}
 }	



*工夫した点 [#u55de425]


*製作日誌 [#u1068eb7]

*皆さんのコメント [#g72ad519]
よろしければコメントをどうぞ
- テスト -- [[タキさ]] &new{2009-01-22 (木) 18:30:46};

#comment


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