[[2008a/MemberOnly/進行状況A]] #contents *課題3 懐中電灯に向かってブロックを投げるロボット [#hdb97609] *全方向から懐中電灯の方向を探し出し、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。~ *懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。 以上の2つのロボットを作成します。 注意点:モーター、光センサ、タッチセンサはそれぞれ2個まで使用可。~ 懐中電灯の代わりに携帯のライトなどを利用してもよい。 **ロボットの説明 [#d4e4e481] #ref(robo.jpg) モーターが2個しか使用できないので、1個をタイヤに、もう1個をブロックを投げるために利用しました。~ ~ #ref(def.jpg) タイヤの方のモーターは、ディファレンシャル・ギアを使用し、1個のモーターで前進と回転ができるようにしました。~ ~ #ref(stopper.jpg) 右側に逆回転防止用のストッパーを設けバック時に右側のキャタピラが停止して左回転するようにした~ ~ #ref(arm1.jpg) #ref(arm2.jpg) ブロックを投げる構造は動いている間にブロックが落ちないように工夫しました。~ ~ #ref(sensor1.jpg) センサーは左右に光センサ2個と真ん中にタッチセンサを使用しました。~ #ref(sensor2.jpg) タッチセンサーの先端に約50cmの長さの突起物設置しを、懐中電灯に50cmのところでタッチセンサーが反応し停止するようにした。~ **プログラムの説明 [#c7cd942d] ***懐中電灯を動かさないときのプログラム [#k9071fa0] #define LIGHT 50 //光量を設定 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT);//センサ1を光センサと定義 SetSensor(SENSOR_3,SENSOR_LIGHT);//センサ3を光センサと定義 while(true) { if ((SENSOR_1>LIGHT)&(SENSOR_3>LIGHT))//左右ともに設定値以上の光を感知したとき(光源の正面にきたとき) { Off(OUT_A); //停止する OnRev(OUT_C); //ホイールを投擲する Wait(100); } OnRev(OUT_A); //それ以外のときはひたすら左回転 } Off(OUT_A+OUT_C);//終了 } ***50cmの距離に近づくときのプログラム [#b6e3cc6a] #define LIGHT 50 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT);//センサ1を光センサと定義 SetSensor(SENSOR_3,SENSOR_LIGHT);//センサ3を光センサと定義 SetSensor(SENSOR_2,SENSOR_TOUCH);//センサ2をタッチセンサを定義 While(true) { if ((SENSOR_1>LIGHT)&(SENSOR_3>LIGHT))//左右の光センサが設定値以上の光を感知したとき(光源の正面にきたとき) { if(SENSOR_2==0)//タッチセンサが反応してないとき { OnFwd(OUT_A);//前進する } if(SENSOR_2==1)//タッチセンサが反応(50cm手前) { Off(OUT_A); //停止 OnRev(OUT_C); //ホイールを投擲 wait(100); } } { OnRev(OUT_A);//ひたすら左回転 } } Off(OUT_A+OUT_C);//終了 } **工夫した点 [#z6435b9c] タッチセンサの先端に50cmの突起物を設置し、正確に50cm手前で停止できるようにした~ ホイールが落ちないように囲い、かつ投げる際にきちんと飛ぶようにした~ 逆回転防止ようのストッパーがきちんとギアに食い込むように改良した~ **今後の課題 [#v140a825] 左回転と直進しかできないので、右回転もできるようにしたかった~ **感想 [#sb938b01] 最初課題を聞いたとき、どうなるかと思ったけど意外とすんなりとプログラムをくめた~ ブロックが最初ピューンと飛んだときはとてもうれしかった~ モーター数を制限されるのは厳しかったけど、制限されたなかで課題をこなすというのもおもしろかった~ **コメント [#i8af8413] コメントお願いします - 右回転もできるように工夫してみてください。 -- [[松本]] &new{2008-07-08 (火) 09:02:19}; #comment