[[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]
   全貌
#ref(./013.JPG,around,25%,全貌)
モーターを3つと、光・センサを用いて作成しました。(龍をモチーフにしました。)
#clear
   正面
#ref(./022.JPG,around,25%,正面)
ピンクの四角で囲った部分に光・センサが搭載されています。
#clear
   真上
#ref(./016.JPG,around,25%,真上)
黄色の四角で囲った部分は、発射台です。
#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」を用いました。
**プログラムの問題点、改善策 [#ue226255]
 懐中電灯についていくときと、いかないときがある。
**反省、感想 [#zab89523]
 先輩のプログラムに頼った点がいくつもあるので、今後は、できるだけ自分の力で成し遂げたいと思います。
**マコトのプログラム [#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;
 ・プログラムに関しては、なかなか時間を確保することができなかったので、少し反省しています。


*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