目次 †課題2 ライントレースをするロボット †コース作成の条件 †・四つの出口を作る。 ・交差点を二つ作る。 ・直角カーブを作る。 ・ヘアピンカーブを作る。 この中で特に苦しんだのは直角カーブと交差点でしょうか。 ルール †出口のうちの一つから入り一周半して反対側の出口から出る。 では、それぞれの紹介を始めて行きたいと思います。 コースの紹介 †
このコースでの問題点をあげるなら、 ・直角カーブが100度くらいある。 ・交差点が直行していない。 ・ヘアピンカーブが反り返りすぎている。 ・入り口がT字ではなく横向きのY字などの歪な形 などなど高難易度のコースとなっています。 ロボット紹介 †ロボットは何段階かに分けて進化していっています。 まずはver.1から
ver.1は試作品となっておりとりあえずどのように作るか、 を考えるために組んでおり、すこし脆くなっていたり、センサーが一つしかなかったりします。 プログラム紹介 †#define THRESHOLD 45 //閾値 #define go_st OnFwd(OUT_A+OUT_C); #define go_le1 Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A); #define go_ri1 Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C); #define go_le2 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A); #define go_ri2 SetPower(OUT_A,0); SetPower(OUT_C,2);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C); #define go_le3 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A); #define go_ri3 SetPower(OUT_A,4); SetPower(OUT_C,1);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C); #define t_overa 1170 #define t_overb 1380 #define t_overc 1700 #define t_overd 2750 #define t_overe 3500 #define t_overf 3800 #define t_overg 4700 task main() { ClearTimer(0); //タイマーリセット SetPower(OUT_A,0); SetPower(OUT_C,0); SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); int cross = 0; //両方黒になった 回数をカウント while(true){ //百回きたら止める。 if(SENSOR_1<THRESHOLD&&SENSOR_3<THRESHOLD){ //両方黒線の上に いるとき SetPower(OUT_A,0); SetPower(OUT_C,0); go_st; cross++; //カウントする }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)<=t_overa){ //3だけ黒線の上にあるとき PlaySound(SOUND_CLICK); go_st; Wait(5); SetPower(OUT_A,0); SetPower(OUT_C,4); go_ri1; }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)<=t_overa){ //1だけ黒線の上にある時 PlaySound(SOUND_CLICK); go_st Wait(5); SetPower(OUT_A,4); SetPower(OUT_C,0); go_le1; }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){ //1だけ黒線の上にあるとき PlaySound(SOUND_UP) ; go_ri3; }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){ //3だけ黒線の上にある時 PlaySound(SOUND_UP) ; SetPower(OUT_A,0); SetPower(OUT_C,0); go_le3; }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overb && FastTimer(0)<=t_overc){ //3だけ黒線の上にあるとき PlaySound(SOUND_CLICK); go_st; Wait(5); SetPower(OUT_A,0); SetPower(OUT_C,4); go_ri1; }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overb && FastTimer(0)<=t_overc){ //1だけ黒線の上にある時 PlaySound(SOUND_CLICK); go_st Wait(5); SetPower(OUT_A,4); SetPower(OUT_C,0); go_le1; PlaySound(SOUND_UP) ; }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){ //1だけ黒線の上にあるとき PlaySound(SOUND_UP) ; SetPower(OUT_A,0); SetPower(OUT_C,0); go_ri2; }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){ //3だけ黒線の上にある時 PlaySound(SOUND_UP) ; SetPower(OUT_A,0); SetPower(OUT_C,0); go_le2; }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overd && FastTimer(0)<=t_overe){ //3だけ黒線の上にあるとき PlaySound(SOUND_CLICK); go_st; Wait(5); SetPower(OUT_A,0); SetPower(OUT_C,4); go_ri1; }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overd && FastTimer(0)<=t_overe){ //1だけ黒線の上にある時 PlaySound(SOUND_CLICK); go_st Wait(5); SetPower(OUT_A,4); SetPower(OUT_C,0); go_le1; }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overe && FastTimer(0)<=t_overf){ //1だけ黒線の上にあるとき PlaySound(SOUND_UP) ; SetPower(OUT_A,0); SetPower(OUT_C,0); go_ri2; }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overe && FastTimer(0)<=t_overf){ //3だけ黒線の上にある時 PlaySound(SOUND_UP) ; SetPower(OUT_A,0); SetPower(OUT_C,0); go_le2; }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overf){ //3だけ黒線の上にあるとき PlaySound(SOUND_CLICK); go_st; Wait(5); SetPower(OUT_A,0); SetPower(OUT_C,4); go_ri1; }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overf){ //1だけ黒線の上にある時 PlaySound(SOUND_CLICK); go_st Wait(5); SetPower(OUT_A,4); SetPower(OUT_C,0); go_le1; }else if(SENSOR_1>THRESHOLD && SENSOR_3>THRESHOLD){ //両方黒の外にあるとき SetPower(OUT_A,0); SetPower(OUT_C,0); go_st; } } } |