[[2009b]]写真は後日追加します。 #contents *課題 [#h3dfeb40] 光センサーを使って、ラインをトレース!~ 牛乳パックに負けず、安全確実、かつ颯爽と駆け抜けるロボットを作ろう。~ *チーム [#fe1787dc] -チーム名 「切なさと悲しさとロボティクス」~ ~ -メンバー紹介(「」内は課題にかける想い。)~ しんご (農学部) 「穴数えるの大変。」~ なかみう(教育学部)「シンプルがカッコワルいとは言わせない。」~ ~ *ロボット [#y7af0333] ロボットはシンプルに作った。~ この方針は最初から決定していたので、~ ロボットの大きな変更はなかった。~ ただ、パーツの不具合が多く、大変だった。~ *プログラム [#db4d08ee] **共通のプログラム [#j6f57639] 共通のプログラムを、なかみうが作成した。~ ~ 共通のプログラムは下の通り。~ ~ SetSensor(SENSOR_1, SENSOR_LIGHT); //光センサー(左) SetSensor(SENSOR_2, SENSOR_LIGHT); //光センサー(右) if((SENSOR_1 < white) && (SENSOR_2 < white)) //直進 {OnFwd(OUT_A+OUT_C);} if(SENSOR_1 < 0) //コースから右にそれたときの回復 {OnFwd(OUT_C); Float(OUT_A);} if(SENSOR_2 < 0) //コースから左にそれたときの回復 {OnFwd(OUT_A); Float(OUT_C);} if((SENSOR_1 < 0) && (SENSOR_2 < 0)) //交差点での停止&直進 {Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C);} **オリジナルのプログラム [#n777f084] 共通プログラムのパーツを組み合わせ(改良して)~ オリジナルのプログラムを作った。~ 以下は、それぞれのプログラムと、本人による解説。~ ***しんごのプログラム [#f2889524] #define mae(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); 前進させる #define THRESHOLD 40 閾値 sub CUP() タッチセンサが反応したときの反応 {OnRev(OUT_C); 回転しパックを後ろにおき、自らは反転、レース上 に戻ります OnFwd(OUT_A);Wait(140); OnRev(OUT_A+OUT_C);Wait(100); OnRev(OUT_C); OnFwd(OUT_A); Wait(140); OnRev(OUT_A+OUT_C);Wait(100);} task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); 光センサ SetSensor(SENSOR_2, SENSOR_TOUCH); タッチセンサ SetSensor(SENSOR_3, SENSOR_LIGHT); 光センサ while (true) { if (SENSOR_2 == 1) {CUP();} if (SENSOR_1 < THRESHOLD) {OnFwd(OUT_C); Off(OUT_A); until (SENSOR_1 > THRESHOLD) ; } if (SENSOR_3 < THRESHOLD) { OnFwd(OUT_A); Off(OUT_C); until (SENSOR_3 > THRESHOLD) ; } if (SENSOR_1&& SENSOR_3 < THRESHOLD) {OnFwd (OUT_A+OUT_C);} else{OnFwd(OUT_A+OUT_C); } } } ***なかみうのプログラム [#gb976f48] #define white 40 //光センサーの値。 //これ以下は黒、これ以上は白。 task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); //光センサー:左 SetSensor(SENSOR_3, SENSOR_LIGHT); //光センサー:右 int t = 0; //後で使う変数「 t 」 while( t <= 15 ){ // t が15以内で繰り返す。 //この t は最後の方にあります! //直進 if((SENSOR_1 > white) && (SENSOR_3 > white)){ OnFwd(OUT_A+OUT_C); } //コースから右にそれた時の処置(左に行きます) if(SENSOR_1 < white){ OnFwd(OUT_C); OnRev(OUT_A); Float(OUT_A+OUT_C); //このFloatは重要。 //Offではうまくいきません } //コースから左にそれた時の処置(右に行きます) if(SENSOR_3 < white){ OnFwd(OUT_A); OnRev(OUT_C); Float(OUT_A+OUT_C); } //交差点の通行 if((SENSOR_1 < white) && (SENSOR_3 < white)){ t = t + 1; //きました、「 t 」! Off(OUT_A+OUT_C); //この動作を15回繰り返したら、 Wait(30); //プログラムは終了します OnFwd(OUT_A+OUT_C); } } } *コース [#o92cde6a] コースはA1左グループと共同で作成した。~ 衝突もあったが、なんとかまとまった。~ ~ 完成したコースは、こちら。~ ~ ~ ~ *コメントのコーナー [#t9fe79fd] #comment