目次

今回の課題

懐中電灯に向かって飛ばすロボット

黄色いホイールを2個以上連射するロボットを作成し、以下の動きをするようにプログラムを作成する。

ただし1,3は懐中電灯を2個使用し、ロボットの動作中は懐中電灯を動かさないがいろいろな距離や方向にある懐中電灯に対応できるロボットにすること。

2は懐中電灯を1個使用し懐中電灯をゆっくり動かす。

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

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

3. 全方向から2つの懐中電灯の方向を探しだし、40cmの距離に近づいて懐中電灯を狙ってホイールを投げ、懐中電灯に当てる。

メンバー紹介

 風魔tk  D

ロボット

全体

20100723161755.jpg

小回りが利くようにロボットは小さめに作りました。

20100723161852.jpg

後ろに補助輪を付け、安定させました。

光センサー

20100723161818.jpg

発射台

正面

20100723162222.jpg

だるま落としのイメージです。ホイールを打ち出すと、上のホイールが落ちてそのまま装てんされます。

上面

20100723162109.jpg

ホイールの弾道を安定させるためにブロックでバレルを作りました。

側面

20100723162036.jpg

大きいギアから小さいギアへと回転するので、速く回り、勢いよくホイールを打ち出せるようにしました。

また、見えづらいのですが、ホイールがスムーズに打ち出されるように軸で支えています。この軸で打ち出す角度を調整することもできます。

プログラム

風魔tk

 #define TURN_TIME 300             //時間を3秒間とした
task main () 
{ 
int light_max=0;
int t_max=0;
SetSensor(SENSOR_1,SENSOR_LIGHT);  //光センサーを1にセット
SetPower(OUT_B,5);                 //投擲モーターの出力5
ClearTimer(0);                     //タイマーリセット
OnFwd(OUT_A);OnRev(OUT_C);    //3秒間回る
while(FastTimer(0)<TURN_TIME){
if(SENSOR_1>light_max){
light_max=SENSOR_1;             //以前よりも明るい場所があった場合その場所を記録
t_max=FastTimer(0);
}
OnFwd(OUT_C);OnRev(OUT_A);
Wait(TURN_TIME-t_max);         //最も明るかった場所まで戻る
Off(OUT_A+OUT_C);}
OnFwd(OUT_B);                     //ブロックを投げる
Wait(9); 
Off(OUT_B);
}

D

(2)懐中電灯に向かって進み、一定の距離まで近づいて、懐中電灯を狙ってブロックを投げる

#define THRESHOLD 40//
int lmax=0;
int tmax=0;//最大値を実現する時刻
tmax=FirstTimer(0);
sub discover(){  //サブルーチン 光の最大値を見つける
  ClearTimer(0);
  OnFwd(OUT_A);OnRev(OUT_C);
  while(FirstTimer(0)<800){
    if(SENSOR_1>lmax){
      lmax=SENSOR_1;{
      Wait(5);}
  OnFwd(OUT_C);OnRev(OUT_A);
  Wait(800- tmax);
  Off(OUT_A+OUT_C);
  }
  }
task main(){
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_LIGHT);
  discover();
   ClearTimer(1);//タイマーのリセット
     while(Timer(1)<100){
     if((SENSOR_1> THRESHOLD)&&(SENSOR_3> THRESHOLD)){
           OnFwd(OUT_A+OUT_C);Wait();
              }//センサー1、3がどちらも明るいとき、直進
     if((SENSOR_1> THRESHOLD)&&(SENSOR_3< THRESHOLD)){
           OnFwd(OUT_C);OnRev(OUT_A);Wait();
              }//センサー1が明るく、3が暗いとき、左回転  
     if((SENSOR_1< THRESHOLD)&&(SENSOR_3> THRESHOLD)){
           OnFwd(OUT_A);OnRev(OUT_C);
              }//センサー1が暗く、3が明るいとき、右回転
     if((SENSOR_1< THRESHOLD)&&(SENSOR_3< THRESHOLD)){
           discover();
              }//センサー1、3がどちらも暗いとき、光を見つける
     if((SENSOR_1>60)&&(SENSOR_3>60)){
           Off(OUT_A+OUT_C);
           OnFwd(OUT_B);Wait(8);Off(OUT_B);
          }//光に30cmまで近づいたとき、停止してブロックをとばす

  }

  

工夫した点、苦労した点

風魔tk

一番明るいところを見つけるプログラムを作るところまでは比較的簡単だったが、二番目に明るいところを見つけるプログラムを作れずに終わってしまった。

D

はじめは勢いが足りず、ホイールがうまく飛ばなかったので、ギア比を調整して、速く回転するようにした。ホイールを打ち出す角度も何度も試行錯誤して自由に変えられるものにした。

感想

風魔tk

他の課題に比べ時間が圧倒的に短く、短い時間で完成までもっていくのがとても大変だった。

D

どうやってホイールをとばすか悩んだ。時間があればもっと工夫したかった。

コメント

コメントをどうぞ!

  • 工夫したところなども書いてみてください。一人目のプログラムは、二つの懐中電灯を探すことが必要です -- FI? 2010-07-30 (金) 22:07:26
  • 写真に印などを入れると良いと思います。試行錯誤の点をさらに書いてみてください -- TAKA? 2010-08-08 (日) 11:48:47


添付ファイル: file20100723161755.jpg 171件 [詳細] file20100723161818.jpg 181件 [詳細] file20100723161852.jpg 176件 [詳細] file20100723161913.jpg 88件 [詳細] file20100723162036.jpg 181件 [詳細] file20100723162109.jpg 172件 [詳細] file20100723162222.jpg 168件 [詳細]

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