2006b/MemberOnly/進行状況A

2006b/MemberOnly/進行状況A

2006b/MemberOnly/進行状況A

課題2 黒い線に沿って動くロボット

コース

初めはサメの形にしたのですが、ちょっと曲がる角度がきつ過ぎてすぐ脱線してしまうのでちょっと簡単な形にしました。

robotic_044.jpg robotic_042.jpg

ロボット

タッチセンサーと光センサー2つをつけたロボットを作ります。

robotic_045.jpg

問題

  1. 光センサーは下向きに付けなくてはいけないので、ブロックを縦から横にしなければいけません。
  2. 光センサーは本体に近い所につけたいし、小回りさせるためにセンサー同士をできるだけ近づけたい。

工夫した点

すごく試行錯誤した結果、直角になっている部品と穴の開いたブロックを使って上手く縦から横にして光センサーをつけました。

完成だと思ったのですが、コースで試してみたら脱線してしまいました。

まだ2つの光センサーの幅が広いことが原因かもしれないと思って、2つのセンサーを完全にくっつけることにしました。

改造してタッチセンサーの下に光センサー2つを並べてくっつけることにしました。robotic_049.jpg

しかしセンサーが下についてしまいます。

robotic_050.jpg また改造してタッチセンサーの位置を高くしました。

ロボット完成!!細かく動いてちゃんと線の上を走りました。 robotic_048.jpg

プログラム

プログラム1(反転)

相手のロボットに接触したら反転して進むプログラムを作ります。

タッチセンサーと光センサーがどの場所につながっているか気をつけながら作りました。

タッチセンサーをBにつなげてプログラムを作ったのですが、それでは動かなかったので、タッチセンサーを2の方に重ねてつなげて下のプログラムでやってみました。

ばっちり動きました!!

#define    THRESHOLD   40
task   main()
{
   SetSensor(SENSOR_1,SENSOR_LIGHT);
   SetSensor(SENSOR_3,SENSOR_LIGHT);
   SetSensor(SENSOR_2,SENSOR_TOUCH);
   
   
   while(true)
   {
       if(SENSOR_3<THRESHOLD)
       {OnFwd(OUT_A);
         Off(OUT_C);}
       if(SENSOR_1<THRESHOLD)
       {OnFwd(OUT_C);
         Off(OUT_A);}                        
        if(SENSOR_2==1)
        {OnRev(OUT_A+OUT_C);
          Wait(50);
          OnFwd(OUT_A);
          OnRev(OUT_C);
          Wait(50);  }                        
      }
}

プログラム2(右に避ける)

このプログラムはifやwhileを使ったNQC入門で学んだ基本的なプログラムを利用して作りました。

工夫した点

『&&』を仮定式のところで利用して仮定式を一つに分かりやすくまとめた事です。

二つの光センサーは間隔を変えられるように取り付けたので、プログラムはあまり変えずに、ロボットの光センサーの位置を変える事でコース上をロボットがうまく動けるように工夫した。

task main()
{SetSensor(SENSOR_1, SENSOR_LIGHT);
 SetSensor(SENSOR_3, SENSOR_LIGHT);
 while(true)
   {
    if(SENSOR_1<40)
     {OnFwd(OUT_C);OnRev(OUT_A);}
    if(SENSOR_3<40)
     {OnFwd(OUT_A);OnRev(OUT_C);}
    if((SENSOR_1>40)&&(SENSOR_2>40))
     {OnFwd(OUT_A+OUT_C);if(SENSOR_2==1)
       {OnRev(OUT_A+OUT_C);
        Wait(40);
        OnFwd(OUT_A);OnRev(OUT_C);
        Wait(60);
        OnFwd(OUT_A+OUT_C);
        Wait(120);
        OnFwd(OUT_C);OnRev(OUT_A);
        Wait(60);
        OnFwd(OUT_A+OUT_C);
        Wait(120);
        OnFwd(OUT_C);
        OnRev(OUT_A);
        Wait(60);
       }
     }
    }
 }

コメント



添付ファイル: filerobo.課題2-1 154件 [詳細] filerobotic_052.jpg 156件 [詳細] filerobotic_051.jpg 152件 [詳細] filerobotic_050.jpg 293件 [詳細] filerobotic_049.jpg 310件 [詳細] filerobotic_048.jpg 301件 [詳細] filerobotic_047.jpg 160件 [詳細] filerobotic_046.jpg 184件 [詳細] filerobotic_045.jpg 291件 [詳細] filerobotic_044.jpg 318件 [詳細] filerobotic_042.jpg 301件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-02-02 (金) 13:39:18