Mündəricat:

Arduino Vr: 4 addım
Arduino Vr: 4 addım

Video: Arduino Vr: 4 addım

Video: Arduino Vr: 4 addım
Video: Программирование AVR на языке Ассемблер, часть 4. "Зажигаем светодиод" 2024, Noyabr
Anonim
Arduino Vr
Arduino Vr

Salam Adım Christian, 13 yaşım var. Arduino'yu sevirəm və bunun üçün bir istedadım var, buna görə də bir arduino vr üçün mənim göstərişim budur.

Təchizat

Təchizat:

1. Arduino board Mega, Due, Uno və ya Yun.

2. Kişidən kişiyə (standart tullanan tellər) tellər.

3. Kiçik çörək taxtası

4. USB

5. GY-521 MPU-6050

İsteğe bağlı:

6. 5.5 düymlük 2560*1440 2K LCD Ekrandan HDMI -ya MIPI

7. Fresnel lensi Fokus Uzunluğu 50 mm

8. 3-D printer və ya 3d printer xidməti

Addım 1: yığın

Toplaşmaq
Toplaşmaq

Birləşdirmək üçün sxemdən istifadə edin.

Addım 2: Kitabxananı necə quraşdırmalısınız?

Github -a baxın: https://github.com/relativty/Relativ Git və ya birbaşa Yükləmə istifadə edərək quraşdıra bilərsiniz.

Addım 3: Kod

// i2cdevlib və MPU6050 lazımdır:

// İnanılmaz Jeff Rowberg <3 sayəsində, MPU6050 haqqında daha çox məlumat əldə etmək üçün onun reposunu yoxlayın. // ============================================== ============================

// I2Cdev və MPU6050 kitabxana kimi quraşdırılmalıdır, yoxsa hər iki sinif üçün.cpp/.h faylları // layihənizin daxil edilmə yolunda olmalıdır.

#"Relativ.h" daxil edin

#"I2Cdev.h" daxil edin

#"MPU6050_6Axis_MotionApps20.h" daxil edin

#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #"Wire.h" daxil edin #endif

MPU6050 mpu; Nisbi nisbi;

#INTERRUPT_PIN 2 təyin edin

// IMU statusu və nəzarəti: bool dmpReady = false; // doğrudur, əgər DMP init uğurlu olarsa uint8_t mpuIntStatus; uint8_t devStatus; // 0 = uğur,! 0 = səhv uint16_t packetSize; uint16_t fifoCount; uint8_t fifoBuffer [64];

Quaternion q; // [w, x, y, z]

uçucu bool mpuInterrupt = false; // MPU kəsmə pininin yüksək boşluğa getdiyini göstərir dmpDataReady () {mpuInterrupt = true; }

void setup () {#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400kHz I2C saatı. Kompilyasiya çətinlikləri varsa bu sətiri şərh edin #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif

relativ.startNative (); // "startNative", tövsiyə olunan Arduino DUE // kimi Yerli USB ilə 32 bitlik ARM əsas mikro nəzarətçi üçün istifadə edilə bilər. // Relativ.start (); // "başlanğıc" Arduino MEGA, Arduino UNO kimi NON-NATIVE USB mikro nəzarətçiləri üçündür.. // Bunlar xeyli yavaşdır. mpu.initialize (); pinMode (INTERRUPT_PIN, GİRİŞ);

SerialUSB.println (mpu.testConnection ()? F ("MPU6050 bağlantısı uğurlu"): F ("MPU6050 bağlantısı uğursuz oldu"));

// DMP qurmaq devStatus = mpu.dmpInitialize ();

// ================================= // burda öz jiro ofsetlərinizi təmin edin: // === =============================== mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788);

// devSTatus əgər hər şey düzgün işləyirsə (devStatus == 0) {// DMP -ni yandırın, indi hazırdır mpu.setDMPEnabled (doğru);

// Arduino kəsilmə təsbitini əlavə edinInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus ();

dmpReady = doğru;

// sonrakı müqayisə üçün gözlənilən DMP paket ölçüsünü əldə edin packetSize = mpu.dmpGetFIFOPacketSize (); } başqa {// HATA! }}

void loop () {// (! dmpReady) qayıtdıqda DMP düzgün başlamazsa heç nə etməyin;

// (! mpuInterrupt && fifoCount <packetSize) {} zamanı MPU -nun kəsilməsini və ya əlavə paketlərin olmasını gözləyin.

// fasilə bayrağını sıfırlayın və INT_STATUS bayt mpuInterrupt = false alın; mpuIntStatus = mpu.getIntStatus ();

// cari FIFO sayını alın fifoCount = mpu.getFIFOCount ();

əgər ((mpuIntStatus & 0x10) || fifoCount == 1024) {mpu.resetFIFO (); } // başqa halda (mpuIntStatus & 0x02) {while (fifoCount <packetSize) fifoCount = mpu.getFIFOCount (); mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount -= paket ölçüsü; mpu.dmpGetQuaternion (& q, fifoBuffer); relativ.updateOrientationNative (q.x, q.y, q.z, q.w, 4); // updateOrientationNative "tövsiyə olunan Arduino DUE // kimi Yerli USB ilə 32 bitlik ARM əsas mikrokontrolör üçün istifadə edilə bilər. //relativ.updateOrientation(qx, qy, qz, qw, 4); // Relativ.updateOrientation" dir Arduino MEGA, Arduino UNO kimi NON-NATIVE USB mikro nəzarətçi üçün.. // Bunlar xeyli yavaşdır. }}

Addım 4: Oynayın

hər hansı bir vr oyununda kiçik çörək taxtasını hərəkət etdirmək kameranı döndərməlidir

Tövsiyə: