[[2008b]]




*懐中電灯に向かってブロックを投げるロボット [#vb4cf48d]
--全方向から懐中電灯の方向を探しだし、懐中電灯の手前50cmまで進んで懐中電灯を狙ってブロックを投げる。懐中電灯は動かさない。
--懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいて懐中電灯を狙ってブロックを投げる。

以上の条件を満たすロボットを作成する。


**目次 [#wfbf960a]
#contents


**方針 [#w4062650]
いかにして一つのモーターで正確に標的に近づくか、そしていかにして懐中電灯との距離をとるかを考えて作成する。


**作成の手順 [#yfd09787]
-基礎部分を作成

--今までに作ったロボットとは違い、今回はモーター1つのみで走行しなければならないので、今回は付属の説明書の基部を使用せず、本HPに参考として掲載されていた基部の例を利用して作成した。
#ref(base.jpg,around)
#ref(base_side.jpg)&br;
&br;
&br;
&br;
&br;
&br;
&br;
&br;
&br;
&br;
&br;
&br;
&br;
&br;
--補助輪を設置。今回のロボットは三輪式にした。
#ref(wheel.jpg)


-アーム(発射台)の作成
#ref(throw.jpg,)


--ブロックをモーターに設置した棒で押し出し発射する方法を試みた。&br;
ブロックを投げる時、発射台に棒のストッパーがついているため回転しすぎることはない。&br;
#ref(throw_side.jpg,around)
#ref(throw_back.jpg)

-工夫点
--ベース
今回ベースは構造上あまり重量のあるものは運べないようなので、できる限り軽くなるように作ってみた。
--発射台
ブロックを強く押せるように、モーターに設置した棒のできる限り先でブロックを押せるように注意した。「物を投げる、又は発射する」装置を作るのがここまで大変とは思わなかった。

**プログラム [#a115008a]

-べっとー
いかにして直進させるかを考えてプログラムを考えた結果、できる限り細かくモーターの回転を入れ換えて前進させる方法をとった。

 #define straight 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);
   SetSensor(SENSOR_3,SENSOR_LIGHT);  //センサーの設置
 
   while(true){  //無限に繰り返す
     if(SENSOR_1 > SENSOR_3){
       OnRev(OUT_A);
       Wait(25);
       Off(OUT_A);  //左折
     }
     else if(SENSOR_1 < SENSOR_3){
       OnFwd(OUT_A);
       Wait(25);
       Off(OUT_A);  //右折
     }
     else if(SENSOR_1 == SENSOR_3){
       straight;  //直進(左右のタイヤを交互に回転)
     }
     else if((SENSOR_1 > 80)&&(SENSOR_3 > 80)){
       OnRev(OUT_C);
       Wait(100);
       Off(OUT_C);
       break;  //両方のセンサーの値が一定の値より大きいとき、ブロックを投げつけて繰り返しを抜ける。
     }
   }
 }
 
-その2
 #define THRESHOLD 70
 #define RUN_TIME 50
 task main ()
 {
 SetSensor(SENSOR_1, SENSOR_LIGHT);
 SetSensor(SENSOR_3, SENSOR_LIGHT);    センサーの設定
 while(true) {
        if(SENSOR_3 <THRESHOLD){
        OnRev(OUT_A); 左折
         }
         if(SENSOR_1>THRESHOLD &&SENSOR_3>THRESHOLD){
         ClearTimer(0);
         while(Timer(0)>= RUN_TIME){
         OnFwd(OUT_C);}}     両方の光センサーが一定以上が0,5秒続くとホイールを投げる
        else {                          
        OnFwd(OUT_A);}}  右折
 }
 

**実行結果…反省および感想 [#i81e7790]
-べっとー&br;
回転時間を伸ばすとロボットの懐中電灯に対する向きが大きくずれてしまうためにモーターの回転の入れ替えを細かくした結果、予想よりはるかにゆっくりとした動きをするプログラムになってしまった。しかし、進行方向に関しては思い通りに動かせたと思う。
 

-プログラムその2&br;
時間がなくて大変だった。懐中電灯の光を認識してから投げるのに光センサーの設定がうまくいかず苦労した。 


&br;

**その後の改良点 [#fad9a365]
ハード面においては、ブロックの飛距離に大きなばらつきがあった事が気になった。また、光の受け方によっては光センサーの数値が左右ともに同じになってしまい、正確な方向へ進めなくなってしまうことがあった。これらの問題を解消するため、以下の対策を行った。

--左右の光センサー間に仕切を設置する事で、左右センサーの値をはっきりと分け、光がどちらから入射しているかという判断をさせやすくした。
#ref(shikiri.jpg)&br;
&br;
--発射台を高くする事で、ホイールの飛距離を延ばした。
#ref(custom_th.jpg)&br;
&br;

**コメント欄 [#p84396cf]
コメントをお願いします。
- しきりの付け方は自分で思いつきましたか?仕切りのはめかたは私がやったときは思いつきませんでした。 -- [[なかむら]] &new{2009-02-06 (金) 11:25:53};

#comment
プログラムその2に説明を入れましょう。三輪車など、ロボットの方にも気を配ったのはよいと思います。 FI
&br;

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