[[2014b/Member]]

#contents

*課題 [#kdc33ae8]

線を沿って行くロボットで指定されたコースで指令を完了する

*作ったロボット [#d2b4c1bf]
#ref(2014b/Member/ArisiaT/Mission2/2.jpg,30%,Fullshot)

Referenceのロボットの通りに作った。
基本であるため説明は省略する。


**工夫 [#v0a7df71]
#ref(2014b/Member/ArisiaT/Mission2/1.jpg,30%,Fullshot)
光の反射、また光の明るさによって、影響を受け安いのが実際のところ発見された
そこで、光量の影響を避けるためにセンサーのあたりに影ができるようにした。



*Program [#b3597000]

 #define DO 523
 #define RE 587
 #define MI 659
 #define PA 698
 #define SOL 784
 #define THRESHOLD 55
 #define SPD_H 50
 #define SPD_L 25
 #define OnRL(spdR,spdL) OnFwd(OUT_B,spdR);OnFwd(OUT_C,spdL);
 #define GOFWD OnRL(SPD_H,SPD_H);
 #define L1 OnRL(SPD_L,-SPD_L);
 #define L0 OnRL(SPD_L,0);
 #define R0 OnRL(0,SPD_L);
 #define R1 OnRL(-SPD_L,SPD_L);
 #define STEP 1
 #define nMAX 500
 #define short_BRK Off(OUT_BC);Wait(1000);
 #define CRS_T 200
 
 #define CRS_LINE OnRL(SPD_L,SPD_L);Wait(CRS_T);short_BRK;
 
 void CRSway(int Count)  // program for crossway
 {
 
 PlayTone(SOL,1);
 short_BRK;
 R1;
 Wait(0.5*STEP*nMAX);
 
 if(Count==1) //turn left
 {PlayTone(DO,1);
 OnFwd(OUT_B,50);
 OnRev(OUT_C,20);
 Wait(500);
 Off(OUT_BC);}
 
 else if(Count==2) //turn right
 {PlayTone(RE,1);
 OnFwd(OUT_BC,30);
 Wait(300);
 OnFwd(OUT_C,50);
 OnRev(OUT_B,50);
 Wait(300);
 Off(OUT_BC);}
 
 else if(Count==3) //turn left
 {PlayTone(MI,1);
 OnFwd(OUT_B,50);
 OnRev(OUT_C,20);
 Wait(500);
 Off(OUT_BC);}
 
 else if(Count==4) // go front
 {PlayTone(PA,1);
 OnFwd(OUT_BC,50);
 Wait(800);
 Off(OUT_BC);}
 
 else if(Count==5)
 {PlayTone(SOL,1);
 OnFwd(OUT_BC,50);
 Wait(800);
 Off(OUT_BC);}
 
 
 }
 
 
 task main()
 {
   	int CrossCount=0;
  	SetSensorLight(S3);
  	int nOnline=0;
 	
 	while(true){
 		while(nOnline<nMAX){
 		
 			if(SENSOR_3<THRESHOLD-15)
 				{L1;
 				nOnline=nOnline+2;}
 			
 			else{
 				if(SENSOR_3<THRESHOLD-5)
 					{L0;
 					nOnline++;}
 				
 				else if(SENSOR_3<THRESHOLD+5)
 					{GOFWD;}
 				
 				else if(SENSOR_3<THRESHOLD+15)
 					{R0;}
 				
 				else{R1;}
 				nOnline=0;}
 			Wait(STEP);
 		  	}
 		  	
 		CrossCount++;
 		CRSway(CrossCount);
 		nOnline=0;
 		}
           	
 }

*プログラム組み方 [#j86e0302]
交差点判断のreferenceがあまりにも優秀であったため、交差点で直進するロボットで直線の部分を構造体に変わり、交差点に入ったらCrossCountで何回目か確認した後、CRSwayという交差点命令構造体に送り、何回かの変数により決められいた動作をする。だけで解決した。


もちろん速度、長さ、距離、時間などによって変化する値は全部やってみながら調節した。

また、何回目の交差点かによって、違う音が動作前になり、動作をわかりやすくした。


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