Оглавление:

Arduino VR: 4 шага
Arduino VR: 4 шага

Видео: Arduino VR: 4 шага

Видео: Arduino VR: 4 шага
Видео: Ускоряем Ардуино более чем в 20 раз! 2024, Ноябрь
Anonim
Ардуино VR
Ардуино VR

Привет, меня зовут Кристиан, и мне 13 лет. Я люблю Arduino и имею к этому талант, поэтому вот мои инструкции по Arduino VR.

Запасы

Запасы:

1. Плата Arduino Mega, Due, Uno или Yun.

2. Провода «папа-папа» (стандартные перемычки).

3. Небольшой макет

4. USB

5. GY-521 MPU-6050

По желанию:

6. 5,5-дюймовый ЖК-экран 2560 * 1440 2K, HDMI к MIPI

7. Фокусное расстояние линзы Френеля 50 мм.

8. Услуги 3D-принтера или 3D-принтера.

Шаг 1. Соберите

Собрать
Собрать

Используйте схему, чтобы собрать все вместе.

Шаг 2: Как установить библиотеку?

Взгляните на Github: https://github.com/relativty/Relativ. Вы можете установить его с помощью Git или напрямую загрузить.

Шаг 3: Код

// необходимы i2cdevlib и MPU6050:

// Большое спасибо замечательному Джеффу Роубергу <3, посмотрите его репо, чтобы узнать больше о MPU6050. // ================================================ =============================

// I2Cdev и MPU6050 должны быть установлены как библиотеки, иначе файлы.cpp /.h // для обоих классов должны быть в пути включения вашего проекта

#include "Relativ.h"

#include "I2Cdev.h"

#include "MPU6050_6Axis_MotionApps20.h"

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

MPU6050 mpu; Относительный релятив;

#define INTERRUPT_PIN 2

// Статус и управление IMU: bool dmpReady = false; // истина, если инициализация DMP прошла успешно uint8_t mpuIntStatus; uint8_t devStatus; // 0 = успех,! 0 = ошибка uint16_t packetSize; uint16_t fifoCount; uint8_t fifoBuffer [64];

Quaternion q; // [ш, х, у, г]

volatile bool mpuInterrupt = false; // указывает, перешел ли вывод прерывания MPU на высокий уровень void dmpDataReady () {mpuInterrupt = true; }

void setup () {#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // Тактовая частота I2C 400 кГц. Прокомментируйте эту строку, если возникают трудности с компиляцией #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif

relativ.startNative (); // "startNative" можно использовать для 32-разрядного микроконтроллера ARM с встроенным USB, например Arduino DUE //, что рекомендуется. // Relativ.start (); // "start" - для НЕОБЫЧНЫХ USB-микроконтроллеров, таких как Arduino MEGA, Arduino UNO.. // Они значительно медленнее. mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT);

SerialUSB.println (mpu.testConnection ()? F («Соединение MPU6050 выполнено успешно»): F («Соединение MPU6050 не удалось»));

// настраиваем DMP devStatus = mpu.dmpInitialize ();

// ================================== // укажите здесь свои собственные смещения гироскопа: // === =============================== mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788);

// devSTatus, если все работало правильно if (devStatus == 0) {// включить DMP, теперь, когда он готов mpu.setDMPEnabled (true);

// включить обнаружение прерывания Arduino attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus ();

dmpReady = true;

// получить ожидаемый размер пакета DMP для последующего сравнения packetSize = mpu.dmpGetFIFOPacketSize (); } else {// ОШИБКА! }}

void loop () {// Ничего не делать, если DMP не инициализируется правильно if (! dmpReady) return;

// ждем прерывания MPU или доступности дополнительных пакетов while (! mpuInterrupt && fifoCount <packetSize) {}

// сбрасываем флаг прерывания и получаем байт INT_STATUS mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus ();

// получить текущий счетчик FIFO fifoCount = mpu.getFIFOCount ();

если ((mpuIntStatus & 0x10) || fifoCount == 1024) {mpu.resetFIFO (); } // проверяем наличие прерывания else if (mpuIntStatus & 0x02) {while (fifoCount <packetSize) fifoCount = mpu.getFIFOCount (); mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount - = размер пакета; mpu.dmpGetQuaternion (& q, fifoBuffer); relativ.updateOrientationNative (q.x, q.y, q.z, q.w, 4); // updateOrientationNative "может использоваться для 32-битного микроконтроллера ARM с встроенным USB, например Arduino DUE, // что рекомендуется. //relativ.updateOrientation(qx, qy, qz, qw, 4); // Relativ.updateOrientation" для NON-NATIVE USB-микроконтроллера, такого как Arduino MEGA, Arduino UNO.. // Они значительно медленнее. }}

Шаг 4: Играть

перемещение небольшого макета в любой игре VR должно вращать камеру

Рекомендуемые: