2.サブゴール2に関するレポート


  • 実験内容

    今回2種類ある競技のうち、競技1.スピード競争(Autonomous Speed Circuit)を選択した。
    この競技を目標にして実験を行う。


  • 準備

    フォームに新しいボタンを貼り付けて、
    Captionを”Total Sensor”、名前をcmdTotalSensorと付ける。
    そして、以下のコードを書く。


  • プログラム

    Private Sub cmdTotalSensor_Click()'ボタンが押されたらこのVBの
                     'サブルーチンが実行される

     RCX.SelectPrgm (4)

     With RCX
                     '#1
      .BeginOfSub (1)        'ステアリングその1
        .Off "2"         '一度駆動モータを止める
       .While 9, 2, 2, 2, -1    '角度センサーの値が-1になるまで
        .SetFwd "0"        'ステアリングモータを正方向に回す
        .On "0"
       .EndWhile
       .Off "0"          'ステアリングモータをOff
       .Wait 2, 10         '0.1秒待って
       .On "2"           '駆動モータをOn
       .If 9, 0, 0, 2, 30     '黒を感知したら
        .Off "2"         '駆動モータをOff
        .While 9, 2, 2, 2, 0   '角度センサの値が0になるまで
         .SetRwd "0"       'ステアリングモータを逆方向に回す
         .On "0"
        .EndWhile
        .Off "0"         'ステアリングモータをOff
        .Wait 2, 10        '0.1秒待って
        .On "2"          '駆動モータをOn
       .EndIf
      .EndOfSub
                     '#2
      .BeginOfSub (2)        'ステアリングその2
       .Off "2"          '一度駆動モータを止める
       .While 9, 2, 2, 2, -3    '角度センサーの値が-3になるまで
        .SetFwd "0"        'ステアリングモータを正方向に回す
        .On "0"         
       .EndWhile         
       .Off "0"          'ステアリングモータをOff
       .Wait 2, 10         '0.1秒待って
       .On "2"           '駆動モータをOn
       .If 9, 0, 0, 2, 30     '黒を感知したら
        .Off "2"         
        .While 9, 2, 2, 2, 0   '角度センサの値が0になるまで
         .SetRwd "0"       'ステアリングモータを逆方向に回す
         .On "0"        
        .EndWhile        
        .Off "0"         'ステアリングモータをOff
        .Wait 2, 10        '0.1秒待って
        .On "2"          '駆動モータをOn
       .EndIf
      .EndOfSub

      .BeginOfTask (0)       'Task0の定義
       .SetSensorType 0, 3     '光センサをポート0と定義
       .SetSensorMode 0, 4, 0   '光センサの値をパーセントに定義
       .SetSensorType 2, 4     '角度センサをポート2と定義
       .SetSensorMode 2, 7, 0   '角度センサーの値を角度に定義
       .SetPower 2, 2, 2      '駆動モータのパワーを2に設定
       .On "2"           '駆動モータをOn
       .SetPower 2, 2, 4      '駆動モータのパワーを4に設定

       .Loop 2, 0         '無限ループ
        .If 9, 0, 0, 2, 57    '銀色の領域にいるとき
         .While 9, 0, 0, 2, 57  '銀色から抜けるまで
          .PlaySystemSound 3  '音を鳴らす
         .EndWhile
        .EndIf

        .If 9, 0, 2, 2, 47    '光センサーが白を感知したら
         .GoSub (1)       'サブルーチン1(#1)へ
        .EndIf

        .If 9, 0, 2, 2, 40    '光センサーが灰色を感知したら
         .GoSub (2)       'サブルーチン2(#2)へ
        .EndIf          'If文の終わり
       .EndLoop          'ループの終わり
      .EndOfTask          'Task0の定義の終わり

     End With

    End Sub



  • マシンの構造の説明

    フォームに取り付けたボタン”Total Sensor”を押すと、プログラムがRCXにダウンロードされる。
    RCXの入力ポート1に光センサを、入力ポート3に角度センサをそれぞれ取り付ける。
    出力ポートAに取り付けたモーターは前輪の角度を調節するためのステアリングモータとして使用する。
    出力ポートCに取り付けたモーターは後輪を前進させるための駆動モータとして使用する。
    ステアリングは角度センサとステアリングモータで制御する。


  • プログラムのフローチャート


      ★前進(光センサが黒色の上を通過しているはずの状態)⇒

        光センサが黒色以外を感知した時⇒Task0実行⇒

         Task0
          光センサが銀色を感知した時⇒音を鳴らす⇒★に戻る
          光センサが白色を感知した時⇒サブルーチン1へ
          光センサが灰色を感知した時⇒サブルーチン2へ

            サブルーチン1
              コースアウトしないように前輪を傾けて黒色を感知させるようにする⇒★に戻る

            サブルーチン2
              カーブを曲がるようにサブルーチン1の時より前輪を大きく傾けて前進する⇒★に戻る