サブゴール2


最初に今回のサブゴール2で僕たちが設定した
目標(サブゴール2)はコース上の黒線に沿って
とりあえず車を走らせるというものでした。
しかし車を実際に動かそうとしたところ、
車が走らない!?考えた結果、考えられる原因は
以下のようなものでした。
仮説1、電池が消耗している
しかし電池を換えてみたところ同様に動かなかった
ためこの仮説は正しくないことが証明された。


つぎに考えられる仮説が、

仮説2、モーターのパワーが弱い
しかしモータのパワーを8(最大)に変えてみたが走らない。


手詰まりになり他の班のモータを観察してみたところ
第3の仮説が浮かびあがってきた。

仮説3、車の構造自体に問題がある
おそらく車体が重すぎるかもしくはギア構造に問題があるの
だろう。そう思いさらに他の班の車を観察してみたところ、
次のことがわかった。
"車自体の重量は自分たちの班とそこまで変わらない。"
"ギア比が他の班は小さい値(だいたい 1:1 から 1:2 )
になっている"
一方、自分たちのマシンのギア比は約 1:3 。
よって問題はマシンのギア比にあることがわかった。
そして大規模なマシンの組換えを行い、
結果、マシンを走らせたところうまく走らせることが
できた。


その後、あらためて今回のサブゴール、
"マシンを黒線に沿って走らせる"
を実現させるプログラムの作成へととりかかった。


以下に作成したプログラムのソースを示す。
(実際には付属のLEGOソフト上で製作をおこなったが)


VERSION 5.00
Object = "{C6114D03-59EB-48D0-96E6-A27A8A65F021}#1.0#0"; "Phantom.dll"
Begin VB.Form Y2K_Speed 
   Caption         =   "Y2K For Atonomous Speed Circuit"
   ClientHeight    =   4065
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   5685
   LinkTopic       =   "Form1"
   ScaleHeight     =   4065
   ScaleWidth      =   5685
   StartUpPosition =   3  'Windows の既定値
   Begin VB.CommandButton Command1 
      Caption         =   "Command1"
      Height          =   1215
      Left            =   720
      TabIndex        =   0
      Top             =   120
      Width           =   1335
   End
   Begin PHANTOMLibCtl.PhantomCtrl RCX 
      Left            =   0
      Top             =   0
      ComPortNo       =   0
      LinkType        =   0
      Brick           =   0
   End
End
Attribute VB_Name = "Y2K_Speed"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Command1_Click()
Dim white As Integer
Dim blue As Integer
Dim silver As Integer

white = 22
blue = 35
silver = 50

RCX.SelectPrgm (4)

With RCX

    .BeginOfTask (0)
    .SetSensorType 1, 3
    .SetSensorMode 1, 4, 0
    
    .SetFwd "1"
    .Loop 2, 0
    
        .If 9, 1, 1, 2, white
            .SetPower 0, 2, 5
            .On "0"
            .On "1"
        
        .Else
            .SetPower 0, 2, 7
            .SetFwd "1"
            .On "0"
            .Off "1"
            
            .If 9, 1, 1, 2, blue
                .SetPower 0, 2, 5
                .SetRwd "1"
                .On "0"
                .On "1"
            
                .If 9, 1, 0, 2, silver
                    .PlaySystemSound 1
                    .SetPower 0, 2, 7
                    .SetFwd "1"
                    .On "0"
                    .Off "1"
                .EndIf
            .EndIf
            
        .EndIf
    .EndLoop
    .EndOfTask
End With

End Sub

Private Sub Form_Load()
RCX.InitComm

End Sub

Private Sub Form_Unload(Cancel As Integer)
RCX.CloseComm
End Sub
このプログラムの基本的な構造は
光センサーにより黒領域、グレー領域、白領域、銀領域
を判別し、それぞれの場合に応じた反応をマシンにさせる
ものである。
センサーの検出値を判断基準とし、if文によりそれぞれの
動作を記述してある。
<実行結果>
実行結果だが、物事、なかなか思ったようにはいかないものである。
黒領域から白領域へと進んだときに曲がろうとはするのだが、
なぜかステアリングがうまいこと回らない。。
結局、サブゴール2の達成具合は微妙なものとなってしまった。

ホームへ戻る