課題2:黒い線に沿って動くロボットを作成せよ。そして一つの周回コースを2台のロボットが走行すること想定し、以下の2種類のプログラムを作成せよ。 +. 前方のロボットに接触したら反転して進む +. 前方のロボットに接触したらそのロボットを右側から避けて通り、再びライン上に戻って進む + 前方のロボットに接触したら反転して進む + 前方のロボットに接触したらそのロボットを右側から避けて通り、再びライン上に戻って進む ☆目次☆ ☆目次☆ #contents *プログラム(反転バージョン1) [#af7eab9b] #define THRESHOLD 47 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーとする SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2をタッチセンサーとする SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーとする while(true){ if (SENSOR_1< THRESHOLD){ //センサー1が線の上にあるとき Off(OUT_A+OUT_C); OnFwd(OUT_C); //左に少し旋回 OnRev(OUT_A); Wait(4);} if (SENSOR_3< THRESHOLD){ //センサー3が線の上にあるとき Off(OUT_A+OUT_C); OnFwd(OUT_A); //少し右に旋回 OnRev(OUT_C); Wait(4);} else { //どちらのセンサーも線の上になければ OnFwd(OUT_A+OUT_C);} //直進する if(SENSOR_2==1){ //センサ−2が反応すると OnRev(OUT_C); //反転して直進 Wait(180); OnFwd(OUT_C); } } } 制作者:ガリ、メソ *プログラム(反転バージョン2) [#m7657726] #define THRESHOLD 45 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーとする SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2をタッチセンサーとする SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーとする while(true){ if (SENSOR_1< THRESHOLD){ //センサ−1が線の上にあるとき Off(OUT_A+OUT_C); OnFwd(OUT_C); //左に少し旋回 OnRev(OUT_A); Wait(6);} if (SENSOR_3< THRESHOLD){ //センサー2が線の上にあるとき Off(OUT_A+OUT_C); OnFwd(OUT_A); //右に少し旋回 OnRev(OUT_C); Wait(6);} else { //センサー1,2のどちらも反応していないとき OnFwd(OUT_A+OUT_C);} //直進する if(SENSOR_2==1){ //センサー2が反応しているとき OnRev(OUT_C); //右回りに旋回し反転 Wait(185); OnFwd(OUT_C); } } } 制作者:アナクスナムゥン *プログラム(避けるバージョン1) [#dca7ed76] #define THRESHOLD 47 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーとする SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2をタッチセンサーとする SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーとする while(true){ if (SENSOR_1< THRESHOLD){ //センサ−1が線の上にあるとき Off(OUT_A+OUT_C); OnFwd(OUT_C); //左に少し旋回 OnRev(OUT_A); Wait(4);} if (SENSOR_3< THRESHOLD){ //センサ−3が線の上にあるとき Off(OUT_A+OUT_C); OnFwd(OUT_A); //右に少し旋回 OnRev(OUT_C); Wait(4);} else { //センサー1,2のどちらも反応していないとき OnFwd(OUT_A+OUT_C);} //直進する if(SENSOR_2==1){ //センサー2が反応しているとき OnRev(OUT_C); //右に0.9秒旋回 Wait(90); OnFwd(OUT_C); //1.2秒直進 Wait(120); OnRev(OUT_A); //左に1.3秒旋回 Wait(130); OnFwd(OUT_A); } //直進しコースに戻る } } 制作者:ガリ、メソ *プログラム(避けるバージョン2) [#m766c83a] #define THRESHOLD 47 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーとする SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2をタッチセンサーとする SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーとする while(true){ if (SENSOR_1< THRESHOLD){ //センサ−1が線の上にあるとき Off(OUT_A+OUT_C); OnFwd(OUT_C); //左に少し旋回 OnRev(OUT_A); Wait(4);} if (SENSOR_3< THRESHOLD){ //センサ−3が線の上にあるとき Off(OUT_A+OUT_C); OnFwd(OUT_A); //右に少し旋回 OnRev(OUT_C); Wait(4);} else { //センサー1,2のどちらも反応していないとき OnFwd(OUT_A+OUT_C);} //直進 if(SENSOR_2==1){ //センサー2が反応しているとき OnRev(OUT_C); //右に0.9秒旋回 Wait(90); OnFwd(OUT_C); //1.0秒直進する Wait(100); OnRev(OUT_A); //左に1.0秒旋回 Wait(100); OnFwd(OUT_A); } //直進しコースに戻る } } 制作者:アナクスナムゥン *コース [#g1c71324] #ref(2006a/A7/課題2左/dscn2607_Medium.jpg,100%,スヌーピー) 他の班とかぶらないようにスヌーピーにしてみました。 *工夫した点 [#z85b009f] +光センサーがなかなか敏感で、ちょうどいい感度にさせた所。あと、2つの光センサーの幅を絶妙な間隔に調整したことでほとんどすべてのカーブに対応したマシンの製作ができた。 +光センサーの高さを地面すれすれにすることにより、ラインの位置をより正確に読み取ることに成功した。 *うまくいかなかったこと [#t9681fde] +車体が振動してスムーズに進まなかった。センサーの感度、プログラミングに改良の余地あり(ガリ) →改善完了しました。 +課題内容を把握していなくて、やってきていませんでした。→完成しました(6/21) *感想 [#h49153a0] +アナクスナムゥン:今回は、夜中までみんなでやったりして、大変だった。 +ガリ:ホント遅くまでやったね。眠気覚ましに塩コショウを食ったりね。ロボットは基本をモデルにしたからやりやすかったけど、プログラミングは苦労したね。 +メソ:今回は、いろいろ不手際があって遅れちゃったけど、なんとか完成できて良かったよ、ホント塩コショウは眠気に効くよね♪ *皆さんのコメント [#e8f9f3f9] みんな恥ずかしがらずに書き込んでね!! -写真が1枚も貼ってないじゃん! -- [[怒羅江門]] &new{2006-06-23 (金) 00:59:58}; -写真はったんだね! -- [[sin]] &new{2006-06-27 (火) 01:28:36}; #comment