'''&size(50){もくじ};''' #contents *メンバー [#pe466a45] -キングオブハート -D *課題 [#wcdeb407] 各チームで作成したコースを1周するロボットを製作せよ。交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。 &br; 1.空き缶をコース上に戻して再びコースに戻って進む &br; 2.空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに 沿って進む *ロボット [#x4c576f8] **アーム [#d863a37b] 缶をしっかりとつかめるように、ブロックを増やして頑丈にしました。 #ref(./20100629210055.jpg) #br #ref(./20100629210120.jpg) #br #ref(./20100629210203.jpg) **バンパー [#m86aa161] &ref(./20100701095003.jpg); &ref(./20100701095532.jpg); **光センサー [#v6f8a1e0] #ref(./20100701094854.jpg); 黒線を挟む形にしました。急なカーブがあるので、間隔は少し広めです。 **工夫点 [#fbabbad0] アームをスムーズに動かすために、タイヤを付けました。 &br; タイヤの重さによりゆっくりと動くようになりました (ごつくなりました^_^; )。 #ref(./20100629210320.jpg) *コース [#t972ca7e] *プログラム [#gde31783] **D のプログラム [#w4564e6d] ***空き缶をコース上に戻して再びコースに戻って進むプログラム [#k8abb9a1] #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;} } } **キングオブハートのプログラム [#a28e0ac2] #define MIGI SENSOR_1 #define HIDARI SENDOR_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(????); 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 if (MIGI < 5 && HIDARI < 5) //黒線を横切ろうとしたならば { OnFwd(OUT_A+OUT_C);Wait(????) //マシンを少し直進させて完全に黒線を越える } else if (HIDARI < 5) //もしも左センサーが黒線に乗っているならば { Float(OUT_A);Shusei //右に若干方向修正 } else if (MIGI < 5 ) //もしも右センサーが黒線に乗っているならば { Float(OUT_C);Shusei //左に若干方向修正 } else if (HANIKAMI == 1 ) //もしも前部にアキカンがぶつかっているならば { Huriorosi //それを捕まえる start Prince(); //タスク「プリンス」実行 } } task Prince() //アキカンを持っているときの諸動作 while (true) { if (MIGI < 5 && HIDARI < 5 && HANIKAMI == 1 ) //もしも黒線を横切ろうとしたならば { OnFwd(OUT_A+OUT_C);Wait(60); Kaihou } } } *感想 [#w0240ffb] ** D [#v4753e74] 前回よりも難しかった。缶をどう動かすか考えるのが大変だった。 ** キングオブハート [#bf28ad8d] もっとマシンをオリジナリティ全開に仕上げたかった。発想力を高めて、次の課題では夢のロボットを造りたい。 *コメント [#hc6da08f] コメントをどうぞ #comment