11 สิงหาคม 2553

การใช้งาน Wiimote ควบคุม Lego NXT

การใช้งาน Wiimote ควบคุม Lego NXT

แนะนำการใช้งาน Wiimote เป็นรีโมทของเครื่องเล่นเกม wii

และชุดฝึกทักษะหุ่นยนต์ LegoNXT ร่วมกัน
สิ่งที่ต้องเตรียม
1. wiimote
2. คอมพิวเตอร์ที่มีบลูทูธ 2.0+EDR
3. Lego NXT

โปรแกรม
1. Visual Studio C# 2008 ถ้าไม่มีแนะนำ Version ฟรี
2. Managed Library for Nintendo's Wiimote สำหรับติดต่อกับ wiimote
3. LogoAForge.NET Framework สำหรับติดต่อกับ Lego NXT ติดตั้งให้เรียบร้อย

เริ่มกันเลย
เปิดโปรเจ็ค ที่อยู่ใน samples\WiimoteTestCS ของ WiimoteLib เพื่อเปิด VS
เพิ่ม library

ให้เพิ่ม Reference ของ AForge.Robotics.Lego จะของในที่ๆติดตั้ง AForge \AForge.NET\Framework\Release


เปิด code ของ Form1.cs


ในส่วนของ Header ด้านบนเพิ่ม
using AForge.Robotics.Lego;


ในส่วนของ Constructor เพิ่ม
// NXT brick
        private NXTBrick nxt = new NXTBrick();
        private NXTBrick.MotorRunState[] runStates = new NXTBrick.MotorRunState[]
        {
            NXTBrick.MotorRunState.Idle,
            NXTBrick.MotorRunState.RampUp,
            NXTBrick.MotorRunState.Running,
            NXTBrick.MotorRunState.RampDown
        };

        // NXT brick
        private NXTBrick nxt = new NXTBrick();
        private NXTBrick.MotorRunState[] runStates = new NXTBrick.MotorRunState[]
        {
            NXTBrick.MotorRunState.Idle,
            NXTBrick.MotorRunState.RampUp,
            NXTBrick.MotorRunState.Running,
            NXTBrick.MotorRunState.RampDown
        };
เพิ่ม object ของ Lego NXT


        // walk
        bool walkOn = true;
        bool legLeft = true;
        System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();


        public void Walk(object sender, EventArgs eArgs)

        {
            NXTBrick.MotorState motorStateGo = new NXTBrick.MotorState();
            motorStateGo.Power = (sbyte)127;
            motorStateGo.TurnRatio = (sbyte)50;
            motorStateGo.Mode = NXTBrick.MotorMode.On;// NXTBrick.MotorMode.Brake, NXTBrick.MotorMode.None, NXTBrick.MotorMode.Regulated
            motorStateGo.RunState = runStates[2]; //0:Idle, 1:RampUp, 2:Running, 3:RampDown
            legLeft = !legLeft;
            if (legLeft)
            {
                //left leg forward
                // set motor's state
                if (nxt.SetMotorState(NXTBrick.Motor.C, motorStateGo) != true)
                {
                    System.Diagnostics.Debug.WriteLine("Failed setting motor state");
                }          
            }
            else
            {
                //Right leg forward
                if (nxt.SetMotorState(NXTBrick.Motor.B, motorStateGo) != true)
                {
                    System.Diagnostics.Debug.WriteLine("Failed setting motor state");
                }    
            }
        }


เพิ่ม Method สำหรับการเดิน

Link เมื่อกดปุ่ม Wiimote แล้วสั่งให้มอเตอร์ทำงาน หุ่นยนต์ก็จะเดิน
ภายใน Method UpdateWiimoteState จะมีตัวแปร ws ของ wiimote อยู่

ซึ่งเราจะใช้คำสั่ง if เช็คว่ามีการกดปุ่มนั้นๆหรือไม่ ถ้ามีเราจะสั่งให้หุ่นยนต์ เคลื่อนที่
โค๊ดตัวอย่างการกดปุ่มขึ้น
            if (ws.ButtonState.Up)
            {
                // your code when Press Up Buttom
            }

 เพียงเท่านั้นเราก็เชื่อมต่อ Wiimote กับ Lego NXT ได้แล้ว
อ่อ มันต้องเชื่อมต่อกันผ่านคอมนะครับ เชื่อมกันโดยตรงไม่ได้

ดาวน์โหลดซอร์สโค๊ด ไปศึกษาดูนะครับ
ติดอะไรก็เมลมาถามได้




ไม่มีความคิดเห็น: