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);
       }
     }
    }
 }

コメント

  • もう少し、レポートとしての構成を考えて書くと良いと思いますよ。日記とは違いますからね。 -- ゆき(TA)? 2006-12-15 (金) 13:11:42
  • 写真がでかすぎる気がします… -- ゆき(TA)? 2006-12-22 (金) 13:07:18


添付ファイル: filerobo.課題2-1 91件 [詳細] filerobotic_052.jpg 101件 [詳細] filerobotic_051.jpg 95件 [詳細] filerobotic_050.jpg 181件 [詳細] filerobotic_049.jpg 208件 [詳細] filerobotic_048.jpg 200件 [詳細] filerobotic_047.jpg 99件 [詳細] filerobotic_046.jpg 129件 [詳細] filerobotic_045.jpg 190件 [詳細] filerobotic_044.jpg 204件 [詳細] filerobotic_042.jpg 196件 [詳細]

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