Inhaltsverzeichnis:

Arduino VR - Gunook
Arduino VR - Gunook

Video: Arduino VR - Gunook

Video: Arduino VR - Gunook
Video: Виды трекинга для виртуальной реальности и симуляторов. Как сделать Freetrack, Opentrack, Facetrack. 2024, Juli
Anonim
Arduino Vr
Arduino Vr

Hallo, mein Name ist Christian und ich bin 13 Jahre alt. Ich liebe Arduino und habe ein Talent dafür, also ist hier mein instructable für ein Arduino vr.

Lieferungen

Lieferungen:

1. Arduino-Board Mega, Due, Uno oder Yun.

2. Kabel von Stecker zu Stecker (Standard-Überbrückungskabel).

3. Kleines Steckbrett

4. USB

5. GY-521 MPU-6050

Optional:

6. 5,5 Zoll 2560 * 1440 2K LCD-Bildschirm HDMI zu MIPI

7. Fresnel-Linse Brennweite 50 mm

8. 3D-Drucker oder 3D-Druckerservice

Schritt 1: Zusammenbauen

Montieren
Montieren

Verwenden Sie den Schaltplan, um es zusammenzusetzen.

Schritt 2: Wie installiere ich die Bibliothek?

Schaut mal auf dem Github vorbei: https://github.com/relativty/Relativ Du kannst es entweder über Git installieren oder direkt herunterladen.

Schritt 3: Code

// i2cdevlib und MPU6050 werden benötigt:

// Vielen Dank an den großartigen Jeff Rowberg <3. Schauen Sie in seinem Repo nach, um mehr über MPU6050 zu erfahren. //=============================================== =============================

// I2Cdev und MPU6050 müssen als Bibliotheken installiert sein, sonst müssen sich die.cpp/.h-Dateien // für beide Klassen im Include-Pfad Ihres Projekts befinden

#include "Relativ.h"

#include "I2Cdev.h"

#include "MPU6050_6Axis_MotionApps20.h"

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

MPU6050 mpu; Relativ relativ;

#define INTERRUPT_PIN 2

// IMU-Status und -Steuerung: bool dmpReady = false; // true, wenn DMP-Init erfolgreich war uint8_t mpuIntStatus; uint8_t devStatus; // 0 = Erfolg, !0 = Fehler uint16_t packetSize; uint16_t fifoCount; uint8_t fifoBuffer[64];

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

volatile bool mpuInterrupt = false; // zeigt an, ob der MPU-Interrupt-Pin hoch gegangen ist void dmpDataReady () { mpuInterrupt = true; }

void setup() { #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); Wire.setClock(400000); // 400kHz I2C-Takt. Kommentieren Sie diese Zeile, wenn Sie Schwierigkeiten beim Kompilieren haben #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif

relativ.startNative(); // "startNative" kann für 32-Bit-ARM-Core-Mikrocontroller mit Native USB wie Arduino DUE verwendet werden // was empfohlen wird. // Relativ.start(); // "start" ist für NICHT-NATIVE USB-Mikrocontroller wie Arduino MEGA, Arduino UNO.. // Diese sind deutlich langsamer. mpu.initialize(); pinMode (INTERRUPT_PIN, INPUT);

SerialUSB.println (mpu.testConnection () ? F ("MPU6050-Verbindung erfolgreich"): F ("MPU6050-Verbindung fehlgeschlagen"));

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

// ================================= // hier eigene Kreisel-Offsets liefern: // === =============================== mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788);

// devSTatus wenn alles richtig funktioniert if (devStatus == 0) { // DMP einschalten, jetzt da es fertig ist mpu.setDMPEnabled(true);

// Arduino-Interrupt-Erkennung aktivieren AttachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus();

dmpReady = wahr;

// Erwartete DMP-Paketgröße für späteren Vergleich abrufen packetSize = mpu.dmpGetFIFOPacketSize(); } else { // FEHLER! } }

void loop() { // Nichts tun, wenn DMP nicht richtig initialisiert if (!dmpReady) return;

// warten, bis MPU-Interrupt oder zusätzliche Pakete verfügbar sind while (!mpuInterrupt && fifoCount < packetSize) { }

// Interrupt-Flag zurücksetzen und INT_STATUS-Byte abrufen mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus();

// aktuellen FIFO-Zähler abrufen fifoCount = mpu.getFIFOCount();

if ((mpuIntStatus & 0x10) || fifoCount == 1024) { mpu.resetFIFO(); } // auf Interrupt prüfen else if (mpuIntStatus & 0x02) { while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount (); mpu.getFIFOBytes(fifoBuffer, Paketgröße); fifoCount -= Paketgröße; mpu.dmpGetQuaternion(&q, fifoBuffer); relativ.updateOrientationNative(q.x, q.y, q.z, q.w, 4); // updateOrientationNative" kann für 32-Bit-ARM-Core-Mikrocontroller mit Native USB wie Arduino DUE verwendet werden // was empfohlen wird. //relativ.updateOrientation(qx, qy, qz, qw, 4); // Relativ.updateOrientation" is für NON-NATIVE USB-Mikrocontroller, wie Arduino MEGA, Arduino UNO.. // Diese sind deutlich langsamer. } }

Schritt 4: Spielen

Wenn Sie das kleine Steckbrett in einem VR-Spiel bewegen, sollte die Kamera gedreht werden

Empfohlen: