目次 #contents *課題3 懐中電灯に向かってブロックを投げるロボット [#xad271b6] 1. 全方向から懐中電灯の方向を探しだし、懐中電灯を狙ってブロックを投げる。方向を定めたのち、 懐中電灯の30cm以内に近づかない範囲で必要な距離を移動してもよい。懐中電灯は動かさないが、 いろいろな距離や方向にある懐中電灯に対応できるロボットにすること *ロボット [#tfb4f39f] **ロボットの制作過程 [#c7232749] #ref(2009a/A3/課題3左/ディファレンシャルギア.JPG,50%,) 今回は、モーターを二つしか使えないってことで、上の写真のような ディファレンシャルギアとゆうものを使います。 まずギアの部分は、下の写真のように組み立てます。 #ref(2009a/A3/課題3左/手順1.JPG,50%,) #ref(2009a/A3/課題3左/手順2.JPG,50%,) あとは、車体を創って、タイヤをつけます。 #ref(2009a/A3/課題3左/手順3.JPG,50%,) #ref(2009a/A3/課題3左/手順4.JPG,50%,) #ref(2009a/A3/課題3左/手順5.JPG,50%,) ここで、 右っ側のギアのつけ方と左っ側のつけ方が異なるのと、 右側のギアのつけ方と左側のつけ方が異なるのと、 右、左のストッパーのつけ方に、注目すると、 1)右っ側のギア 1)右側のギア #ref(2009a/A3/課題3左/ギアのつけ方(右).JPG,50%) 2)左っ側のギア 2)左側のギア #ref(2009a/A3/課題3左/ギアのつけ方(左).JPG,50%) 3)右っ側のストッパー 3)右側のストッパー #ref(2009a/A3/課題3左/ストッパー(右).JPG,50%) 4)左っ側のストッパー 4)左側のストッパー #ref(2009a/A3/課題3左/ストッパー(左).JPG,50%) また、 後ろの車輪を見ると、 #ref(2009a/A3/課題3左/後ろの車輪.JPG,50%) これは、レゴの、マニュアルに書いてあったものを若干アレンジしたものです。 さらに!、 ホイールを投げる肝心なパーツを紹介します。 ロケットパンチってゆうものから閃いて創りました。 #ref(2009a/A3/課題3左/ミサイル装置.jpg,50%) モーターにつながるでかいギアが時計回りすると、 #ref(2009a/A3/課題3左/ミサイル装置2.jpg,50%) ホイールを固定していた棒が、抜けてロケットパンチ発射!です。 **完成したロボット [#e015b271] #ref(2009a/A3/課題3左/全体像.JPG,50%) #ref(2009a/A3/課題3左/全体像2.JPG,50%) #ref(2009a/A3/課題3左/後ろ姿.JPG,50%) 今回もロボットのヴィジュアル面に気合を入れて創ってみました。 **ロボット作成において工夫した点 [#adda88b4] やっぱり、モーターを縦につなげて創ったのと、 ホイールを投げる仕組みが工夫した点です。 モーターを縦につなごうとしたのは、「ただ、みんなと違うふうにしたいなぁ」って 思ったからですが、 ロケットパンチは、 なんか、投石器みたいな仕組みで飛ばしたとき、どうも飛んでくれなくて、困ってまして、「輪ゴムで飛ばせたらいいなぁ」と思ったことから創ってみました。 *プログラムの説明 [#kd62ac00] **恵のプログラム [#he1cbf21] #define THRESHOLD 50 //閾値 #define MAX 65 #define GO OnRev(OUT_A); Wait(10); Float(OUT_A); Wait(10); OnFwd(OUT_A); Wait(10); Float(OUT_A); Wait(10); Off(OUT_A); task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1は光センサー SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3は光センサー Int move_count = 0; //変数に0を代入 while(move_count == 0){ //変数が0の間 if((SENSOR_1<THRESHOLD) || (SENSOR_3<THRESHOLD)) //値が49以下のとき {OnRev(OUT_C);} //その場で回転する if( (SENSOR_1>=THRESHOLD)&&(SENSOR_1<MAX) )||( (SENSOR_3>=THRESHOLD)&& (SENSOR_3<MAX) ) if( (SENSOR_1>=THRESHOLD)&&(SENSOR_1<MAX) )||( (SENSOR_3>=THRESHOLD)&& (SENSOR_3<MAX) ) { { while(((SENSOR_1>=THRESHOLD)&&(SENSOR_1<MAX))||((SENSOR_3>=THRESHOLD)&&(SENSOR_3<MAX))) { GO; //値が50以上、65未満の時ジグザグに前へ進む until(((SENSOR_1>= 53)||(SENSOR_3>= 53)); until((SENSOR_1>=MAX)||(SENSOR_3>=MAX))); }} if ((SENSOR_1>MAX) || (SENSOR_3>MAX)) //値が65以上の時 {Off(OUT_C);Wait(30);OnFwd(OUT_A); //センサー1とセンサー3が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; //変数が1になって停止する } } } *感想、反省点 [#p210bb9a] なんかグループの人が、急に来なくなって自分ひとりで ホムペから、レゴ創りまで、全てやることになったので、 思ったより大変だった。 でも意外と上出来(自分なりに)だったと思う。 *コメント [#nb0f4273] コメントよろしくお願いしますm(_ _)m - ロボットの説明は、このページだけを見て作れそうなくらい詳しくて、とても良いです。プログラムに関しては、貼り付け時のミスと思われるところ(カッコの数が合わなかったり、(move_count);という命令(?)があったりするところ)があるので、もう一度見直してみてください。 -- [[こさか]] &new{2009-08-10 (月) 21:21:17}; - ロボットの説明が詳しくてよいです。プログラムの方はいくつか直した方が良い点があります。最も明るい方向を探し出せているでしょうか?~ 中盤以降はもうすこしすっきりさせられると思います。フローチャートなどを書いて整理してもう一度考えてみてください~ また、move_countという変数を使わなくても、breakですむと思います -- [[FI]] &new{2009-08-12 (水) 19:37:11}; #comment