Sommario:

Arduino Vr: 4 passaggi
Arduino Vr: 4 passaggi

Video: Arduino Vr: 4 passaggi

Video: Arduino Vr: 4 passaggi
Video: DIY Radar With Ultrasonic Sensor And Chat-GPT Generated Arduino Code | Coders Cafe 2024, Novembre
Anonim
Arduino Vr
Arduino Vr

Salve, mi chiamo Christian e ho 13 anni. Adoro arduino e ho un talento per questo, quindi ecco il mio istruibile per un arduino vr.

Forniture

Forniture:

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

2. Cavi maschio-maschio (cavi di collegamento standard).

3. Tagliere piccolo

4. USB

5. GY-521 MPU-6050

Opzionale:

6. Schermo LCD da 5,5 pollici 2560 * 1440 2K da HDMI a MIPI

7. Lente di Fresnel Lunghezza focale 50 mm

8. Servizio stampante 3D o stampante 3D

Passaggio 1: assemblare

Assemblare
Assemblare

Usa lo schema per assemblarlo.

Passaggio 2: come installare la libreria?

Dai un'occhiata a Github: https://github.com/relativty/Relativ Puoi installarlo usando Git o il download diretto.

Passaggio 3: codice

// sono necessari i2cdevlib e MPU6050:

// Grazie mille al fantastico Jeff Rowberg <3, vai a controllare il suo repository per saperne di più MPU6050. //================================================ =============================

// I2Cdev e MPU6050 devono essere installati come librerie, oppure i file.cpp/.h // per entrambe le classi devono essere nel percorso di inclusione del tuo progetto

#include "Relativ.h"

#include "I2Cdev.h"

#include "MPU6050_6Axis_MotionApps20.h"

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

MPU6050 MPU; Relativo relativo;

#define INTERRUPT_PIN 2

// Stato e controllo IMU: bool dmpReady = false; // true se l'inizializzazione DMP ha avuto successo uint8_t mpuIntStatus; uint8_t devStatus; // 0 = successo, !0 = errore uint16_t packetSize; uint16_t fifoCount; uint8_t fifoBuffer[64];

Quaternione q; // [W x y Z]

volatile bool mpuInterrupt = false; // indica se il pin di interruzione MPU è andato alto void dmpDataReady() { mpuInterrupt = true; }

void setup() { #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); Wire.setClock(400000); // Orologio I2C a 400kHz. Commenta questa riga se hai difficoltà di compilazione #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #finisci se

relativo.startNative(); // "startNative" può essere utilizzato per microcontrollori core ARM a 32 bit con USB nativo come Arduino DUE // consigliato. // Relativ.start(); // "start" è per microcontrollori USB NON NATIVE, come Arduino MEGA, Arduino UNO.. // Quelli sono significativamente più lenti. mpu.initialize(); pinMode(INTERRUPT_PIN, INPUT);

SerialUSB.println(mpu.testConnection() ? F("Connessione MPU6050 riuscita"): F("Connessione MPU6050 fallita"));

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

// ================================== // fornire i propri offset giroscopici qui: // === =============================== mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788);

// devSTatus se tutto ha funzionato correttamente if (devStatus == 0) { // attiva il DMP, ora che è pronto mpu.setDMPEnabled(true);

// abilita il rilevamento degli interrupt di Arduino attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus();

dmpReady = vero;

// ottiene la dimensione del pacchetto DMP prevista per un confronto successivo packetSize = mpu.dmpGetFIFOPacketSize(); } else { // ERRORE! } }

void loop() { // Non fa nulla se DMP non si inizializza correttamente if (!dmpReady) return;

// attende che siano disponibili interrupt MPU o pacchetti aggiuntivi mentre (!mpuInterrupt && fifoCount < packetSize) { }

// resetta il flag di interrupt e ottiene INT_STATUS byte mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus();

// ottiene il conteggio FIFO corrente fifoCount = mpu.getFIFOCount();

if ((mpuIntStatus & 0x10) || fifoCount == 1024) { mpu.resetFIFO(); } // controlla l'interruzione else if (mpuIntStatus & 0x02) { while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount(); mpu.getFIFOBytes(fifoBuffer, packetSize); fifoCount -= dimensione pacchetto; mpu.dmpGetQuaternion(&q, fifoBuffer); relativ.updateOrientationNative(q.x, q.y, q.z, q.w, 4); // updateOrientationNative" può essere utilizzato per microcontrollori core ARM a 32 bit con USB nativo come Arduino DUE // consigliato. //relativ.updateOrientation(qx, qy, qz, qw, 4); // Relativ.updateOrientation" è per microcontrollori USB NON NATIVE, come Arduino MEGA, Arduino UNO.. // Questi sono significativamente più lenti. } }

Passaggio 4: gioca

spostando la piccola breadboard su qualsiasi gioco vr dovrebbe ruotare la telecamera

Consigliato: