[[2009a]] *メニュー [#oa7647c0] #contents **課題3の内容 [#wb2ec591] インストの「top secret」を参考にして、白いホイールを投げるロボットを作成すべし!! ただし…以下の壱〜参の条件を満たす事。 其の壱、全方向から懐中電灯の方向を探しだし、懐中電灯を狙ってブロックを投げる。方向を定めたのち、懐中電灯の30cm以内に近づかない範囲で必要な距離を移動してもOK。懐中電灯は動かさないが、いろいろな距離や方向にある懐中電灯に対応できるロボットにすること。 其の弐、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。 其の参、懐中電灯を動かしたとき懐中電灯に向かって進み、見失った時には再び全方向から懐中電灯を探しだす。7秒以上追尾できたら懐中電灯に向かってブロックを投げる。 ただし…懐中電灯の代わりに携帯のライトなどを利用してもOK。モータ、光センサ、タッチセンサはそれぞれ2個まで使用OK。ただし、平面的な方向だけでなく懐中電灯の高さまで含めた方向を探す場合にはモータを3個使用してもOK。 **プログラミング [#e22ea15a] ***その壱 TSUCCHI-[#n2660f6f] int mode; #define search 1; #define chase 2; #define shoot 3; #difine hikari 40; task main() { //task main start SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); mode=search; While(mode == search)//while search start { if (SENSOR_1 < SENSOR_3) //if a start 光センサー1と3で { // 3の方が大きかったら OnFwd(OUT_C); // ライトは右側にあると } //if a end 思われるので右回転 if (SENSOR_1 > SENSOR_3) //if b start 光センサー1と3で { // 1の方が大きかったら OnRev(OUT_C); // ライトは左側にあると } //if b end 思われるので左回転 if (SENSOR_1 == SENSOR_2) //if c start 光センサーの値が { // いっしょなら mode=chase; // 正面にあると思われるのでmodeを // 次の段階へ } //if c end } //while search end While(mode == chase)//while chase start { if(SENSOR_1 < hikari) //if d start 30センチに近づくまで前進 OnFwd(OUT_C);Wait(20);Off(OUT_C);OnRev(OUT_C);Wait(20);Off(OUT_C); } //if d end else // if b's else start { //近づいたら次の段階へ mode=shoot } //if b's else end While(mode == shoot)//while shoot start// 後は発射するだけです { OnFwd(OUT_B);Wait(200);Off(OUT_B);mode=search; } //while shoot end } //task main end ***プログラムの説明 [#ye0d6c85] 今回は前回の課題2で分かりずらかった中カッコを分かりやすくなるように説明を入れてみました~ if aのaはそのifがプログラム中の何個目かを表しています。~ a→1個目のif b→2個目のif みたいな感じです。~ また、変数を使ったところがもっと分かりやすくするために~ 1、2といった数字を当てるのではなく最初から数字に単語を対応させてみました。~ 実際に変数がいるか微妙ですが~ どうしても前回の解決案を思いついたのをやってみたかったのでやってみました ちなみに~ mode→ロボットの状態を表すための変数~ 1→search ライトがどこにあるかを探している状態~ 2→chase ライトの方へ向かっている状態~ 3→shoot 白いホイールをライトに向かって飛ばしている状態~ このプログラムだとちゃんと4連射してくれます ***その弐 KIMIYASU[#y47cf4b2] #define THRESHOLD 50 //閾値 #define STRATE 53 #define MAX 65 int move_count; //変数 task main() { SetPower(OUT_C,4); SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1は光センサー SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3は光センサー move_count = 0; //変数に0を代入 while(move_count == 0){ //変数が0の間 if((SENSOR_1<THRESHOLD) || (SENSOR_3<THRESHOLD)) //値が49以下のとき {OnRev(OUT_C);} //その場で回転する { { until(((SENSOR_1>= STRATE)||(SENSOR_3>= STRATE)); until((SENSOR_1>=MAX)||(SENSOR_3>=MAX))); }} if ((SENSOR_1>MAX) || (SENSOR_3>MAX)) //値が65以上の時 until((SENSOR_1>MAX)&&(SENSOR_3>MAX)); Off(OUT_A);Wait(50);OnRev(OUT_B);Wait(50);Off(OUT_B);Float(OUT_A); //タマが飛ぶ (move_count);move_count = move_count +1; **この機械について [#yc0d0487] ☆正面からの画像、とっても強そうな機械に仕上がりました!! #ref(2009a/A6/課題3右/NEC_0058.JPG,50%) ☆他の班にわ無い様な重厚な造りの発射台!!力強い発射が可能に!! #ref(2009a/A6/課題3右/NEC_0055.JPG,50%) ☆この重厚な造りの恩恵を受けて完成した“白ホイール4連続発射”その凄まじさにタダタダ脱帽! #ref(2009a/A6/課題3右/NEC_0056.JPG,50%) ☆エンジンの構造上4輪車だと、前後か離れすぎて小回りが利きずらい… そのため摩擦を極限まで小さくした素材をフロントに使用!!4輪よりも機動力が向上!! #ref(2009a/A6/課題3右/NEC_0057.JPG,50%) **感想 [#ye4a84fe] ***TSUCCHI- [#t2f28a46] こだわったところは四連射~ 後悔は射出部の上下~ 反省点は重量~ 得たものは満足感~ 危うきは全体の耐久度~ 四連射にこだわったために射出部を作るのにかなり苦労しました~ あとギヤ比 タイヤの位置を左右対称にしながらトルクを上げるのがとても大変でした~ 特にギヤ同士がうまく噛みあってくれないとこが~ ***KIMIYASU [#k13e76c8] レゴでここまでハイテクな機能のついたロボットが出来るなんて驚いた。 初めて作る足回りはとっても厄介、特にギア比とかギア比とかが。 白いホイールを飛ばす部分も他の班には無い様なクレーン車見たいに成って かっこ良かった!! **コメント [#p8007140] 何か気付いた点、改良すべき点がありましたらコメントの方よろしくお願いします。 - 一つ目のプログラムのmode -- [[FI]] &new{2009-08-05 (水) 08:33:53}; - 一つ目のプログラムのmodeはロボットが何をしたいかはっきりしてい良いです。二つ目は、一つ目みたいに詳しい説明があるといいです。真ん中のuntilあたりがわかりにくいです。 -- [[FI]] &new{2009-08-05 (水) 08:33:53}; #comment