Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth

Компоненты и материалы

Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth
Arduino UNO
×1
Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth
Bluetooth-модуль HC-06
×1
Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth
Android-устройство
×1
VR-шлем Google Cardboard
×1
Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth
Перемычки (переходники)
×1
GY-521 MPU-6050 3-осевой гироскоп + акселерометр для Arduino
×1

Приложения и онлайн-сервисы

Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth
Google Cardboard VR SDKs

О проекте

Это действительно веселый и легкий проект, который можно сделать за час. На нижней стороне скейтборда — акселерометр/гироскоп с Arduino, передающий угловое движение платы через Bluetooth в небольшую VR-игру на Unity для Android-телефонов. Включаете Arduino, Bluetooth соединяется с телефоном — вы начинаете двигаться вперед. Наклоняетесь влево — едете влево, вправо — вправо. Поднимаете передние колеса — персонаж прыгает. Работает только на Android, телефон должен поддерживать Google Cardboard. Если есть старый скейтборд — превратите его в виртуальный сноуборд. Как сделать:

Вам понадобится:

Шаг 1: Создайте Arduino-устройство / передатчик / входное устройство

Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth
Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth

Соберите устройство как на фото выше.

Припаяйте контактные штыри к MPU-6050. Если паяльник новый и кончик чистый — это займет ~11 секунд. Если кончик грязный и старый — быстро станет самым сложным делом (по личному опыту).

Следите за ориентацией всего строго как на фото, чтобы не править код.

Прикрепите всё к скейтборду ТОЧНО как показано (главное — MPU6050 ориентирован так же, как на фото).

Здесь я приклеил батарейный отсек термоклеем и привинтил Arduino. Использовал старую школьную доску — шире доска, лучше для этого опыта. В VR на доске балансироваться довольно сложно.

ВАЖНО: Leonardo работает намного лучше… однако…

Если используете Arduino Uno — все соединения те же, кроме:

SDA → A4, SCL → A5

Шаг 2: Загрузите Arduino-код в устройство / передатчик / входное устройство

Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth
ВАЖНО: Отключите RX и TX перед загрузкой кода в плату. 

Шаг 3: Почти готово! Скачайте приложение на телефон!

Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth

Перейдите по ссылке и скачайте приложение на телефон.

Google Cardboard Virtual Reality Skateboard/Snowboard App

В настройках безопасности разрешите установку приложений от неизвестных разработчиков.

Сопрягите Bluetooth-модуль с телефоном, не меняйте имя по умолчанию (HC-06). Пароль — 1234.

Примечания:

Код

Arduino CodeArduino
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
Fastwire::setup(400, true);
#endif
MPU6050 mpu;
bool dmpReady = false;
uint8_t mpuIntStatus;
uint8_t devStatus;
uint16_t packetSize;
uint16_t fifoCount;
uint8_t fifoBuffer[64];
Quaternion q;
VectorInt16 aa;
VectorInt16 aaReal;
VectorInt16 aaWorld;
VectorFloat gravity;
float euler[3];
float ypr[3];
volatile bool mpuInterrupt = false;

void setup() {
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
Wire.begin();
TWBR = 24;
#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
Fastwire::setup(400, true);
#endif
Serial.begin(9600); // для Arduino Uno
Serial1.begin(9600); // для Leonardo
Serial.println(F("Initializing I2C devices..."));
mpu.initialize();
Serial.println(F("Testing device connections..."));
Serial.println(mpu.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed"));
Serial.println(F("Initializing DMP..."));
devStatus = mpu.dmpInitialize();
mpu.setXGyroOffset(220);
mpu.setYGyroOffset(76);
mpu.setZGyroOffset(-85);
mpu.setZAccelOffset(1788);
if (devStatus == 0) {
Serial.println(F("Enabling DMP..."));
mpu.setDMPEnabled(true);
Serial.println(F("Enabling interrupt detection (Arduino external interrupt 0)..."));
attachInterrupt(0, dmpDataReady, RISING);
mpuIntStatus = mpu.getIntStatus();
Serial.println(F("DMP ready! Waiting for first interrupt..."));
dmpReady = true;
packetSize = mpu.dmpGetFIFOPacketSize();
} else {
Serial.print(F("DMP Initialization failed (code "));
Serial.print(devStatus);
Serial.println(F(")"));
}
}

void sendData(int x, int y, int z) {
if(z < -10){ // forward
Serial1.write("f"); Serial1.write(10);
Serial.write("f"); Serial.write(10);
} else if (z > 0){ // backward
Serial1.write("b"); Serial1.write(10);
Serial.write("b"); Serial.write(10);
} else if (y > 5){ // right (чувствительность: 4 или меньше)
Serial1.write("r"); Serial1.write(10);
Serial.write("r"); Serial.write(10);
} else if (y < -5){ // left (чувствительность: -4 или больше)
Serial1.write("l"); Serial1.write(10);
Serial.write("l"); Serial.write(10);
} else // stop
Serial1.write("s"); Serial1.write(10);
Serial.write("s"); Serial.write(10);
}

void loop() {
if (!dmpReady) return;
mpuInterrupt = false;
mpuIntStatus = mpu.getIntStatus();
fifoCount = mpu.getFIFOCount();
if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
mpu.resetFIFO();
Serial.println(F("FIFO Overflow"));
} else if (mpuIntStatus & 0x02) {
while (fifoCount < packetSize) {
fifoCount = mpu.getFIFOCount();
}
mpu.getFIFOBytes(fifoBuffer, packetSize);
fifoCount -= packetSize;
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetGravity(&gravity, &q);
mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
sendData(ypr[0] * 180/M_PI, ypr[1] * 180/M_PI, ypr[2] * 180/M_PI);
}
}

void dmpDataReady() {
mpuInterrupt = true;
}

Схемы

Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth

Производственный процесс

  1. Сделай свой LUMAZOID: DIY Arduino музыкальный визуализатор
  2. Высокоскоростная фотография капель воды на Arduino Nano — DIY-триггер для вспышки
  3. Умный вольтметр на Arduino и смартфоне — простое DIY-проект
  4. JX Wave Generator — Генератор сигналов на Arduino с DDS AD9833 и OLED-дисплеем
  5. DIY голосовой помощник J.A.R.V.I.S. на Arduino с дизайном Арк Реактора
  6. DIY Arduino Radionics EMR Treatment Device — радионическое устройство
  7. DIY 2D гоночный симулятор движения на Arduino Nano и сервоприводах SG90
  8. Создание GPS-уведомителя о прибытии с Arduino UNO и модулем NEO-6M
  9. ArduRadio: DIY-будильник с FM-радио на Arduino
  10. Arduino Tennis Game — Виртуальный теннис на NeoPixel, датчиках и Bluetooth