สารบัญ:

Arduino Vr: 4 ขั้นตอน
Arduino Vr: 4 ขั้นตอน

วีดีโอ: Arduino Vr: 4 ขั้นตอน

วีดีโอ: Arduino Vr: 4 ขั้นตอน
วีดีโอ: Arduino & Microcontroller การพัฒนาระบบอัตโนมัติด้วย Tinkercad ตอนที่ 4 ควบคุมความเร็วไฟวิ่งด้วย VR 2024, พฤศจิกายน
Anonim
Arduino Vr
Arduino Vr

สวัสดี ฉันชื่อคริสเตียน และฉันอายุ 13 ปี ฉันรัก Arduino และมีความสามารถดังนั้นนี่คือคำแนะนำของฉันสำหรับ Arduino vr

เสบียง

เสบียง:

1. บอร์ด Arduino Mega, Due, Uno หรือ Yun

2. สายตัวผู้ถึงตัวผู้ (สายจัมเปอร์มาตรฐาน)

3. เขียงหั่นขนมขนาดเล็ก

4. USB

5. GY-521 MPU-6050

ไม่จำเป็น:

6. 5.5 นิ้ว 2560*1440 2K หน้าจอ LCD HDMI เป็น MIPI

7. เลนส์ Fresnel ความยาวโฟกัส 50mm

8. บริการเครื่องพิมพ์ 3 มิติหรือเครื่องพิมพ์ 3 มิติ

ขั้นตอนที่ 1: ประกอบ

ประกอบ
ประกอบ

ใช้แผนผังเพื่อประกอบเข้าด้วยกัน

ขั้นตอนที่ 2: วิธีการติดตั้งไลบรารี่?

ดูที่ Github: https://github.com/relativty/Relativ คุณสามารถติดตั้งโดยใช้ Git หรือดาวน์โหลดโดยตรง

ขั้นตอนที่ 3: รหัส

// ต้องการ i2cdevlib และ MPU6050:

// ขอบคุณมากสำหรับ Jeff Rowberg ที่น่าทึ่ง <3 ไปตรวจสอบ repo ของเขาเพื่อเรียนรู้เพิ่มเติม MPU6050 //=============================================== =============================

// ต้องติดตั้ง I2Cdev และ MPU6050 เป็นไลบรารี มิฉะนั้น ไฟล์.cpp/.h // สำหรับทั้งสองคลาสต้องอยู่ในเส้นทางรวมของโปรเจ็กต์ของคุณ

#include "Relativ.h"

#รวม "I2Cdev.h"

#include "MPU6050_6Axis_MotionApps20.h"

#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif

MPU6050 เอ็มพียู; สัมพัทธภาพ;

#define INTERRUPT_PIN 2

// สถานะและการควบคุม IMU: bool dmpReady = false; // true ถ้า DMP init สำเร็จ uint8_t mpuIntStatus; uint8_t devStatus; // 0 = สำเร็จ, !0 = ข้อผิดพลาด uint16_t packetSize; uint16_t fifoCount; uint8_t fifoBuffer[64];

ควอเทอร์เนียน q; // [w, x, y, z]

บูลผันผวน mpuInterrupt = false; // ระบุว่าพินขัดจังหวะ MPU นั้นเป็นโมฆะสูงหรือไม่ dmpDataReady () { mpuInterrupt = true; }

การตั้งค่าเป็นโมฆะ () { #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock(400000); // นาฬิกา 400kHz I2C แสดงความคิดเห็นบรรทัดนี้หากมีปัญหาในการรวบรวม #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif

relativ.startNative(); // "startNative" สามารถใช้กับไมโครคอนโทรลเลอร์ ARM หลัก 32 บิตพร้อม Native USB เช่น Arduino DUE // ซึ่งแนะนำ // Relativ.start(); // "start" ใช้สำหรับไมโครคอนโทรลเลอร์ USB ที่ไม่ใช่ NON-NATIVE เช่น Arduino MEGA, Arduino UNO.. // สิ่งเหล่านี้ช้ากว่าอย่างเห็นได้ชัด mpu.initialize(); โหมดพิน (INTERRUPT_PIN, INPUT);

SerialUSB.println(mpu.testConnection() ? F("การเชื่อมต่อ MPU6050 สำเร็จ"): F("การเชื่อมต่อ MPU6050 ล้มเหลว"));

// กำหนดค่า DMP devStatus = mpu.dmpInitialize();

// ================================= // จัดหาไจโรออฟเซ็ตของคุณเองที่นี่: // === =============================== mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788);

// devSTatus ถ้าทุกอย่างทำงานอย่างถูกต้องถ้า (devStatus == 0) { // เปิด DMP ตอนนี้ก็พร้อมแล้ว mpu.setDMPEnabled (จริง);

// เปิดใช้งานการตรวจจับการขัดจังหวะ Arduino AttachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus ();

dmpReady = จริง;

// รับขนาดแพ็คเก็ต DMP ที่คาดไว้สำหรับการเปรียบเทียบในภายหลัง packetSize = mpu.dmpGetFIFOPacketSize(); } อื่น ๆ { // ข้อผิดพลาด! } }

void loop() {// ไม่ต้องทำอะไรหาก DMP เริ่มต้นไม่ถูกต้องหาก (!dmpReady) กลับมา;

// รอให้ MPU ขัดจังหวะหรือแพ็กเก็ตพิเศษในขณะที่ (!mpuInterrupt && fifoCount < packetSize) { }

// รีเซ็ตแฟล็กขัดจังหวะและรับ INT_STATUS ไบต์ mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus ();

// รับจำนวน FIFO ปัจจุบัน fifoCount = mpu.getFIFOCount();

ถ้า ((mpuIntStatus & 0x10) || fifoCount == 1024) { mpu.resetFIFO (); } // ตรวจสอบการขัดจังหวะอื่น if (mpuIntStatus & 0x02) { while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount(); mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount -= ขนาดแพ็คเก็ต; mpu.dmpGetQuaternion(&q, fifoBuffer); relativ.updateOrientationNative(q.x, q.y, q.z, q.w, 4); // updateOrientationNative" สามารถใช้กับไมโครคอนโทรลเลอร์ ARM หลัก 32 บิตพร้อม Native USB เช่น Arduino DUE // ซึ่งแนะนำ //relativ.updateOrientation(qx, qy, qz, qw, 4); // Relativ.updateOrientation" คือ สำหรับไมโครคอนโทรลเลอร์ USB ที่ไม่ใช่ NON-NATIVE เช่น Arduino MEGA, Arduino UNO.. // สิ่งเหล่านี้ช้ากว่ามาก } }

ขั้นตอนที่ 4: เล่น

การย้ายเขียงหั่นขนมขนาดเล็กในเกม vr ควรหมุนกล้อง

แนะนำ: