Taula de continguts:

Arduino Vr: 4 passos
Arduino Vr: 4 passos

Vídeo: Arduino Vr: 4 passos

Vídeo: Arduino Vr: 4 passos
Vídeo: DIY VR Setup! | Virtual Reality #4 | New setup and controller! 2024, Juliol
Anonim
Arduino Vr
Arduino Vr

Hola, em dic Christian i tinc 13 anys. M'encanta l'arduino i tinc talent per a això, així que aquí és el meu instructable per a un arduino vr.

Subministraments

Subministraments:

1. Taula Arduino Mega, Due, Uno o Yun.

2. Cables masculins a masculins (cables de pont estàndard).

3. Tauleta reduïda

4. USB

5. GY-521 MPU-6050

Opcional:

6. Pantalla LCD 2,5 5,5 polzades 2560 * 1440 HDMI a MIPI

7. Lent Fresnel Distància focal 50 mm

8. Servei d'impressora 3D o impressora 3D

Pas 1: Muntatge

Muntar
Muntar

Utilitzeu l’esquema per ajuntar-lo.

Pas 2: Com instal·lar la biblioteca?

Mireu el Github: https://github.com/relativty/Relativ Podeu instal·lar-lo mitjançant Git o bé baixar-lo directament.

Pas 3: Codi

// Calen i2cdevlib i MPU6050:

// Gràcies a l’increïble Jeff Rowberg <3, consulteu la seva reposició per obtenir més informació sobre MPU6050. // ================================================= ==============================

// I2Cdev i MPU6050 s'han d'instal·lar com a biblioteques, o bé, els fitxers.cpp /.h // per a les dues classes han d'estar al camí d'inclusió del vostre projecte.

#include "Relativ.h"

#include "I2Cdev.h"

#include "MPU6050_6Axis_MotionApps20.h"

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

MPU6050 mpu; Relativ relativ;

#define INTERRUPT_PIN 2

// Estat i control de l’IMU: bool dmpReady = false; // cert si DMP init va tenir èxit uint8_t mpuIntStatus; uint8_t devStatus; // 0 = èxit,! 0 = error uint16_t paquetSize; uint16_t fifoCount; uint8_t fifoBuffer [64];

Quaternió q; // [w, x, y, z]

bool volàtil mpuInterrupt = fals; // indica si el pin d'interrupció de la MPU s'ha anotat alt void dmpDataReady () {mpuInterrupt = true; }

void setup () {#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // Rellotge I2C de 400 kHz. Comenteu aquesta línia si teniu dificultats de compilació #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif

relativ.startNative (); // "startNative" es pot utilitzar per a un microcontrolador ARM de 32 bits amb Native USB com Arduino DUE // que es recomana. // Relativ.start (); // "start" és per a microcontroladors USB NO NATIUS, com Arduino MEGA, Arduino UNO.. // Aquests són significativament més lents. mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT);

SerialUSB.println (mpu.testConnection ()? F ("connexió MPU6050 satisfactòria"): F ("connexió MPU6050 fallida"));

// configureu el DMP devStatus = mpu.dmpInitialize ();

// ================================== // subministri les vostres pròpies compensacions giroscòpiques aquí: // === =============================== mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788);

// devSTatus si tot ha funcionat correctament si (devStatus == 0) {// activeu el DMP, ara que està preparat mpu.setDMPEnabled (true);

// habilita la detecció d'interrupcions Arduino attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus ();

dmpReady = cert;

// obtenir la mida esperada del paquet DMP per a una comparació posterior packetSize = mpu.dmpGetFIFOPacketSize (); } else {// ERROR! }}

void loop () {// No feu res si DMP no inicialitza correctament si (! dmpReady) torna;

// espereu que la interrupció de la MPU o els paquets addicionals estiguin disponibles mentre (! mpuInterrupt && fifoCount <packetSize) {}

// restablir el senyal d'interrupció i obtenir INT_STATUS byte mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus ();

// obtenir el recompte FIFO actual fifoCount = mpu.getFIFOCount ();

if ((mpuIntStatus & 0x10) || fifoCount == 1024) {mpu.resetFIFO (); } // comproveu si hi ha alguna interrupció si (mpuIntStatus & 0x02) {while (fifoCount <packetSize) fifoCount = mpu.getFIFOCount (); mpu.getFIFOBytes (fifoBuffer, mida del paquet); fifoCount - = mida del paquet; mpu.dmpGetQuaternion (& q, fifoBuffer); relativ.updateOrientationNative (q.x, q.y, q.z, q.w, 4); // updateOrientationNative "es pot utilitzar per a un microcontrolador ARM de 32 bits amb Native USB com Arduino DUE // que es recomana. //relativ.updateOrientation(qx, qy, qz, qw, 4); // Relativ.updateOrientation" és per a microcontroladors USB NO NATIUS, com Arduino MEGA, Arduino UNO.. // Aquests són significativament més lents. }}

Pas 4: Juga

si moveu la petita taula de jocs en qualsevol joc de vr, hauríeu de girar la càmera

Recomanat: