[[2007a/MemberOnly/進行状況A]] --------------------------------------------- #contents --------------------------------------------- #counter ~ *今回の課題 [#r0410f79] 懐中電灯に向かってブロックを投げるロボットを作成 -全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。 光センサで動かない懐中電灯の光を見つけ出す。 懐中電灯に向けてプロックを投げるためのモータにアームをつけて、上下の動きを加える。 -懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。 光センサで懐中電灯の光を見つけ出し、モータが動き始める。 -懐中電灯をゆっくり動かしたとき懐中 電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。 上と同じく懐中電灯の光を探しだし、光に向かって動いて、モータとアームの動きでプロックを投げる。 モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。 *創り主 [#j07c0037] アンゼリカ *ロボットキット [#v3b6ec86] **制作 過程 [#lb0a7b05] 次は完成したロボットの上、正面、左側、右側で撮影した写真です。 |&ref(2007a/A6/課題3右/S3700187.JPG,40%);|>| &br;|&ref(2007a/A6/課題3右/S3700189.JPG,40%);| |&ref(2007a/A6/課題3右/S3700188.JPG,40%);|>| &br;|&ref(2007a/A6/課題3右/S3700190.JPG,40%);| ***最初の考え方とその順番 [#qeb25d04] -モーターその1;最初にロボットの本体である1つのモーターを使って動く足を作る。 -タッチセンサー;光を求めって進んでる間、障害物と遭遇した場合の対策としてセンサーとつける。ダブルでもいいし、シングルでもよい。しかし、タッチセンサーがメインではない為、シングルでも十分だと考えられる。 -光センサー;今回のメインのひとつである、光るを見つけて追うセンサーである為、必ず左右二つを使う。できれば、地盤が動ける部品を使うのが望ましい。 -モーターその2;最後のモーターを使って、光に投げる動作を行うアームをつける。 前の課題での経験を考えて、モーターの激しい動きに耐えられる安定感のある地盤があって欲しい。ロボット自体に新たな場所を作るのではなく、ある場所を十分に使って投げる動作に耐えられる基を作るのが必要である。 ***モータ1(足) [#y299e895] |&ref(2007a/A6/課題3右/S3700196.JPG,30%);|>| &br;|&ref(2007a/A6/課題3右/S3700197.JPG,30%);| -足の製作は基本的にホームページにのってある、1つのモーターで右左どっちでも動けるボディの絵を参考してを作りました。 -今回の製作は本をみて作るみたいに詳しい説明と絵が載ってなかった為、色んな角度から撮影されてる絵をみて、その形を似ている部品を探して、ちゃんと組み込まれるような順番を考えながら作りました。 -1つのモーターで左右両方動ける足を作ったことで、課題の条件である、モーターを2つ使うっという条件をクリアすることができました。残りのモーターはブロックを投げる動作をするアームにつける為にとっときます。 -中心となるwheelは安定感があって、ボディの高さをあんまり高くしない大きさのwheelを使用しました。そして、前の補助wheelは中心wheelと見た目上もっと安定感をもたらす為、同じ種類のものを使用しました。前の補助wheelはあくまでも補助であり、モーターはついてません。 ***タッチセンサ [#d4b14c8c] |&ref(2007a/A6/課題3右/S3700187-TOUCH.JPG,60%);| -元々の計画はダブルのタッチセンサーを使って、より正確な動きをするようにしたかったが、ダブルのタッチセンサーと足のモーターの間に共通する部品があって、仕方なく、シングルのタッチセンサーを作りました。 -障害物と遭遇した場合素早く反応する為に、タッチセンサーはキットの一番前の方につけました。障害物との衝突を考えて、その邀撃に十分対応できるように、二重の合わせ目を作って、しっかり固定しました。 ***光センサ [#y299165c] |&ref(2007a/A6/課題3右/S3700195.JPG,30%);| -前方にある光を探すために、全方向に自由に動ける地盤を選び、組み立てました。 -何処にあるか分からない光を探すのが目的である為、二つのセンサーを使いました。 -探すのが目的であるから、キットでの位置はタッチセンサーの次の方にして、バランスをとりました。 ***モータ2(アーム) [#y1e2a679] |&ref(2007a/A6/課題3右/S3700198_cut.JPG,40%);|>| &br;|&ref(2007a/A6/課題3右/S3700199_cut.JPG,40%);| -アームの形はなるべく簡単で、単純な動きを変数なしに移行することができるように、なるべく複雑な部品とあいくちを使わずに作りました。 -絵で分かるように、ブロックをアームの真ん中に置いてもいいし、アームの間の隙間にひっかけてもいいようにしました。これは、場合によって遠くまでいけることができます。 -アームの動きはモーターによって制御されます。ですから、モーターをしっかり固定しないと、&color(red,){モーターの動きの反動でモーター自体がキットから取られてしまう恐れがあります。};詳しいことは下の工夫点にて説明します。 *プログラム [#x60e29fa] **その1;懐中電灯が動かない時ブロックを投げる [#nc33c643] #define THRESHOLD 70 //投げる時の値 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ−1を光センサーに定義 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ−3を光センサーに定義 while((SENSOR_1 < THRESHOLD) || (SENSOR_3 < THRESHOLD)) { //センサー1or3で貰う光が値より小さい時 OnFwd(OUT_C); //回転 Off(OUT_A); } Off(OUT_C); OnFwd(OUT_A); Wait(50); //強い時ブロックを投げる OnRev(OUT_A); Wait(50); Off(OUT_A); } **その2;懐中電灯をゆっくり動かす時光に向かって進む [#i28c7e05] #define THRESHOLD 70 //値 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ−1を光センサーに定義 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ−3を光センサーに定義 while(true) { if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD)) { //センサー1と3が受ける光が値より大きければ進む OnRev(OUT_C); Wait(20); OnFwd(OUT_C); Wait(20); } if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD)) { //センサ−3が貰う光が小さかったrあ左周り OnRev(OUT_C);Off(OUT_A); } if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD)) { //センサ−1が貰う光が小さかったら右周り OnFwd(OUT_C);Off(OUT_A); } if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD)) { //光を見つけられなかったら回転 OnFwd(OUT_C);Off(OUT_A); } } Off(OUT_A+OUT_C); } **その3;懐中電灯をゆっくり動かす時光に向かって進み、光の動きを止めればブロックを投げる [#x84f6730] #define THRESHOLD 70 //値 #define RUN_TIME 25 //時間定義 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ−1を光センサーに定義 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ−3を光センサーに定義 SetPower(OUT_A+OUT_C,7); //AとCのモーターの出力を7 ClearTimer(0); while((SENSOR_1 < THRESHOLD) || (SENSOR_3 < THRESHOLD) || (Timer(0) <= RUN_TIME)) {//光が閾値より弱くタイマーが2,5秒以下ならば実行 if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD)) { //センサー1と3が受ける光が値より大きかったら前 OnRev(OUT_C); Wait(20); OnFwd(OUT_C); Wait(20); } if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD)) { //センサ−3が貰う光が小さかったら左 ClearTimer(0);OnRev(OUT_C);Off(OUT_A); } if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD)) { //センサ−1が貰う光が小さかったらたら右 ClearTimer(0); OnFwd(OUT_C);Off(OUT_A); } if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD)) { //光がなければ回転 ClearTimer(0);OnFwd(OUT_C);Off(OUT_A); } } Off(OUT_C);OnRev(OUT_A); Wait(50); //投げる OnFwd(OUT_A); Wait(50); Off(OUT_A); } *制作の後 [#id0f9b9f] **ロボットキットの工夫点および苦労 [#n768e2af] |&ref(2007a/A6/課題3右/S3700192_paint.JPG,40%);| -上の所で少し取り上げたモーター2の固定の仕方について話します。絵で赤く表しされているとおり、激しいモーターの動きに安定感をもたらす為に、そして限られた場所で最大限の効果をあげる為に、モーターの凸凹となっているところに隙間を置いて、他の部品と接続できる所をすべて使って、力を分散できる場所を作りました。 -赤く塗ってある二つの所がモーターを支持する最重要部品です。この部品達がちゃんと地盤を食い込んでいる為に、激しいモーターの動きに耐えることができるのです。 -限られた場所で、結構の大きさがあるモーターを載せるのは、キット全体のバランスに悪影響を及ぼす可能性があるのです。そこで、私はもう完璧に位置が決まってあるセンサーのところに注目しました。センサーが挿してある上にバランスよくモーターを載せて、モーターと同じ高さを反対側のセンサー端子の上に作りました。そして、その二つの同じ高さの部品をうまく繋ぐことができれば、モーターはもっとしっかり安定するはずです。そこで、一番簡単で確実な、長い棒二つをつかって繋ぎました。そしたら、モーターは綺麗に固定させることができました。 |&ref(2007a/A6/課題3右/S3700193_paint.JPG,40%);| -モーターを固定したのはいいものの、そのもーたーを何処まで動かせばいいのかの制限が設定されてません。そこで、私は前のセンサーが差し込まれてある段にアームがひかかるように位置をきめました。 -もし、モーターを下ろした時の動きを定めてなかったら、キット全体が揺るがす可能性があるのです。後ろのほうは投げたあと、次に備えて、整える余裕をおきました。後はアームの着地の時の位置を定めることができればもっと安定させるはずです。 **感想および発展したい所 [#t0e9fd0c] -今回の課題はいろんな意味で復習になりました。一番前にやった字を書くロボットの時使ったアームをここでまた別の目的として、応用することができました。前回は上と下の動きでペンを下ろすか、上げるかでしたが、今回はモーターに軽いアームを付けて上下の動きを利用して物を投げる動作を表現することができました。 -次に、光を追うセンサーですが、前回は下の方にある黒い線ばかりを追いましたが、今回は四方何処にあるか分からない光を求めて動くように設置しなければなりませんでした。そこで、いろんな方向にセンサーが反応できるようにクルクル回る部品を使いました。 -ロボットにさせる動きを常に考えながら、その為だけに無駄な動きを排除し、簡潔な動きだけを生かす作業は非常に楽しく、頭を使わせました。まだ、色んな部品の扱いになれてなくて、戸惑うことが沢山ありますが、課題を一つ一つクリアしていくうちに段々と部品の使い道になれていくような気がします。 -ロボットを創ることと、プログラムを作成することの大変さは毎回感じることですが、その度に、一つのものに深く考える思考力が備えられる気がします。こんな作業を通じて、ロボットの仕組みや、プログラミングをもっと勉強したいとおもいます。 *コメントお願いします! [#la394401] #comment