[[2010a]] *目次 [#r61547b2] #contents *課題3の内容 [#v95515a7] 黄色いホイールを2個以上連射するロボットを作成し、以下の動きをするようにプログラムを作成する。ただし1は懐中電灯を2個使用し、ロボットの動作中は懐中電灯を動かさないがいろいろな距離や方向にある懐中電灯に対応できるロボットにする。2は懐中電灯を1個使用し懐中電灯をゆっくり動かす。 1、全方向から2つの懐中電灯の方向を探しだし、懐中電灯を狙ってホイールを投げる。可能な限り正確な方向に投げる。 2、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。 *メンバー紹介 [#h24ebdbc] -もぇくぇ -静岡太郎 *ロボット紹介 [#b662ce62] **各部位の説明 [#j1ea737f] **工夫した点 [#dfa5d585] **苦労した点 [#q1023dd0] *プログラム紹介 [#m0575cc2] **もぇくぇのプログラム [#h9371237] #define H 600 //左光センサーの閾値 #define F 600 //右光センサーの閾値 #define fire OnFwd(OUT_B);Wait(15);OnRev(OUT_B);Wait(15);Off(OUT_B); //ホイールを打つ動作 task main() { SetSensor(SENSOR_1, SENSOR_LIGHT);//端子1に光センサーを接続 SetSensor(SENSOR_3, SENSOR_LIGHT);//端子3に光センサーを接続 int shot=0;//ホイールを打った回数 while(shot<3)//ホイールを打った回数が3未満の時 {if ((SENSOR_1 > H)&&(SENSOR_3 > F))//両方のセンサーが光を感知したとき {fire;//ホイールを発射! OnFwd(OUT_A);OnRev(OUT_C);Wait(45);//回れ左 shot++;}//打った回数を1増やす if ((SENSOR_1 > H)&&(SENSOR_3 < F))//センサー1が光を感知したとき {OnFwd(OUT_A);OnRev(OUT_C);Wait(5);}//回れ左を続けます if ((SENSOR_1 < H)&&(SENSOR_3 < F))//両方のセンサーが光を感知していないとき {OnFwd(OUT_A);OnRev(OUT_C);Wait(5);}}//回れ左を続けます Off(OUT_A+OUT_C);//投げ終えたら停止 } ***工夫した点 [#zf3d1a2d] 二つの光センサーの感度が異なるので、閾値は最初は別々に設定していましたが、&br; 懐中電灯の光は思ったよりもはるかに強力で、結局同じ値に落ち着きました。&br; ホイールを打つときの動作は、&br; モーター回転 → ハンマーがホイールを打ち出す → モーター逆回転でハンマーを元の位置に戻す&br; というプロセスを踏んでいます。&br; 初めはもう少し複雑なプログラムになるかと思っていたのですが、ホイールを打ち出す機構が&br; 思っていたよりもシンプルに出来上がったので、プログラムもシンプルになりました。 ***反省点 [#p3bf4229] 利点があれば欠点もあるわけで…&br; このホイール打ち出し機構はシンプルにできたのはいいのですが、&br; 半面安定性が今ひとつでよく飛ぶときもあれば、飛距離が伸びないこともあったのが問題でした。&br; 打ち出す動作はモーター一つで行っているので、プログラムの書き換えでは対処しにくかったのが反省点でした。&br; もう少しマシンの方を改良すべきでしたか… ***感想 [#lfcc46db] whileやifなど、今まで書いてきたプログラムを使った総集編!&br; …とまでは行かなくとも、いつも通りプログラムを書くのは苦労しました。&br; ほか、ホイール発射機構をもう一度作り直す手間を惜しんだせいで挙動が安定しないのは言わずもがな。&br; **静岡太郎のプログラム [#pde3a14a] ***工夫した点 [#c070d4d2] ***反省点 [#eb570f1c] ***感想 [#ge5d43c6] *全体の反省 [#f26f747f] -コメントお願いします。 #comment