Spisu treści:

Arduino Vr: 4 kroki
Arduino Vr: 4 kroki

Wideo: Arduino Vr: 4 kroki

Wideo: Arduino Vr: 4 kroki
Wideo: 🤪 VR экзоскелет ИЗ ДЕРЕВА #виар 2024, Lipiec
Anonim
Arduino Vr
Arduino Vr

Cześć Nazywam się Christian i mam 13 lat. Uwielbiam arduino i mam do tego talent, więc oto moja instrukcja dotycząca arduino vr.

Kieszonkowe dzieci

Kieszonkowe dzieci:

1. Płytka Arduino Mega, Due, Uno lub Yun.

2. Przewody męskie na męskie (standardowe przewody połączeniowe).

3. Mała płytka do krojenia chleba

4. USB

5. GY-521 MPU-6050

Opcjonalny:

6. Ekran LCD 5.5 cala 2560*1440 2 K HDMI do MIPI

7. Soczewka Fresnela Ogniskowa 50mm

8. Drukarka 3D lub usługa drukarki 3D

Krok 1: montaż

Gromadzić się
Gromadzić się

Użyj schematu, aby to złożyć.

Krok 2: Jak zainstalować bibliotekę?

Zajrzyj na Github: https://github.com/relativty/Relativ Możesz zainstalować go za pomocą Git lub bezpośrednio pobrać.

Krok 3: Kod

// potrzebne są i2cdevlib i MPU6050:

// Wielkie dzięki dla niesamowitego Jeffa Rowberga <3, sprawdź jego repozytorium, aby dowiedzieć się więcej MPU6050. //========================================================= ===============================

// I2Cdev i MPU6050 muszą być zainstalowane jako biblioteki, w przeciwnym razie pliki.cpp/.h // dla obu klas muszą znajdować się w ścieżce dołączania projektu

#include "Relativ.h"

#include "I2Cdev.h"

#include "MPU6050_6Axis_MotionApps20.h"

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

MPU6050 mpu; względny względny;

#define PRZERWANIE_PIN 2

// Status i kontrola IMU: bool dmpReady = false; // prawda, jeśli inicjowanie DMP powiodło się uint8_t mpuIntStatus; uint8_t devStatus; // 0 = sukces, !0 = błąd uint16_t rozmiar_pakietu; uint16_t fifoCount; uint8_t fifoBuffer[64];

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

volatile bool mpuInterrupt = false; // wskazuje, czy pin przerwania MPU osiągnął stan wysoki void dmpDataReady() { mpuInterrupt = true; }

void setup() { #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); Wire.setClock(400000); // Zegar I2C 400kHz. Skomentuj tę linię, jeśli masz problemy z kompilacją #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif

relativ.startNative(); // "startNative" może być używany z 32-bitowym mikrokontrolerem z rdzeniem ARM z natywnym USB, takim jak Arduino DUE // co jest zalecane. // Względny.start(); // "start" jest dla NON-NATYWNEGO mikrokontrolera USB, takiego jak Arduino MEGA, Arduino UNO.. // Są one znacznie wolniejsze. mpu.initialize(); pinMode(PRZERWANIE_PIN, WEJŚCIE);

SerialUSB.println(mpu.testConnection() ? F("Połączenie MPU6050 powiodło się"): F("Połączenie MPU6050 nie powiodło się"));

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

// ================================== // podaj tutaj swoje własne przesunięcia żyroskopu: // === =============================== mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788);

// devSTAtus czy wszystko działało poprawnie if (devStatus == 0) { // włącz DMP, teraz gdy jest gotowe mpu.setDMPEnabled(true);

// włącz wykrywanie przerwań Arduino attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus();

dmpReady = prawda;

// uzyskaj oczekiwany rozmiar pakietu DMP do późniejszego porównania packSize = mpu.dmpGetFIFOPacketSize(); } else { // BŁĄD! } }

void loop() { // Nie rób nic, jeśli DMP nie zainicjuje się poprawnie if (!dmpReady) return;

// poczekaj na przerwanie MPU lub dodatkowe pakiety, gdy (!mpuInterrupt && fifoCount < packageSize) { }

// zresetuj flagę przerwania i uzyskaj INT_STATUS byte mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus();

// pobierz aktualną liczbę FIFO fifoCount = mpu.getFIFOCount();

if ((mpuIntStatus & 0x10) || fifoCount == 1024) { mpu.resetFIFO(); } // sprawdź przerwanie else if (mpuIntStatus & 0x02) { while (fifoCount < wielkość_pakietu) fifoCount = mpu.getFIFOCount(); mpu.getFIFOBytes(fifoBuffer, rozmiar_pakietu); fifoCount -= rozmiarpakietu; mpu.dmpGetQuaternion(&q, fifoBuffer); relativ.updateOrientationNative(q.x, q.y, q.z, q.w, 4); // updateOrientationNative" może być używany dla 32-bitowego mikrokontrolera z rdzeniem ARM z natywnym USB, takim jak Arduino DUE // co jest zalecane. //relativ.updateOrientation(qx, qy, qz, qw, 4); // Relativ.updateOrientation" jest dla NON-NATIVE mikrokontrolera USB, jak Arduino MEGA, Arduino UNO.. // Są znacznie wolniejsze. } }

Krok 4: Graj

przesuwanie małej płytki prototypowej w dowolnej grze vr powinno obracać kamerę

Zalecana: