Оглавление:
Видео: Arduino VR: 4 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:49
Привет, меня зовут Кристиан, и мне 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 должно вращать камеру
Рекомендуемые:
Распознавание лиц на Raspberry Pi 4B за 3 шага: 3 шага
Обнаружение лиц на Raspberry Pi 4B за 3 шага: в этом руководстве мы собираемся выполнить обнаружение лиц на Raspberry Pi 4 с помощью Shunya O / S, используя библиотеку Shunyaface. Shunyaface - это библиотека распознавания / обнаружения лиц. Проект направлен на достижение максимальной скорости обнаружения и распознавания с помощью
Как установить плагины в WordPress за 3 шага: 3 шага
Как установить плагины в WordPress за 3 шага: в этом уроке я покажу вам основные шаги по установке плагина wordpress на ваш сайт. В основном вы можете установить плагины двумя разными способами. Первый способ - через ftp или через cpanel. Но я не буду перечислять это, потому что он действительно комп
Прямая трансляция HD-видео 4G / 5G с дрона DJI с малой задержкой [3 шага]: 3 шага
Прямая трансляция HD-видео 4G / 5G с дрона DJI с малой задержкой [3 шага]: следующее руководство поможет вам получать прямые видеопотоки HD-качества практически с любого дрона DJI. С помощью мобильного приложения FlytOS и веб-приложения FlytNow вы можете начать потоковую передачу видео с дрона
Протез руки, напечатанный на 3D-принтере за 4 шага !: 4 шага
Протез руки, напечатанный на 3D-принтере за 4 шага !: Этот проект - протез руки, напечатанный мной, я хочу получить больше знаний о протезировании и 3D-печати. Хотя это не лучший проект, это отличный способ получить практический опыт и научиться создавать
Интерфейс сенсора ADXL335 на Raspberry Pi 4B в 4 шага: 4 шага
Интерфейс датчика ADXL335 на Raspberry Pi 4B за 4 шага: в этом руководстве мы собираемся связать датчик ADXL335 (акселерометр) на Raspberry Pi 4 с Shunya O / S