もくじ
各チームで作成したコースを1周するロボットを製作せよ。交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。
1.空き缶をコース上に戻して再びコースに戻って進む
2.空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに
沿って進む
缶をしっかりとつかめるように、ブロックを増やして頑丈にしました。
とても雄々しく猛々しいアームですね。
黒線を挟む形にしました。間隔が広過ぎたため、カーブを曲がりきれません・・・。
そこで、光センサーの間隔を狭めに改良。
アームをスムーズに動かすために、タイヤを付けました。
タイヤの重さによりゆっくりと動くようになりました (ごつくなりました^_^; )。
雄々しいタイヤですね。
#define up OnFwd(OUT_B); //アームを上げる #define down OnRev(OUT_B); //アームを下げる #define turn OnFwd(OUT_A);OnRev(OUT_C);Wait(122);Off(OUT_A+OUT_C); //180°回転 #define go OnFwd(OUT_A+OUT_C); //直進 #define THRESHOLD 40 //闘値を40に設定
task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサーを1にセット SetSensor(SENSOR_2,SENSOR_TOUCH); //タッチセンサーを2にセット SetSensor(SENSOR_3,SENSOR_LIGHT); //光センサーを3にセット start line_trace; while (true) { start line_trace; //ライントレースを始める until(SENSOR_2 == 1); //タッチセンサーが反応すると stop line_trace; //ライントレースをやめる {Off(OUT_A+OUT_C); //いったん停止 down;Wait(60);Off(OUT_B); //アームを下げる turn; //180°回転 up;Wait(60);Off(OUT_B); //アームを上げる turn; //180°回転 } } } task line_trace() {go; while (true) { if((SENSOR_1<THRESHOLD)&&( SENSOR_3<THRESHOLD))//センサ−1と3が黒線上にきたら1.0秒止まってから直進する {Off(OUT_A+OUT_C);Wait(100);go;Wait(100);} if(SENSOR_1<THRESHOLD)//センサー1が黒線上にきたら {OnFwd(OUT_C);OnRev(OUT_A);//左へ曲がる } if(SENSOR_3<THRESHOLD)//センサー3が黒線上にきたら {OnFwd(OUT_A);OnRev(OUT_C);}//右へ曲がる if((SENSOR_1>THRESHOLD)&&( SENSOR_3>THRESHOLD)) {go;}
}
}
アキカンを見つけたら交叉点まで連れていくプログラム
#define MIGI SENSOR_1 #define HIDARI SENSOR_3 #define HANIKAMI SENSOR_2 #define Shusei Wait(5) // #define Huriorosi OnFwd(OUT_B);Wait(60); //アームふりおろし sub Kaihou() //アキカンを交差点に置いていく一連の動作 { OnFwd(OUT_A+OUT_C);Wait(60); Off(OUT_A+OUT_C); OnFwd(OUT_A);OnRev(OUT_C);Wait(120); OnRev(OUT_B);Wait(60); OnRev(OUT_A+OUT_C);Wait(120); Off(OUT_A+OUT_C);OnFwd(OUT_A);OnRev(OUT_C); } task main () { SetSensor(MIGI,SENSOR_LIGHT); // 右光センサー SetSensor(HIDARI,SENSOR_LIGHT); // 左光センサー SetSensor(HANIKAMI,SENSOR_TOUCH); // タッチセンサー while (true) { OnFwd(OUT_A+OUT_C); //前進 if (MIGI < 50 && HIDARI < 50) //黒線を横切ろうとしたならば { OnFwd(OUT_A+OUT_C);Wait(60); //マシンを少し直進させて完全に黒線を越える } if (HIDARI < 5) //もしも左センサーが黒線に乗っているならば { Float(OUT_A);Shusei //右に若干方向修正 } if (MIGI < 5 ) //もしも右センサーが黒線に乗っているならば { Float(OUT_C);Shusei //左に若干方向修正 } if (HANIKAMI == 1 ) //もしも前部にアキカンがぶつかっているならば { Huriorosi //それを捕まえる start Prince(); //「プリンス」実行 } } sub Prince() //アキカンを持っているときの諸動作 while (true) { if (MIGI < 5 && HIDARI < 5 && HANIKAMI == 1 ) //もしも黒線を横切ろうとしたならば { Kaihou } if (HIDARI < 5) //もしも左センサーが黒線に乗っているならば { Float(OUT_A);Shusei //右に若干方向修正 } if (MIGI < 5 ) //もしも右センサーが黒線に乗っているならば { Float(OUT_C);Shusei //左に若干方向修正 } }
前回よりも難しかった。缶をどう動かすか考えるのが大変だった。
もっとマシンをオリジナリティ全開に仕上げたかった。発想力を高めて、次の課題では夢のロボットを造りたい。
コメントをどうぞ