Tabla de contenido:

Arduino Vr: 4 pasos
Arduino Vr: 4 pasos

Video: Arduino Vr: 4 pasos

Video: Arduino Vr: 4 pasos
Video: Arduino project 😎^ Arduino #arduino #2022 #2021 #2023 #dc #arduinoproject #diy #foryou 2024, Mes de julio
Anonim
Arduino Vr
Arduino Vr

Hola Mi nombre es Christian y tengo 13 años. Me encanta arduino y tengo talento para ello, así que aquí está mi instructable para un arduino vr.

Suministros

Suministros:

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

2. Cables macho a macho (cables de puente estándar).

3. Placa de pruebas pequeña

4. USB

5. GY-521 MPU-6050

Opcional:

6. Pantalla LCD HDMI de 5.5 pulgadas 2560 * 1440 2K a MIPI

7. Longitud focal de la lente Fresnel 50 mm

8. Impresora 3D o servicio de impresora 3D

Paso 1: ensamblar

Armar
Armar

Usa el esquema para armarlo.

Paso 2: ¿Cómo instalar la biblioteca?

Eche un vistazo a Github: https://github.com/relativty/Relativ Puede instalarlo usando Git o descarga directa.

Paso 3: Código

// Se necesitan i2cdevlib y MPU6050:

// Muchas gracias al increíble Jeff Rowberg <3, revisa su repositorio para obtener más información sobre MPU6050. // ============================================== =============================

// I2Cdev y MPU6050 deben instalarse como bibliotecas o, de lo contrario, los archivos.cpp /.h // para ambas clases deben estar en la ruta de inclusión de su proyecto

#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

// Estado y control de la IMU: bool dmpReady = false; // verdadero si DMP init fue exitoso uint8_t mpuIntStatus; uint8_t devStatus; // 0 = éxito,! 0 = error uint16_t packetSize; uint16_t FIFoCount; uint8_t FIFoBuffer [64];

Quaternion q; // [W x Y Z]

volátil bool mpuInterrupt = false; // indica si el pin de interrupción de MPU se ha elevado void dmpDataReady () {mpuInterrupt = true; }

configuración vacía () {#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // Reloj I2C de 400 kHz. Comente esta línea si tiene dificultades de compilación #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #terminara si

relativ.startNative (); // "startNative" se puede utilizar para un microcontrolador de núcleo ARM de 32 bits con Native USB como Arduino DUE // que se recomienda. // Relativ.start (); // "start" es para microcontroladores USB NO NATIVOS, como Arduino MEGA, Arduino UNO.. // Esos son significativamente más lentos. mpu.initialize (); pinMode (INTERRUPT_PIN, ENTRADA);

SerialUSB.println (mpu.testConnection ()? F ("Conexión MPU6050 exitosa"): F ("Error de conexión MPU6050"));

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

// ================================== // proporcione sus propias compensaciones de giroscopio aquí: // === =============================== mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788);

// devSTatus si todo funcionó correctamente if (devStatus == 0) {// enciende el DMP, ahora que está listo mpu.setDMPEnabled (true);

// habilita la detección de interrupciones de Arduino attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus ();

dmpReady = verdadero;

// obtener el tamaño de paquete DMP esperado para una comparación posterior packetSize = mpu.dmpGetFIFOPacketSize (); } else {// ¡ERROR! }}

void loop () {// No hacer nada si DMP no se inicializa correctamente if (! dmpReady) return;

// espera a que la interrupción de MPU o los paquetes adicionales estén disponibles mientras (! mpuInterrupt && FIFoCount <packetSize) {}

// restablecer el indicador de interrupción y obtener el byte INT_STATUS mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus ();

// obtener el recuento FIFO actual FIFOCount = mpu.getFIFOCount ();

if ((mpuIntStatus & 0x10) || FifoCount == 1024) {mpu.resetFIFO (); } // verifica la interrupción else if (mpuIntStatus & 0x02) {while (FifoCount <tamaño del paquete) FIFoCount = mpu.getFIFOCount (); mpu.getFIFOBytes (FifoBuffer, packetSize); FifoCount - = tamaño del paquete; mpu.dmpGetQuaternion (& q, FIFoBuffer); relativ.updateOrientationNative (q.x, q.y, q.z, q.w, 4); // updateOrientationNative "se puede usar para microcontroladores ARM core de 32 bits con Native USB como Arduino DUE // que se recomienda. //relativ.updateOrientation(qx, qy, qz, qw, 4); // Relativ.updateOrientation" es para microcontroladores USB NO NATIVOS, como Arduino MEGA, Arduino UNO.. // Esos son significativamente más lentos. }}

Paso 4: jugar

mover la pequeña placa de pruebas en cualquier juego de realidad virtual debería girar la cámara

Recomendado: