Arduino Vr: 4 שלבים
Arduino Vr: 4 שלבים
Anonim
Arduino Vr
Arduino Vr

היי שמי כריסטיאן ואני בן 13. אני אוהב ארדואינו ויש לי כישרון לזה אז הנה ההנחיה שלי עבור ארדואינו VR.

אספקה

אספקה:

1. לוח Arduino מגה, דו, אונו או יון.

2. חוטי זכר לזכר (חוטי מגשר סטנדרטיים).

3. קרש לחם קטן

4. USB

5. GY-521 MPU-6050

אופציונאלי:

6. 5.5 אינץ '2560*1440 מסך LCD 2K HDMI ל- MIPI

7. עדשת פרנל אורך מוקד 50 מ מ

8. שירות מדפסת תלת מימד או מדפסת תלת מימד

שלב 1: הרכבה

להרכיב
להרכיב

השתמש בסכימה כדי להרכיב אותו.

שלב 2: כיצד להתקין את הספרייה?

תסתכל על Github: https://github.com/relativty/Relativ תוכל להתקין אותו באמצעות Git או להוריד ישירות.

שלב 3: קוד

// יש צורך ב- i2cdevlib ו- MPU6050:

// תודה רבה לג'ף רווברג המדהים <3, לכו לבדוק את המאגר שלו כדי ללמוד עוד MPU6050. // ================================================= ==============================

// I2Cdev ו- MPU6050 חייבים להיות מותקנים כספריות, או שקבצי.cpp/.h // עבור שני המחלקות חייבים להיות בנתיב הכלול של הפרויקט שלך

#כלול "Relativ.h"

#כלול "I2Cdev.h"

#כלול "MPU6050_6Axis_MotionApps20.h"

#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #כלול "Wire.h" #endif

MPU6050 mpu; יחסית יחסית;

#הגדר INTERRUPT_PIN 2

// סטטוס ובקרה של IMU: bool dmpReady = false; // נכון אם DMP init הצליח uint8_t mpuIntStatus; uint8_t devStatus; // 0 = הצלחה,! 0 = שגיאה uint16_t packetSize; uint16_t fifoCount; uint8_t fifoBuffer [64];

Quaternion q; // [W X Y Z]

בול נדיף mpuInterrupt = false; // מציין אם סיכת ההפרעה של MPU הפכה לחלל חלל dmpDataReady () {mpuInterrupt = true; }

הגדרת בטל () {#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // שעון I2C של 400kHz. הגיבו על שורה זו אם יש לכם קשיי הידור #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif

relativ.startNative (); // ניתן להשתמש ב- "startNative" עבור מיקרו-בקר ARM 32 סיביות עם Native USB כמו Arduino DUE // וזה מומלץ. // Relativ.start (); // "התחל" מיועד לבקר מיקרו USB מסוג NON-NATIVE, כמו Arduino MEGA, Arduino UNO.. // אלה הם איטיים יותר באופן משמעותי. mpu.initialize (); pinMode (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 (true);

// הפעל את זיהוי הפרעות Arduino attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus ();

dmpReady = true;

// קבל את גודל חבילת DMP הצפויה להשוואה מאוחר יותר packetSize = mpu.dmpGetFIFOPacketSize (); } אחר {// שגיאה! }}

לולאת void () {// אל תעשה כלום אם DMP לא יאתחל כראוי אם (! dmpReady) החזרה;

// המתן עד ש- MPU interrupt או חבילות נוספות יהיו זמינות בזמן (! mpuInterrupt && fifoCount <packetSize) {}

// אפס את דגל הפרעה וקבל INT_STATUS בייט mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus ();

// קבל את ספירת FIFO הנוכחית fifoCount = mpu.getFIFOCount ();

if ((mpuIntStatus & 0x10) || fifoCount == 1024) {mpu.resetFIFO (); } // בדוק אם יש הפרעה אחרת אם (mpuIntStatus & 0x02) {while (fifoCount <packetSize) fifoCount = mpu.getFIFOCount (); mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount -= packetSize; 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 צריכה לסובב את המצלמה

מוּמלָץ: