A11L メンバー ダークホース ライス バビロン
車輪は基本的に最初に作ったものに改良を加えたもの。
最初に作ったロボットはなかなか小回りが利くため今回の課題にはもってこいだった。
またセンサーを組み込みやすかったため比較的はやくロボットを完成させられた。
シングルバンパーを作成し、その先にアームを取り付けることにした。
アームによって牛乳パックをキャッチし、運ぶことにしたがしかし、運ぼうと思っても牛乳パックが出てしまうことに気がつき改良を加えた。G型にすることにより、左旋回では出ないようになった、なので右旋回はできない。
結果、いい感じに牛乳パックをキャッチできるようになった。
最初はかなり悩んだが、先端につけると重心が前になってしまうためタッチセンサーアームより後ろにつけることにした。
センサー間を狭くすることによって、正確なライントレースが可能になった。
完成したがクワガタになった。
なかなかの出来ではないだろうか。
コース1
交差点:3
紙の端や交差点が狭い。
制作者:ダークホース
定数・マクロの指定
#define T 40 //闘値を40に設定 #define Run_time 1500 //Run_timeを150秒に設定 #define a OUT_A //OUT_Aをaと定義 #define c OUT_C //OUT_Cをcと定義 #define go_s(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //直進 #define go_b(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //後退 #define t_l(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C); //左旋回 #define t_r(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C); //右旋回
メインプログラム
task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサーを1にセットする。 SetSensor(SENSOR_2,SENSOR_TOUCH); //タッチセンサーを2にセットする。 SetSensor(SENSOR_3,SENSOR_LIGHT); //光センサーを3にセットする。 ClearTimer(0); while(Timer(0) <= Run_time){ //150秒たったら止まるループ if(SENSOR_1>T){ //光センサが2個とも白紙上にあるとき、直進 if(SENSOR_3>T){ OnFwd(a+c); } else{ if(SENSOR_1>T){ //左だけ白紙上にあるとき、右にターン OnFwd(a); Off(c); } } } else{ if(SENSOR_3>T){ //右だけ白紙上にあるとき、左にターン OnFwd(c); Off(a); } else{ //両方線上にあるとき 1.0秒止まりし、1.0秒前進する。 Off(a+c); Wait(100); OnFwd(a+c); Wait(100); } } if(SENSOR_2 == 1); //タッチセンサーのが押されるか判断 go_s(50); //押されたら、0,5秒進み t_l(90); //左に180度旋回 go_b(50); //0,5下がり、牛乳パックをおく t_l(90); //左に180度旋回 }
制作者:バビロン
定数・マクロの指定
#define BORDER 40 //闘値を40に設定 int x=0; //変数Xを定義
メインプログラム
task main () { SetSensor ( SENSOR_1, SENSOR_LIGHT ); //光センサーを1にセットする。 SetSensor ( SENSOR_2, SENSOR_TOUCH ); //タッチセンサーを2にセットする。 SetSensor ( SENSOR_3, SENSOR_LIGHT ); //光センサーを3にセットする。 while (x < 3); //xが3になるまで下のプログラムをつづける if ( SENSOR_2 == 1 ){ //タッチセンサーが押されたとき OnRev(OUT_A+OUT_C); //バック Wait(50); Off(OUT_A+OUT_C); OnFwd(OUT_A); OnRev(OUT_C); //右を向く Wait(90); OnFwd(OUT_A+OUT_C);//直進 Wait(100); OnFwd(OUT_C); OnRev(OUT_A); //左を向く(コースに平行) Wait(90); OnFwd(OUT_A+OUT_C); //直進 Wait(100); OnFwd(OUT_C); //左を向く OnRev(OUT_A); Wait(90); OnFwd(OUT_A+OUT_C);//直進 この時点でパックの向こう側にいる Wait(100); OnFwd(OUT_A); //右を向く(コースの先に) OnRev(OUT_C); Wait(90); x=x+1; //xに+1する } else{ //ライントレース if ( SENSOR_1 > BORDER ){ if ( SENSOR_3> BORDER ){ OnFwd(OUT_A+OUT_C); } else { OnFwd(OUT_A); Off(OUT_C); } } else { if ( SENSOR_3> BORDER ){ Off(OUT_A); OnFwd(OUT_C); } } } }
制作者:ライス
#define THRESHOLD 44 int a; task main () { a=0; SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサーを1にセットする。 SetSensor(SENSOR_2,SENSOR_TOUCH); //タッチセンサーを2にセットする。 SetSensor(SENSOR_3,SENSOR_LIGHT); //光センサーを3にセットする。 while (a<20){ //aが20=三周するまで以下の動作をする if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)) //光センサーが両方黒を感知した=交差点にきたとき { if((a==0)||(a==2)||(a==4)||(a==6)||(a==8)|| (a==10)||(a==12)||(a==14)||(a==16)||(a==18)) //aが偶数の時 { Off(OUT_A+OUT_C); Wait(100); OnFwd(OUT_A+OUT_C); Wait(50); OnFwd(OUT_A); //右に曲がる OnRev(OUT_C); Wait(95); OnFwd(OUT_A+OUT_C); Wait(35); a=a+1; } else{ //それ以外=aが奇数の時 Off(OUT_A+OUT_C); Wait(105); OnFwd(OUT_A+OUT_C); Wait(50); OnFwd(OUT_C); //左に曲がる OnRev(OUT_A); Wait(100); OnFwd(OUT_A+OUT_C); Wait(40); a=a+1; } //一度、以上のどちらかの動作を行ったらaに+1している if (SENSOR_1>THRESHOLD){ //通常ライントレース、他の人とほぼ同じなので説明は省く。 OnFwd(OUT_A); OnRev(OUT_C); } if(SENSOR_3>THRESHOLD){ OnRev(OUT_A); OnFwd(OUT_C); } } Off(OUT_A+OUT_C); }
今回の課題は例年に比べ難しかったと思う。 高校のころにマイコンカーをやっていてライントレースはやっていたが、まったく違う内容だった。まず、牛乳パックをいかに動かすかというところが難しかった。またプログラムもなかなか難しかった。