#contents *メンバー紹介 [#e245f5b8] ・小町 ・まっちゃん *課題3の目標 [#d6daddfe] 1:全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。 2:懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。 3:懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。 *ロボット紹介 [#u9f57d4c] 一番大きなタイヤをつけ、土台とした今回のロボット↓ #ref(2007a/A4/課題3右/????-0015-1.jpg) *製作過程 [#ga54c914] **Part1:ディファレンシャル・ギア [#uae617cc] 今回はモーターを二つしか使ってはいけないという制限があり、今までと同じプログラミングではロボットがブロック(ホイール)を投げることができなくなってしまいます。そこで、その問題を解決するために今回登場するのが、この『ディファレンシャル・ギア』です↓ #ref(2007a/A4/課題3右/画像-0010.jpg) このディファレンシャル・ギアがあることによって、モーターが一つでもロボットを走らせたり、ブロックを投げさせることができます。なぜならこのギアにより、例えば左側のタイヤを停止させた状態で右側のタイヤを正回転させてもタイヤは動くことができます。逆の場合も同様に、タイヤは動くことができます。 **Part2:ブロックを投げる [#m8da75ce] 今回はここにブロック(ホイール)を挟み、投げさせます。 #ref(2007a/A4/課題3右/画像-0012.jpg) このモーターを回転させることにより、上の写真の黄色い部分(ブロックを投げるためのアーム)が前方向に動き、挟んであったブロックを投げます。タイヤにブロックを挟んでそれを回転させて飛ばすなど、投げさせ方はたくさんありますが、この方法が一番投げやすいのではないかと思ったので、今回はこれでいくことにしました。 #ref(2007a/A4/課題3右/画像-0011-1.jpg) **Part3:光センサー [#bf2af927] 今回は前方に光センサーを二つ取り付けました。初めは一つでしたが、ロボットが懐中電灯の光を効率よく探せるように、前に二つ取り付けることにしました。これにより、左右の光はある程度センサーが認識できます。 初めのロボットです。光センサーが一つのとき↓ #ref(2007a/A4/課題3右/画像-0013.jpg) 改良後のロボット(光センサー二つ)はロボット紹介の写真をご覧ください。 *プログラム [#fea7c4a8] **止まっている懐中電灯の光を探し出すプログラム [#w9fef9f8] #define THRESHOLD 60 task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーと定義する SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーと定義する while(true){ OnFwd(OUT_A); //基本は右周りに回転 Off(OUT_C); if((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD)) { //もしセンサー1と3が光を感知 Off(OUT_A+OUT_C); したら停止して投げる OnFwd(OUT_B); **ゆっくり動く懐中電灯の光を探し出すプログラム [#va6f6e9f] #define THRESHOLD 60 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が閾値より弱いとき以下を実行 OnFwd(OUT_A); //モーターAを正回転 Off(OUT_C); //モーターCを停止 } if ((SENSOR_1 >THRESHOLD) && (SENSOR_3 < THRESHOLD)) { //センサー1とセンサー3が閾値より強いとき以下を実行 OnRev (OUT_C); //モーターCを逆回転 Off (OUT_A); //モーターAを停止 } if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD)) { //センサー1とセンサー3が閾値より弱いとき以下を実行 OnRev (OUT_A); //モーターAを逆回転 Off(OUT_C); //モーターCを停止 } if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD)) { //センサー1とセンサー3が閾値より強いとき以下を実行 Off(OUT_A+OUT_C); //モーターAとCを停止 OnFwd(OUT_B); Wait(50); } **動き回る懐中電灯の光を追いかけるプログラム [#k822aa48] #define THRESHOLD 60 task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーと定義する SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーと定義する while(true){ if((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHGOLD)) { //センサー1と3が光を感知す Off(OUT_A+OUT_C); るとき停止 Onfwd(OUT_B); //ボールを投げる } if((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD)) { //センサー3のみが光を感知す OnRev(OUT_C); るとき右に曲がる Off(OUT_A); } if((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD)) { //センサー1のみが光を感知する OnRev(OUT_A); とき左に曲がる Off(OUT_C); if((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD)) { //センサー1も3も光を感知しな OnRev(OUT_A); いとき見つかるまで左回りに回 Off(OUT_C); 転する。 } } *工夫した点 [#z05ac40c] 工夫した点はディファレンシャル・ギアとその周辺部分のギアの作成です。 作り始めたときは、ブロックとタイヤの間のギアがとても出ていて見た感じあまりきれいではなかった↓ #ref(2007a/A4/課題3右/dscn2323_Medium.jpg) そこで、ギアをブロックの内側に入れて、見た目もきれいにしてみました。 ロボットの性能には影響しなかったのでよかったです。 #ref(2007a/A4/課題3右/画像-0016.jpg) *感想 [#rd80e347] 今回の課題はヒントが少なく、ロボットやプログラムの作成が本当に大変でした。初めはディファレンシャル・ギアの構造がまったくわからなく、どういったロボットにすればいいのかとても悩みました。授業計画にあるヒントや過去の先輩方のホームページを参考にして、今回のロボットを作成しました。 *コメントをお願いします [#u67b26ba] -課題として課せられているプログラムと、実際のプログラムの内容がちょっと違いますね。「懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。」 投げる部分がないのでは。 -- [[まいける(TA)]] &new{2007-07-14 (土) 14:13:47}; #comment