[[2009a]] *メニュー [#le5ccc1b] #contents *課題2 [#j7be56ba] **メンバー発表 [#ze8701a7] SHU〜TA 主にプログラミング担当しかもau KIMIYASU 主に改造担当なのにdocomo KIMIYASU Jr. 主に走るの担当だけどAT車 タッチセンサー対応型Ver! #ref(NEC_0052.JPG) 邪魔な障害物はどかしちゃうよVer! #ref(NEC_0054.JPG) **課題内容 [#peec1529] 黒線に沿って動くロボットを製作し、尚かつそのロボットで制作したサーキットを三周もする。 ただし....交差点の一つには500mlもの空の紙パックを置き次の壱〜参の動作をするプログラムを作成する。 壱、紙パックを迂回するか、紙パックを元の位置に戻した後コースに戻って進む(交差点通過後、紙パックが元の位置にあればOK) 弐、紙パックを次の交差点まで運んで行き、その交差点に紙パックを残してさらに黒線に沿って進む。 参、最初の交差点では左折、次の交差点では右折、その次は左折、と言うように交差点一つごとに右左折の繰り返しで進む。(紙パックはサーキット外に押し出してもよい) **プログラミング [#v9779d2b] ***A [#ua1d57d7] パック回避型のものです。 #define THRE 40 //閾値 #define go_straight OnFwd(OUT_A+OUT_C); //前進 #define go_back OnRev(OUT_A+OUT_C); //後退 #define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(100);Off(OUT_A+OUT_C); //右に向く #define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(100);Off(OUT_A+OUT_C); //左に向く #define RUN_TIME 5500 //走る時間 task main () { SetSensor ( SENSOR_1, SENSOR_LIGHT ); //光センサー SetSensor ( SENSOR_2, SENSOR_TOUCH ); //タッチセンサー SetSensor ( SENSOR_3, SENSOR_LIGHT ); //光センサー ClearTimer(0); while ( Timer(0) <= RUN_TIME ) { if ( SENSOR_2 == 1 ) //パックに当った時に回避 { go_back; Wait(50); turn_right; go_straight; Wait(130); turn_left; go_straight; Wait(280); turn_left; go_straight; Wait(100); } else //ライントレース { if ( SENSOR_1 > THRE ) { if ( SENSOR_3 > THRE ) { OnFwd(OUT_A+OUT_C); } else { OnFwd(OUT_A); OnRev(OUT_C); } } else { if ( SENSOR_3> THRE ) { OnRev (OUT_A); OnFwd(OUT_C); } else { Off(OUT_A+OUT_C); Wait(50); OnFwd(OUT_A+OUT_C); Wait(20); } } } } Off(OUT_A+OUT_C); } ***B [#wfb89d8c] パック運搬型のものです。 #define THRE 40 //閾値 #define go_straight OnFwd(OUT_A+OUT_C); //前進 #define go_back OnRev(OUT_A+OUT_C); //後退 #define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(100);Off(OUT_A+OUT_C); //右に向く #define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(100);Off(OUT_A+OUT_C); //左に向く #define turn_back OnFwd(OUT_A);OnRev(OUT_C);Wait(200);Off(OUT_A+OUT_C); //180度回転 #define RUN_TIME 6000 //走る時間 task main () { SetSensor ( SENSOR_1, SENSOR_LIGHT ); //光センサー SetSensor ( SENSOR_2, SENSOR_TOUCH ); //タッチセンサー SetSensor ( SENSOR_3, SENSOR_LIGHT ); //光センサー ClearTimer(0); while ( Timer(0) <= RUN_TIME ) { if ( SENSOR_2 == 1 ) //パックに当って元に戻す { go_straight; Wait(250); turn_back; go_back; Wait(50); turn_right; go_straight; Wait(150); } else //ライントレース { if ( SENSOR_1 > THRE ) { if ( SENSOR_3 > THRE ) { OnFwd(OUT_A+OUT_C); } else { OnFwd(OUT_A); OnRev(OUT_C); } } else { if ( SENSOR_3> THRE ) { OnRev(OUT_A); OnFwd(OUT_C); } else { Off(OUT_A+OUT_C); Wait(50); OnFwd(OUT_A+OUT_C); Wait(20); } } } } Off(OUT_A+OUT_C); } **感想 [#l9da4721] ***KIMIYASU [#e73a5487] 今回は期間が短く、バンパーとセンサーの位置関係をどの様にしたらウマく収まるかや、 プログラミング等課題1とわ大きく違がってデラ難したった。 こんな小さなブロック機械で一本の線の上を的確に走るなんて驚きました。 今回は見た目にもこだわって付けたターボ、方向指示器には大満足です! ***SHU〜TA [#gfbcc73d] 最初タッチセンサーと光センサーを別々に用いてロボットを動かしていたので、この二つのセンサーをどのよう にしてプログラミングに組み込んでいくかが今回の難点だったと思います。 そしてやはり交差点の対処の仕方が最も難しかったと思います。 でも、コースを走っていて思わず応援してしまいましたf^_^; **創意工夫点 [#tff2e55d] ☆走行中の安定感、センサーのブレの削減を追求するため光センサーは 低い位置に装備。 ☆センサーは始めは後ろに付けて位置が高くウマく読み取らなかったが、前にする事によって低位置に持ってくる事に成功。 #ref(NEC_0046.JPG) ☆タイヤを4WD、前輪後輪の間を縮めることにより小回りの効く走行が可能に。 #ref(NEC_0047.JPG) ☆バブルバンパーにすることにより効率良く障害物を確認、回避出来る事に成功。 #ref(NEC_0053.JPG) **このロボットのチェックポイント [#ha9bc458] ♪後ろのダブルターボファイヤーによりスピード感がうまれ、観ている者に飽きを感じさせない!! #ref(NEC_0049.JPG) ♪前後に方向指示器を装備する事によって、対向車、後続車への配慮も充実!! #ref(NEC_0050.JPG) **コメント [#c368a51e] ご気軽にコメントしてください。よろしくお願いします。 - ロボットの説明が詳しくて良いです。方向指示器は光りますか?ただ、プログラムの説明がもっと欲しいです。また、ifでセンサーの反応を判別しているところを、センサーが白か黒か(もしくは触っていないか触っているか)について、「無反応なら0を、反応なら1を返す関数」にしてみると、もっとスリム化できるかもしれません。 -- [[こさか]] &new{2009-07-02 (木) 22:33:11}; #comment