[[2007a/MemberOnly/進行状況A]]
#counter
 
#hr
CENTER:&size(25){[[課題3>2007a/練習問題#kadai3]]: 懐中電灯に向かってブロックを投げるロボット };
#hr
//CENTER:&size(25){[[''課題3:懐中電灯に向かってブロックを投げるロボット'' >2007a/練習問題#kadai3]]
CENTER:&color(orange,){ぎょうざ};&&color(lightgreen,){たけぽん}; 
--目次
#contents

*このロボットを製作するにあたってのポイント☆ [#gdf2212e]
-全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。 
-懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。 
-懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる
LEFT:の3つを注意して作る。

*ロボットについて [#g4e69b20]
|>|>|CENTER:''光を追いかけるロボット''|
|&ref(2007a/A6/課題3左/ロボット 018.JPG,100%);|>| &br;・4輪車&br; &br;1つのモーターで左右どちらのタイヤも動かせる&br; &br;・光センサーの地面に対する角度を変えることができる&br; &br;|
この上の写真、よく見ていただければわかるのですが、なんと&COLOR(orange){光センサーの角度が変えられます!!!};
**さらに詳しく! [#w8e5956f]
|>|LEFT:1つのモーターで左右どちらのタイヤも動かせる仕組み||BGCOLOR(red):&ref(2007a/A6/課題3左/ロボット 014.JPG,70%);|

今回は、モーターが2つあるうちの1つは、ブロックを投げるために使わざるを得なかった。そのため、上記のような仕組みが必要となった。

|>|LEFT:BGCOLOR(blue):&ref(2007a/A6/課題3左/ロボット 008.JPG,70%);||ブロックを投げるための仕組み(拡大版)|

これらの機能が重なりあうことによって、このロボットは初めて、光に向かって進み更には、その光源に向かってブロックを投げることができるのである。

*プログラム [#x75f8c70]
**試作プログラム [#p2165b52]
このプログラムは試作段階であり、%%%&color(yellow,){''光''};を追うのみ%%%である。
 #define   turn_left    OnFwd(OUT_B);//右に曲がる
 #define   turn_right   OnRev(OUT_B);//左に曲がる
 task main()
 {
   SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1は光センサー(以下光1とする)
   SetSensor(SENSOR_3,SENSOR_LIGHT);//センサ−3は光センサー (以下光3) 
   while(true){
      if(SENSOR_1>=40&&SENSOR_3>=40&&SENSOR_1<SENSOR_3){
        turn_right ;//光1と光3が40以下で光3の光の方が強いとき右に曲がる
        }
      if(SENSOR_1>=40&&SENSOR_3>=40&&SENSOR_1>SENSOR_3){
        turn_left  ;//光1と光3が40以下で光1の光の方が強いとき左に曲がる
        }
      if(SENSOR_1<40&&SENSOR_3>=40){
        turn_left  ;//光1が40以下で光3が40以上のとき左に曲がる
        }
      if(SENSOR_1>=40&&SENSOR_3<40){
        turn_right ;//光3が40以下で光1が40以上のとき右に曲がる
        }
      if(SENSOR_1<40&&SENSOR_3<40&&SENSOR_1<SENSOR_3){
        turn_right ;//光1と光3が40以上で光3の光の方が強いとき右に曲がる
        }
      if(SENSOR_1<40&&SENSOR_3<40&&SENSOR_1>SENSOR_3){
        turn_left ;//光1と光3が40以上で光1の光の方が強いとき左に曲がる 
        }
        }}
**完成プログラム [#c701a3f1]
このプログラムは、前回のプログラムに更に手を加えて、
LEFT:なんと%%%光に向かって走るうえにその光に向かって&color(red,){ブロックを投げる};ことができる%%%のである。
 #define   turn_left    OnFwd(OUT_B);//右に曲がる
 #define   turn_right   OnRev(OUT_B);//左に曲がる
 #define   shot         OnFwd(OUT_A);Wait(15);Off(OUT_A);//投げる
 task main()
 {
   SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1は光センサー(以下光1とする)
   SetSensor(SENSOR_2,SENSOR_TOUCH);//センサ−2はタッチセンサー(以下タッチ2)
   SetSensor(SENSOR_3,SENSOR_LIGHT);//センサ−3は光センサー (以下光3) 
   while(true){
       if(SENSOR_1>=40&&SENSOR_3>=40&&SENSOR_1<SENSOR_3){
         turn_right ;//光1と光3が40以下で光3の光の方が強いとき右に曲がる
         }
       if(SENSOR_1>=40&&SENSOR_3>=40&&SENSOR_1>SENSOR_3){
         turn_left  ;//光1と光3が40以下で光1の光の方が強いとき左に曲がる
         }
       if(SENSOR_1<40&&SENSOR_3>=40){
         turn_left  ;//光1が40以下で光3が40以上のとき左に曲がる
         }
       if(SENSOR_1>=40&&SENSOR_3<40){
         turn_right ;//光3が40以下で光1が40以上のとき右に曲がる
         }
       if(SENSOR_1<40&&SENSOR_3<40&&SENSOR_1<SENSOR_3){
         turn_right ;//光1と光3が40以上で光3の光の方が強いとき右に曲がる
         }
       if(SENSOR_1<40&&SENSOR_3<40&&SENSOR_1>SENSOR_3){
         turn_left ;//光1と光3が40以上で光1の光の方が強いとき左に曲がる 
         }
       if(SENSOR_1>=60&&SENSOR_3>=60){
         shot;//光1と光3がともに60を超えたとき投げる
         }
       if(SENSOR_2 == 1) // タッチ2に当たると止まる        
         { Off(OUT_B);  }
         }}
*工夫,苦労したところ [#n25f7f8d]
-光センサーを前のほうに二つ付けることにより光をより追いやすくしたこと。それにタッチセンサを前方に付けることにより、もし機会が何かの障害物にあたっても止まれるようにした。
-光センサーを前のほうに二つ付けることにより光をより追いやすくしたこと。
-タッチセンサを前方に付けることにより、もし機械が何かの障害物にあたっても止まれるようにした。
-光を見失ったと判断させるところ。部屋自体が明るいので、光センサーの値が低すぎても高すぎてもダメだったので、調整するのが難しかった。

*反省&感想 [#d1c774b1]
-何から何まで時間が足りなかった、というのが正直な感想。次回はロボコンということで、今までの数えきれない程の反省点、がどこまで生かせるのか?わからないが、今自分にできる最大限のことをしたいと思う。
*先生,TAの方々のコメント [#q0a968f8]
&color(blue,){些細なことでも、何かお気付きになられましたら、コメントの方お願いしますm(_ _)m};

#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS