[[2006b/MemberOnly/進行状況A]]

[[2006b/MemberOnly/進行状況A]]

[[2006b/MemberOnly/進行状況A]]

*課題2 黒い線に沿って動くロボット[#udcb530a]

#contents

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

&ref(robotic_044.jpg);   &ref(robotic_042.jpg);

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

&ref(robotic_045.jpg);

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

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


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

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

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

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

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

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

*プログラム [#qb53a474]
**プログラム1(反転) [#w5f844d0]
相手のロボットに接触したら反転して進むプログラムを作ります。

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

タッチセンサーを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(右に避ける) [#ib48881a]
このプログラムはifやwhileを使ったNQC入門で学んだ基本的なプログラムを利用して作りました。
***工夫した点 [#kaec8cc9]
『&&』を仮定式のところで利用して仮定式を一つに分かりやすくまとめた事です。

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

*コメント [#g483ce3d]
-もう少し、レポートとしての構成を考えて書くと良いと思いますよ。日記とは違いますからね。 -- [[ゆき(TA)]] &new{2006-12-15 (金) 13:11:42};
-写真がでかすぎる気がします… -- [[ゆき(TA)]] &new{2006-12-22 (金) 13:07:18};

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS