جدول المحتويات:

اردوينو الواقع الافتراضي: 4 خطوات
اردوينو الواقع الافتراضي: 4 خطوات

فيديو: اردوينو الواقع الافتراضي: 4 خطوات

فيديو: اردوينو الواقع الافتراضي: 4 خطوات
فيديو: دورة اردوينو :: 4- طريقة محاكاة لوحة اردوينو علي برنامج بروتوس 2024, شهر نوفمبر
Anonim
اردوينو VR
اردوينو VR

مرحبًا ، اسمي مسيحي وعمري 13 عامًا. أنا أحب اردوينو ولدي موهبة لذلك ، فإليك تعليمي لـ arduino vr.

اللوازم

اللوازم:

1. لوحة اردوينو ميجا أو مستحقة أو أونو أو يون.

2. ذكر إلى ذكر (أسلاك العبور القياسية).

3. اللوح الصغير

4. USB

5. GY-521 MPU-6050

اختياري:

6. 5.5 بوصة 2560 * 1440 2K شاشة LCD HDMI إلى MIPI

7. البعد البؤري لعدسة فرينل 50 مم

8. طابعة ثلاثية الأبعاد أو خدمة طابعة ثلاثية الأبعاد

الخطوة 1: التجميع

جمعيه
جمعيه

استخدم التخطيطي لتجميعه.

الخطوة الثانية: كيفية تثبيت المكتبة؟

ألق نظرة على Github: https://github.com/relativty/Relativ يمكنك إما تثبيته باستخدام Git أو التنزيل المباشر.

الخطوة 3: الكود

مطلوب // i2cdevlib و MPU6050:

// شكرًا جزيلًا لـ Jeff Rowberg <3 المذهل ، اذهب للتحقق من الريبو الخاص به لمعرفة المزيد MPU6050. // ================================================== ==============================

يجب تثبيت // I2Cdev و MPU6050 كمكتبات ، وإلا يجب أن تكون ملفات.cpp /.h // لكلا الفئتين في مسار التضمين الخاص بمشروعك

# تضمين "Relativ.h"

# تضمين "I2Cdev.h"

# تضمين "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] ؛

رباعي ف ؛ // [w، x، y، z]

متغير منطقي mpuInterrupt = خطأ ؛ // يشير إلى ما إذا كان طرف MPU المقاطعة قد أصبح فارغًا dmpDataReady () {mpuInterrupt = true؛ }

إعداد باطل () {#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin () ؛ Wire.setClock (400000) ؛ // ساعة 400 كيلو هرتز I2C. علق على هذا السطر إذا واجهت صعوبات في الترجمة #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400، true)؛ #إنهاء إذا

relativ.startNative () ، يمكن استخدام // "startNative" لوحدة التحكم الدقيقة الأساسية ARM ذات 32 بت مع USB الأصلي مثل Arduino DUE // الذي يوصى به. // Relativ.start () ؛ // "start" مخصصة لمتحكم دقيق USB غير أصلي ، مثل 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 (صحيح) ؛

// تمكين Arduino interrupt Detection attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN) ، dmpDataReady ، RISING) ؛ mpuIntStatus = mpu.getIntStatus () ،

dmpReady = صحيح ؛

// احصل على حجم حزمة DMP المتوقع لحزمة المقارنة اللاحقة = mpu.dmpGetFIFOPacketSize () ؛ } آخر {// ERROR! }}

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 () ؛ } // تحقق من مقاطعة else if (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، qw، 4) ؛ // updateOrientationNative "يمكن استخدامه لوحدة التحكم الدقيقة الأساسية 32 بت ARM مع USB الأصلي مثل Arduino DUE // الموصى به. //relativ.updateOrientation(qx، qy، qz، qw، 4)؛ // Relativ.updateOrientation" هو بالنسبة إلى متحكم USB غير الأصلي ، مثل Arduino MEGA و Arduino UNO.. // هذه أبطأ بشكل ملحوظ. }}

الخطوة 4: العب

يجب أن يؤدي تحريك اللوح الصغير في أي لعبة الواقع الافتراضي إلى تدوير الكاميرا

موصى به: