[[ロボティクス入門ゼミ]]
*課題2 黒線をなぞるロボ [#g369d91d]

**コース [#gce935a2]

コースは走りやすく、単純なコースにしました。


#ref(2012a/A3/kinkma/M2/IMG_0004.JPG,50%,画像の説明)


十字路×2


直角カーブ×1


ヘアピンカーブ×1


以上!!非常にシンプルなコースです。


**本体説明 [#ke583faa]

今回は黒線をなぞることが課題だったので、できるだけコンパクトに小回りの利く形を意識しました。


それで出来上がったのが写真のロボです。


#ref(2012a/A3/kinkma/M2/IMG_0005.JPG,50%,画像の説明)


しかしセンサーの位置が非常に悪く、トレースすべき黒線の発見がかなり遅れるといったなんとも残念な結果になってしまいました。


#ref(2012a/A3/kinkma/M2/説明図01.png,80%,画像の説明)


このあと何回もセンサーの位置を調整し、写真の位置になりました。


#ref(2012a/A3/kinkma/M2/IMG_0006.JPG,50%,画像の説明)


#ref(2012a/A3/kinkma/M2/説明図02.png,80%,画像の説明)


こうすることで黒線の発見が早くなり、はみ出してもすぐに戻ることに成功しました。


脱出用の進路の取り方です。プログラムでオフを入れているのはいったん動作を停止させ、そのままライントレースを続けさせないためです。(オフを入れてないとたまにとまってしまう)

#ref(2012a/A3/kinkma/M2/説明図04.png,80%,画像の説明)


出来上がった機体の全体像です。


#ref(2012a/A3/kinkma/M2/IMG_0009.JPG,50%,画像の説明)


機体構成がシンプルすぎたので、大量にパーツが余ってしまいました…。



とりあえず余ったパーツで動物?っぽい頭取り付けました。


#ref(2012a/A3/kinkma/M2/IMG_0011.JPG,50%,画像の説明)


もちろん顎は動きます。目も光ります。


#ref(2012a/A3/kinkma/M2/IMG_0013.JPG,50%,画像の説明)


小さいころレゴで遊んでいたので、遊び心が刺激されただけで特に目が光るだけで火を噴いたりはしません。

*プログラム [#z5bce670]

  
#define THRESHOLD 45
#define THRESHOLD_1 51
#define RUN_TIME_1 50
#define RUN_TIME_2 100

task main()

{
	SetSensor(SENSOR_1,SENSOR_LIGHT);
	SetSensorLight(IN_1);
	long time1,timeA;
	time1 = CurrentTick(); //time1スタート
		
	while(timeA < 63000) //time1が63秒以内ならばwhile内を繰り返し
		{
		timeA = CurrentTick() - time1;
		
		if(SENSOR_1 < THRESHOLD) //黒線の上
			{
			 OnFwd(OUT_C,50);
			 Off(OUT_A);
			}
		if(SENSOR_1 > THRESHOLD) //白の上		
			{
			 OnFwd(OUT_A,50);
			 Off(OUT_C);
			}
		}

	long time2,timeB;
	time2 = CurrentTick(); //time2スタート

	while(1200 >= timeB) //timeBが1.2秒以内ならばwhile内を繰り返し
		{
				timeB = CurrentTick() - time2;
			
				Off(OUT_AC);
                                      Wait(2000);
				OnFwd(OUT_C,80);
				Off(OUT_A);
				Wait(0500);
		}
		
	long time3,timeC;
 	time3 = CurrentTick(); //time3繧ケ繧ソ繝シ繝&#65533;		

	while(10000 >= timeC) //timeCが10秒以内ならばwhile内を繰り返し
		{
			timeC = CurrentTick() - time3;
		
			if(SENSOR_1 < THRESHOLD) //黒線の上
			{
			 OnFwd(OUT_A,50);
			 Off(OUT_C);
			}
			if(SENSOR_1 < THRESHOLD) //白の上
			{
			 OnFwd(OUT_C,50);
			 Off(OUT_A);
			}
		}
	Off(OUT_AC);
}


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