Índice:

Arduino Vr: 4 etapas
Arduino Vr: 4 etapas

Vídeo: Arduino Vr: 4 etapas

Vídeo: Arduino Vr: 4 etapas
Vídeo: Amazing arduino project 2024, Novembro
Anonim
Arduino Vr
Arduino Vr

Olá, meu nome é cristão e tenho 13 anos. Eu amo o arduino e tenho talento para isso, então aqui está o meu instrutível para um arduino vr.

Suprimentos

Suprimentos:

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

2. Fios macho para macho (fios de jumper padrão).

3. Pequeno breadboard

4. USB

5. GY-521 MPU-6050

Opcional:

6. Tela LCD de 5,5 polegadas 2560 * 1440 2K HDMI para MIPI

7. Comprimento focal da lente de Fresnel 50 mm

8. Impressora 3-D ou serviço de impressora 3D

Etapa 1: montar

Montar
Montar

Use o esquema para colocá-lo junto.

Etapa 2: como instalar a biblioteca?

Dê uma olhada no Github: https://github.com/relativty/Relativ Você pode instalá-lo usando Git ou download direto.

Etapa 3: Código

// i2cdevlib e MPU6050 são necessários:

// Muito obrigado ao incrível Jeff Rowberg <3, vá verificar seu repositório para saber mais MPU6050. // ====================================================== ===============================

// I2Cdev e MPU6050 devem ser instalados como bibliotecas, ou então os arquivos.cpp /.h // para ambas as classes devem estar no caminho de inclusão do seu projeto

#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

// Status e controle IMU: bool dmpReady = false; // verdadeiro se a inicialização DMP foi bem-sucedida uint8_t mpuIntStatus; uint8_t devStatus; // 0 = sucesso,! 0 = erro uint16_t packetSize; uint16_t fifoCount; uint8_t fifoBuffer [64];

Quaternion q; // [W x y Z]

bool volátil mpuInterrupt = false; // indica se o pino de interrupção MPU ficou alto void dmpDataReady () {mpuInterrupt = true; }

void setup () {#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // Clock I2C de 400 kHz. Comente esta linha se estiver tendo dificuldades de compilação #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #fim se

relativ.startNative (); // "startNative" pode ser usado para microcontrolador de núcleo ARM de 32 bits com USB nativo como Arduino DUE // que é recomendado. // Relativ.start (); // "start" é para microcontrolador USB NÃO NATIVO, como Arduino MEGA, Arduino UNO.. // Esses são significativamente mais lentos. mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT);

SerialUSB.println (mpu.testConnection ()? F ("MPU6050 conexão bem-sucedida"): F ("MPU6050 conexão falhou"));

// configurar o DMP devStatus = mpu.dmpInitialize ();

// ====================================== // forneça seus próprios offsets giroscópios aqui: // === =================================== mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788);

// devSTatus se tudo funcionou corretamente if (devStatus == 0) {// liga o DMP, agora que está pronto mpu.setDMPEnabled (true);

// ativa a detecção de interrupção do Arduino attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus ();

dmpReady = true;

// obtém o tamanho do pacote DMP esperado para comparação posterior packetSize = mpu.dmpGetFIFOPacketSize (); } else {// ERROR! }}

void loop () {// Não faça nada se o DMP não inicializar corretamente if (! dmpReady) return;

// aguarde a interrupção do MPU ou pacote (s) extra (s) estarem disponíveis enquanto (! mpuInterrupt && fifoCount <packetSize) {}

// redefine o sinalizador de interrupção e obtém o byte INT_STATUS mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus ();

// obtém a contagem FIFO atual fifoCount = mpu.getFIFOCount ();

if ((mpuIntStatus & 0x10) || fifoCount == 1024) {mpu.resetFIFO (); } // verificar a interrupção else if (mpuIntStatus & 0x02) {while (fifoCount <packetSize) fifoCount = mpu.getFIFOCount (); mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount - = tamanho do pacote; mpu.dmpGetQuaternion (& q, fifoBuffer); relativ.updateOrientationNative (q.x, q.y, q.z, q.w, 4); // updateOrientationNative "pode ser usado para microcontrolador de núcleo ARM de 32 bits com USB nativo como Arduino DUE // que é recomendado. //relativ.updateOrientation(qx, qy, qz, qw, 4); // Relativ.updateOrientation" é para microcontrolador USB NÃO NATIVO, como Arduino MEGA, Arduino UNO.. // Esses são significativamente mais lentos. }}

Etapa 4: jogar

mover a pequena placa de ensaio em qualquer jogo VR deve girar a câmera

Recomendado: