Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Construye un Skateboard VR Casero con Arduino, Google Cardboard y Bluetooth

Componentes y materiales

Arduino UNO (o Leonardo, recomendado) 1
Módulo Bluetooth HC-06 1
Dispositivo Android compatible con Google Cardboard 1
Visor VR Google Cardboard 1
Cables jumper (macho-macho) 1 juego
Módulo acelerómetro/giróscopo MPU-6050 (GY-521) 1
Skateboard (preferiblemente tabla ancha "old school") 1
4 pelotas de tenis (para evitar que ruede) 4
Protoboard mini 1
Batería 9V con porta-baterías con interruptor y conector barrel jack 1
Soldador y pistola de silicona caliente (opcional) 1

Aplicaciones y servicios online

Sobre el proyecto

Este es un proyecto divertido y sencillo que se puede completar en aproximadamente una hora. En la parte inferior del skateboard se coloca un acelerómetro/giróscopo conectado a un Arduino que transmite el movimiento angular de la tabla vía Bluetooth a un pequeño juego de realidad virtual desarrollado en Unity para teléfonos Android.

El funcionamiento es intuitivo: al encender el Arduino y conectar el Bluetooth con el móvil, el personaje comienza a avanzar automáticamente. Inclinar la tabla a la izquierda hace girar a la izquierda, inclinar a la derecha gira a la derecha, y levantar las ruedas delanteras (hacer un "manual") hace que el personaje salte.

Requisitos importantes: Solo funciona con teléfonos Android compatibles con Google Cardboard. Si tienes un skateboard viejo guardado, conviértelo en una tabla de snowboard virtual.

Paso 1: Montar el dispositivo transmisor (Arduino + sensores)

Construye un Skateboard VR Casero con Arduino, Google Cardboard y Bluetooth
Construye un Skateboard VR Casero con Arduino, Google Cardboard y Bluetooth

Ensambla el circuito siguiendo las imágenes. Deberás soldar los pines header al MPU-6050; con un soldador en buen estado toma unos 11 segundos, pero con una punta sucia o gastada puede volverse muy difícil.

Orientación crítica: Asegúrate de que la orientación del MPU-6050 coincida exactamente con las fotos para no tener que modificar el código.

Fija todo al skateboard tal como se muestra. El autor pegó el porta-baterías con silicona caliente y atornilló el Arduino. Se recomienda una tabla ancha ("old school") porque es difícil mantener el equilibrio en una tabla estrecha mientras llevas el visor VR.

Nota sobre Arduino Leonardo vs UNO: El Leonardo funciona mucho mejor para este proyecto porque tiene USB nativo y Serial1 libre para el Bluetooth. Si usas UNO, las conexiones I2C cambian: SDA → A4, SCL → A5.

Paso 2: Subir el código al Arduino

Construye un Skateboard VR Casero con Arduino, Google Cardboard y Bluetooth
IMPORTANTE: Desconecta los pines RX y TX del módulo Bluetooth antes de subir el código.

Paso 3: Instalar la app en el móvil

Construye un Skateboard VR Casero con Arduino, Google Cardboard y Bluetooth

Descarga la aplicación desde: wirebeings.com/virtual-reality-skateboard.html

Deberás activar en Ajustes → Seguridad la opción "Orígenes desconocidos" para instalar la APK.

Empareja el módulo HC-06 con el móvil (nombre por defecto "HC-06", contraseña "1234").

Notas del autor:

Código Arduino

#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#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);      // Para Arduino UNO
Serial1.begin(9600);     // Para Leonardo
Serial.println(F("Inicializando dispositivos I2C..."));
mpu.initialize();
Serial.println(F("Probando conexiones..."));
Serial.println(mpu.testConnection() ? F("MPU6050 conectado") : F("Fallo conexión MPU6050"));
Serial.println(F("Inicializando DMP..."));
devStatus = mpu.dmpInitialize();
mpu.setXGyroOffset(220);
mpu.setYGyroOffset(76);
mpu.setZGyroOffset(-85);
mpu.setZAccelOffset(1788);

if (devStatus == 0) {
Serial.println(F("Activando DMP..."));
mpu.setDMPEnabled(true);
Serial.println(F("Activando interrupción (int. externa 0)..."));
attachInterrupt(0, dmpDataReady, RISING);
mpuIntStatus = mpu.getIntStatus();
Serial.println(F("DMP listo. Esperando primera interrupción..."));
dmpReady = true;
packetSize = mpu.dmpGetFIFOPacketSize();
} else {
Serial.print(F("Fallo inicialización DMP (código "));
Serial.print(devStatus);
Serial.println(F(")"));
}
}

void sendData(int x, int y, int z) {
if(z < -10){ // adelante
Serial1.write("f"); Serial1.write(10);
Serial.write("f"); Serial.write(10);
} else if (z > 0){ // atrás
Serial1.write("b"); Serial1.write(10);
Serial.write("b"); Serial.write(10);
} else if (y > 5){ // derecha (cambia a 4 para más sensibilidad)
Serial1.write("r"); Serial1.write(10);
Serial.write("r"); Serial.write(10);
} else if (y < -5){ // izquierda (cambia a -4 para más sensibilidad)
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("Desbordamiento FIFO"));
} 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;
}

Esquemático

Construye un Skateboard VR Casero con Arduino, Google Cardboard y Bluetooth

El código completo, la app para Android y la lista de componentes con enlaces de compra están disponibles en: wirebeings.com/virtual-reality-skateboard.html

Proceso de manufactura

  1. Construya su propio LUMAZOID: Visualizador de música DIY con Arduino
  2. Captura Gotas de Agua en Acción con Arduino Nano: Fotografía de Alta Velocidad DIY
  3. Construye un Voltímetro Inteligente con Arduino y Smartphone – Proyecto DIY Fácil
  4. Generador de Ondas JX – Oscilador DDS Compatible con Arduino con Pantalla OLED
  5. Asistente de voz J.A.R.V.I.S DIY con Arduino y diseño Arc Reactor
  6. Construye un dispositivo de tratamiento radiónico EMR con Arduino DIY
  7. Simulador de Carreras 2D DIY con Arduino Nano y Servos SG90
  8. Construye un Notificador de Destino GPS con Arduino UNO y Módulo NEO‑6M
  9. ArduRadio: Reloj Despertador con Radio FM Basado en Arduino
  10. Juego de Tenis con Arduino: Experiencia de Raqueta Virtual con NeoPixel, Sensores y Bluetooth
  11. Construye un Cerco RFID Portátil con Arduino – Guía Paso a Paso