[[2010a]]

*目次 [#n2b815a6]
#contents

*1、[課題3]の内容 [#e3a909ca]
黄色いホイールを2個以上連射するロボットを作成し、以下の動きをするようにプログラムを作成せよ。ただし1,3は懐中電灯を2個使用し、ロボットの動作中は懐中電灯を動かさないがいろいろな距離や方向にある懐中電灯に対応できるロボットにすること。2は懐中電灯を1個使用し懐中電灯をゆっくり動かす。 (重複しないように一人一つ以上のプログラムを作成すること。2人のチームは1と2、3人のチームは1〜3)

  1. 全方向から2つの懐中電灯の方向を探しだし、懐中電灯を狙ってホイールを投げる。可能な限り正確な方向に投げること。&br;
  2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。&br;
  3. 全方向から2つの懐中電灯の方向を探しだし、40cmの距離に近づいて懐中電灯を狙ってホイールを投げ、懐中電灯に当てる。&br;

懐中電灯の代わりに携帯のライトなどを利用してもよい。&br;
#ref(./001.JPG,around,15%,ホイール)
使用するホイールの写真。
#clear

*2、メンバー紹介 [#n6db3a8b]
  カワシマ、マコト、カズの3人でやっています。

*3、ロボット紹介 [#a63d2965]
 写真が示している部分がロボットのどの部分かわからない場合は写真をマウスで触れてみて下さい。&br;
   《全貌》
#ref(./013.JPG,around,25%,全貌)
モーターを3つと、光・センサを用いて作成しました。(龍をモチーフにしました。)
#clear
   《正面》
#ref(./022.JPG,around,25%,正面)
ピンクの四角で囲った部分に光・センサが搭載されています。
#clear
   《真上》
#ref(./016.JPG,around,25%,真上)
黄色の四角で囲った部分は、発射台です。
#clear
   《発射部(真上)》
#ref(./088.JPG,around,20%,発射部右真上から)
赤○の部分にある部品(ストッパー)が写真手前から奥に移動することで、黄色い部品がオレンジの矢印の方向に発射される仕組みとなっている。
#clear
   《発射部(正面)》
#ref(./004.JPG,around,20%,発射部右正面から)
大きい赤色の矢印の方向に灰色の部品がモータによって動くことで、小さい赤い矢印の方向に黒い棒上の部品が連動して動き黄色い部品が発射される。
#clear
  ≪かなりのスピードで発射します。しかも発射方向はかなり正確です。≫
#ref(./002.JPG,around,20%,装填時)
写真のように発射装置を左右に装着することによって2連射を可能にしました。
#clear
**ロボット制作においての工夫 [#sbe2ad68]
#ref(./019.JPG,around,26%,裏側を拡大)
・先輩方のページを参考にして、ディファレンシャルギア(黄色の矢印部)を活用することで、ロボットが移動するのに必要なモーターの数を1つに抑えることができました。
#clear
 ・持ち運びが分解しなくても比較的簡単になるようにロボットの強度を上げました。
**ロボット制作においての問題点 [#hc923b97]
 ・モーターを3つ使用したために、ロボットの機体が重くなりディファレンシャルギアでは、移動できない状態に陥った点。&br;
 ・上記のことと重なるかもしれませんが、ロボットの機体における前後のバランスが前に偏ってしまった点。
**その問題点の改善策 [#r61c79b8]
#ref(./018.JPG,around,25%,裏側)
・ピンクの輪で示した部分にあるように、しっぽをモチーフにした重りを取り付けたり、前方に取り付けた光・センサを1つにすることで前後のバランスを改善しました。&br;
・赤い輪で示したように前方のタイヤのゴムをあえて取り付けないことで、摩擦による抵抗を軽減しました。
#clear
*4、それぞれのプログラム [#fd1634ba]

**カワシマのプログラム [#h399a642]
 私は、「2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。」という課題を選択しました。
 #define GO OnFwd(OUT_A);                    // 前進する
 #define STOP Off(OUT_A);                          // 停止する
 #define CIR OnRev(OUT_A);                         // 右折する
 #define DOWNF OnFwd(OUT_B);Wait(35);Off(OUT_B);   // 左側のブロックを発射する
 #define DOWNS OnRev(OUT_C);Wait(35);Off(OUT_C);   // 右側のブロックを発射する
 #define pika SENSOR_2                             // センサー2を「pika」と名付ける
  上で定義下値を用いてプログラムを書きました。



 task main(){   
               int l_max = 0;  
               int t_max = 0;
 
                SetSensor(pika,SENSOR_LIGHT);
            
 
       ClearTimer(0);
      while(FastTimer(0) <= time){
                CIR;
  if(SENSOR_1 > l_max){
         l_max = pika;
         t_max = FastTimer(0);
                             }
                                          }
                 CIR;
                 Wait(t_max);
                 STOP;
      if(pika < 100 ){
                 GO;
               } else {
                 STOP;
                 DOWNF;
                 DOWNS;
                      }
***プログラムの工夫 [#n434a889]
 ・「int」を用いました。&br;
 ・定義を用いることで、簡略化を図りました。&br;
***プログラムの問題点、改善策 [#ue226255]
 ・懐中電灯についていくときと、いかないときがある。&br;
 ・ついて行く前に発射してしまったりする。&br;
***反省、感想 [#zab89523]
 ・先輩のプログラムに頼った点がいくつかあるので、今後は、できるだけ自分の力で成し遂げたいと思います。&br;
 ・「int」を用いることで明るさの最大値を測ることができるのには驚きました。&br;
**マコトのプログラム [#f6be9553]

 #define TURN_TIME 400//一周する時間
 
 task main(){
 SetSensor(SENSOR_2, SENSOR_LIGHT);//センサー2を光センサ
 int light_max=0;//光の最大値
 int t_max=0;//光の最大値の時間
 ClearTimer(0);
 OnFwd(OUT_B);Wait(TURN_TIME);//一周する
 
 while(FastTimer(0)<TURN_TIME){   //回っている間
 if(SENSOR_1>light_max)        //最大値の光を見つけたら
 {
 light_max=SENSOR_1;          //最大値の光と設定
 t_max=FastTimer(0);         //タイマーを入れる
 }
 }
 

 OnFwd(OUT_B);//光の最大値のところまで回る
 Wait(t_max);//
 Off(OUT_B);//
 OnFwd(OUT_A);//左のブロックを射出
 Wait(10);//
 Off(OUT_A);//
 Wait(50);//
 OnRev(OUT_C);//右のブロックを射出
 Wait(10);//
 Off(OUT_C);//
 }
 

 

***プログラムの工夫 [#i52436ef]
 タイマーを設定して割と正確な位置に行けるようにした
***プログラムの問題点、改善策 [#gea8dac9]
 最大値とかの設定がどうすればうまくいくいのかわからなかった。
***反省、感想 [#u56d2086]
 時間がなくて大変だった

**カズのプログラム [#j688e193]
 #define turn_time 400     //ロボットが1周する時間
 task main()
 {

   int light_max=0;   //最大値
   int t_max=0;   //最大値を実現する時刻
   SetSensor(SENSOR_2,SENSOR_LIGHT);  //センサー1は光センサー
   ClearTimer(0);    //時間を0とする
   OnFwd(OUT_B);    //一周する
   while(Timer(0)<turn_time){
   if(SENSOR_2>light_max){     //回っている間
   light_max=SENSOR_2;         //最大値をセンサー2とする
   t_max=Timer(0);             //タイマーを入れる
 }
 }
   Off(OUT_B);        //一旦止めて
   Wait(100);
   OnFwd(OUT_B);      //最大値のところまで回る
   Wait(t_max)
   Off(OUT_B);        //止まる
   Wait(50);
   OnRev(OUT_B);      //光に向かって前進 
   Wait(50);
   Off(OUT_B);  
   OnFwd(OUT_A);      //左のブロックを投げる
   Wait(20);
   Off(OUT_A);
   OnFwd(OUT_C);      //右のブロックを投げる
   Wait(20);
   Off(OUT_C);        //完了
 }

***プログラムの工夫 [#nb6cd543]
 先輩のを参考にしました。正確になるようになるべく動く時間を考えました。
***プログラムの問題点、改善策 [#l1b9522c]
 光に向かって進まなくてはならないところのプログラムと懐中電灯に当てるプログラムがあまりうまくいきませんでした。
***反省、感想 [#cee2acb8]
 時間がなく、あまり正確にできなくて残念でした。&br;
*5、全体の反省 [#k1adacc8]
 ・ロボットの作成に関しては、みんなでできる限り集まって作成したので比較的容易に作成することができました。&br;
 ・プログラムに関しては、なかなか時間を確保することができなかったので、少し反省しています。&br;
 ・ロボットの発射部に関しては、かなりクオリティーの高いものになりました。

*6、コメント欄 [#h26dc012]
 私たちのページを見て、感じたことを自由に投稿して下さい。
- プログラムにいくつか問題があるので改善してください。一人目に関しては、まず途中から説明がないでし、懐中電灯が動いてるまたは止まっているを光センサやタイマーを用いてどう定義するかがポイントだと思います。二人目に関しては、最大値を見つけることに成功していますが、今回の課題では2番目に大きい値も見つける必要があります。例えば、光量に関して2つの変数を用いて、観測した光量の大きさは3つの場合に分けられるので、それぞれの場合に対処するという方法があります。3人目に関しては懐中電灯まで40cmというのがどうロボットに判断させるのかがないかと思います。 -- [[FI]] &new{2010-07-30 (金) 17:24:07};
- ロボットの紹介はできています。プログラムの修正をお願いします -- [[TAKA]] &new{2010-07-30 (金) 17:36:35};

#comment

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