2010a

目次

1、課題3の内容

 黄色いホイールを2個以上連射するロボットを作成し、以下の動きをするようにプログラムを作成する。ただし1は懐中電灯を2個使用し、ロボットの動作中は懐中電灯を動かさないがいろいろな距離や方向にある懐中電灯に対応できるロボットにする。2は懐中電灯を1個使用し懐中電灯をゆっくり動かす。

1、全方向から2つの懐中電灯の方向を探しだし、懐中電灯を狙ってホイールを投げる。可能な限り正確な方向に投げること。(ヤマモト担当)

2、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。(もろ担当)  

2、私たちのロボット

   全貌

全貌

   正面

正面

工夫したところ

   真上

真上

   発射台真上

発射台真上

 ロボットから二連射が出来るように玉を横にして重力で玉が装填できるように工夫しました。

全貌

 棒が直接モーターに繋がっており棒がバットみたいに玉を打ち出す仕組みになっています。

苦労したところ

玉を発射する装置をいかに安定してつけるかに苦労しました。 あと、玉の二連射目を装填した時玉をずれないように装填するのにブロックを配置するのに苦労しました。上の写真を見てわかるように玉を装填する穴を出来るだけ玉の形に地近づけることで解決しました。

3、私たちのプログラム

顱△發蹐離廛蹈哀薀

#define go OnFwd(OUT_A+OUT_C);                       //進む       
#define turn_right OnFwd(OUT_C);OnRev(OUT_A);     //右に曲がる
#define turn_left OnFwd(OUT_A);OnRev(OUT_C);      //左に曲がる
#define tomaru Off(OUT_A+OUT_C);                     //止まる
#define back OnRev(OUT_A+OUT_C);            //戻る
#define goes OnFwd(OUT_A+OUT_C);Wait(40);        //0、4秒進む
#define nageru OnFwd(OUT_B);Wait(10);          //投げる

  上記の定義を用いました。

task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT);
SetSensorMode(SENSOR_1,SENSOR_MODE_RAW);
SetSensorMode(SENSOR_3,SENSOR_MODE_RAW);

int lmax = 0;                      //光の変数
int tmax = 0;                      //時間の変数
ClearTimer(0);

while(FastTimer(0)<800)                  //一周回り一番光の強い値を測定する
{
turn_right;
if(SENSOR_1>lmax){
lmax = SENSOR_1;
tmax = FastTimer(0);
}
}
turn_left;                         //一番光の強い位置へ行く
Wait(800-tmax);
PlaySound(SOUND_UP) ;  Wait(20);

while(true){

if((SENSOR_1 < lmax-5)||(SENSOR_3 < lmax-5 )){    //両方の光センサーがlmaxを下回る時どちらかのセンサーがlmaxを指すまで進む。
go;
until((SENSOR_1 == lmax-5)&&(SENSOR_3 == lmax-5));
PlaySound(SOUND_UP) ;  Wait(20);
nageru;
}

else if((SENSOR_1 == lmax)||(SENSOR_3 < lmax)){    //右センサーがlmaxを下回る時lmaxになるまで右回転をさせる。
turn_right;
until  ((SENSOR_1 == lmax-5)||(SENSOR_3== lmax-5)); //左センサーがlmaxを下回る時lmaxになるまで左回転をさせる。
         PlaySound(SOUND_UP) ;  Wait(20);
          turn_right;Wait(6);
            nageru; 
}

 else if((SENSOR_1 < lmax)||(SENSOR_3 == lmax)){
           turn_left;
 until  ((SENSOR_1 == lmax-5)||(SENSOR_3== lmax-5));
 turn_left; Wait(6);
 nageru;
 
 }
}
} 

もろの反省

 プログラミングでセンサー1と2が反応したら投げろというプログラムにしたが、光源を動かす前に発射してしまうことがあった。今思うとタイマーを使い何秒以上両センサーが反応したら投げろとしたほうが正確性は高かったのではないかと感じた。

髻▲筌泪皀箸離廛蹈哀薀

 下記のプログラムは、実際には試せていません。

#define ss1 SENSOR_1                    // 光・センサ
#define ss3 SENSOR_3                    // 光・センサ
#define go_front OnFwd(OUT_A+OUT_C);    // 前進
#define STOP Off(OUT_A+OUT_C);          // 停止
#define t_r OnFwd(OUT_C);OnRev(OUT_A); // 右に曲がる
#define t_l OnFwd(OUT_A);OnRev(OUT_C); // 左に曲がる
#define throw OnFwd(OUT_B);Wait(10);  //  ブロックを投げる
#define RUN_TIME 800           //  80秒間動く

  上記の定義を用いました。

task main()
{
  SetSensor(ss1,SENSOR_LIGHT);          // ss1を光・センサに
  SetSensor(ss3,SENSOR_LIGHT);          // ss3を光・センサに
  int lmax = 0;             // 光の変数
  int tmax = 0;             // 時間の変数
  ClearTimer(0);              //  Timer(0) をリセット
  while(FastTimer(0)<RUN_TIME)     // 一周回り一番光の強い値を光・センサが感知した値とその時の時間を更新又は測定する
 {
  t_l;
  if(ss3>lmax){
  lmax = ss3;
  tmax = FastTimer(0);
               }
  }
  t_l;                    // 再度回り一番光の強い位置へ行く
  Wait(tmax);
  STOP;                                 // 停止
  go_front;
  Wait(15);                             // 0.15秒間前進
  STOP;                                 // 停止
  throw;                                // ブロックを発射

  while(FastTimer(0)<RUN_TIME)     // 今度は、逆に一周回り一番光の強い値を光・センサが感知した値とその時の時間を更新又は測定する
 {
  t_r;
  if(ss1>lmax){
  lmax = ss1;
  tmax = FastTimer(0);
               }
  }
  t_r;                    // 再度回り一番光の強い位置へ行く
  Wait(tmax);
  STOP;                                 // 停止
  go_front;
  Wait(15);                             // 0.15秒間前進
  STOP;                                 // 停止
  throw;                                // ブロックを発射
  }

ヤマモトの反省

ロボの作成がなかなか進まず大変でした。
プログラムを試せていないのが残念です。

4、全体の反省

 ロボ制作が遅れてしまい、プログラミングを修正する時間があまりとれなかったので、玉を飛ばす正確性が少し欠けてしまった。

5、コメント欄

コメントお願いします。

  • まだ終わっていないみたいなので、完成したらまた見ます。-- FI?
  • 少し手直ししておきました。(邪魔ならこのコメントを削除して結構です。) -- カワシマ? 2010-08-02 (月) 06:00:15
  • 実際に試さなくてもよいので、もう一人もプログラムをはってください -- FI? 2010-08-15 (日) 20:49:23


添付ファイル: fileDVC00017.jpg 202件 [詳細] fileDVC00016.jpg 208件 [詳細] file136.JPG 203件 [詳細] file135.JPG 194件 [詳細] file134.JPG 108件 [詳細] file133.JPG 206件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-08-19 (木) 22:10:39 (3289d)