[[2009a/A4/課題2左]] &size(20){''目次''}; #contents ---- *課題 [#va0c266e] 各チームで作成したコースを3周するロボットを製作せよ。交差点のうちの一つには500mlの空の紙パックをおき、次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する) 1.紙パックを迂回する、あるいは紙パックをもとの位置に戻したのちコースに戻って進む (交差点を通過後、紙パックが元の位置にあればよい) 2.紙パックを次の交差点まで運んで行き、その交差点に紙パックを残してさらに黒い線に沿って進む *ロボットの説明 [#ocacca31] **試作一号機(鈴作) [#y3c5460d] 試作機ということで前回の機体の形を残してシンプルな機体にした。 #ref(CIMG0904.JPG) ↓タッチセンサー #ref(02 014.JPG) ↓光センサー;タッチセンサーを一つにして光センサーを二つにすることで、より早くラインをトレースできるようにした。 #ref(02 007.JPG) 三輪タイプにすることで旋回をよりスムーズにできるようにし、シンプルではあるがそれゆえに安定性がある機体。ただ試作機なのでパックの運搬は想定していない。 鈴のひそかな自信作。まさか二号機はあんなに変わるとは;; **試作二号機(中立な稲妻作) [#u16d5fad] #ref(02 004.JPG) タッチセンサーと光センサーはそのままに車体が大幅に変化させ、とにかく奇抜さを求めた機体。車体が極めて低いため光センサーの感度は随一だが旋回にやや難がある。試作一号機からの変わりように鈴は唖然。 -実際に求めるのは小型ロボット。この形になると、コントローラ(?黄色のやつ)が落ちやすい点はなくなった。重心が下がるため、安定性がある。部品の需要も大幅減少!そして...見た目はいい。弩の感じ... **その他形にならなかった案 [#t10d2346] ↓前に突起をつけてパックを運搬できるようにしようとしたが回転するときに放してしまったので没 #ref(03 003.JPG) ↓パックを放さないようにつかもうとしたがモーター一個では厳しく没に -かなり工夫したもの。モーター一個で左右のパーツが同時に動ける設計。デメリットは大きい...不採用の原因は、もっと面白い設計があること。 #ref(CIMG0913.JPG) #ref(CIMG0915.JPG) -ロボットが進みながら三つ目のモーターは同時に動き、牛乳パックを動かす。しかしこの部分の計算はかなり面倒... #ref(CIMG0914.JPG) #ref(001.jpg) **試作三号機 [#n4014b1e] 一号機、二号機共にパックを回避するときに大きく動きすぎてラインを見失ってしまうことが多々あったので、最小の動きでパックを回避するというコンセプトの元でき上がった機体。 全体図 #ref(CIMG0916.JPG) #ref(CIMG0917.JPG) #ref(CIMG0918.JPG) パックがタッチセンサーにあたるとたちセンサーと光センサーを上に持ち上げその長い足でパックをまたぎこすという仕組み。またパックを運搬する際にはパックを足の間に挟んだまま移動、次のの交差点で放す、という考えで作った。このアイディアは中立な稲妻の案。 コントローラを固定するパーツ #ref(CIMG0925.JPG) #ref(CIMG0926.JPG) 光センサとタッチセンサ #ref(CIMG0920.JPG) #ref(CIMG0922.JPG) この部分はパックをまたぐとき持ち上がるのでできるだけ小さく作った。 タイヤ部分 #ref(CIMG0924.JPG) #ref(CIMG0921.JPG) 大きさ車体を安定させるためタイヤも大きくし前方に支える部分を作った。 伝送部分 #ref(CIMG0923.JPG) #ref(CIMG0919.jpg) タッチセンサーと光センサーを持ち上げるための部分。この構造は前回の課題でペンを上下させるための部分に使ったものを応用して作った。 **完成機 [#s665031a] 試作三号機を採用。 *プログラム [#u0acb1ef] **パック回避のプログラム [#k59e5d2a] #define THRESHOLD 50//光センサーの値を決める { SetSensor(SENSOR_1, SENSOR_LIGHT); //光センサー1 SetSensor(SENSOR_2, SENSOR_TOUCH); //タッチセンサー SetSensor(SENSOR_3, SENSOR_LIGHT); //光センサー2 int n;//変数nを使う n=0;//変数nを0にする While(N<6){//関数nが6になる=3周するまで続ける if (SENSOR_1 >=THRESHOLD){if (SENSOR_3 >=THRESHOLD){Onfwd(OUT_A+OUT_C); }//光センサーが両方白のとき前進 else{Off(OUT_C);Onfwd(OUT_A);}}//光センサ−2が黒のとき左へ修正 else{if (SENSOR_3 >=THRESHOLD) { Off(OUT_A);Onfwd(OUT_C);}}//光センサ−1が黒のとき右へ修正 if((SENSOR_1 <THRESHOLD)&&(SENSOR_3 <THRESHOLD))//両光センサーが黒のとき {Off(OUT_A+OUT_C);Wait(100); Onfwd(OUT_A+OUT_C); n==n+1}//一度止まって前進。変数nに1プラス if(SENSOR_2==1); {Off(OUT_A+OUT_C);Wait(50);OnRev(OUT_A+OUT_C);//タッチセンサーが反応したら後退 Wait(10);Off(OUT_A+OUT_C);OnRev(OUT_B);Wait(50);Off(OUT_B);//センサーを持ち上げる Onfwd(OUT_A+OUT_C); Wait(50);Onfwd(OUT_B);Off(OUT_B);//パックをまたいでセンサーをおろ }} Off(OUT_A+OUT_C);//変数nが6になる=3周したら停止 **パック運搬のプログラム [#e90ec4d2] #define THRESHOLD 50//光センサーの値を決める { SetSensor(SENSOR_1, SENSOR_LIGHT); //光センサー1 SetSensor(SENSOR_2, SENSOR_TOUCH); //タッチセンサー SetSensor(SENSOR_3, SENSOR_LIGHT); //光センサー2 int n;//変数nを使う n=0;//変数nを0にする While(N<6){//関数nが6になる=3周するまで続ける if (SENSOR_1 >=THRESHOLD){if (SENSOR_3 >=THRESHOLD){Onfwd(OUT_A+OUT_C); }//光センサーが両方白のとき前進 else{Off(OUT_C);Onfwd(OUT_A);}}//光センサ−2が黒のとき左へ修正 else{if (SENSOR_3 >=THRESHOLD){ Off(OUT_A);Onfwd(OUT_C);}}//光センサ−1が黒のとき右へ修正 if((SENSOR_1 <THRESHOLD)&&(SENSOR_3 <THRESHOLD))//両光センサーが黒のとき {Off(OUT_A+OUT_C);Wait(100); Onfwd(OUT_A+OUT_C); n==n+1}//一度止まって前進。変数nに1プラス if(SENSOR_2==1);{}} Off(OUT_A+OUT_C);//変数nが6になる=3周したら停止 *感想 [#db312476] ま、まにあわない;; *コメント [#q3911635] #comment