Construisez un skateboard VR DIY avec Arduino, Google Cardboard et Bluetooth
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino UNO (ou Leonardo recommandé) | 1 |
| Module Bluetooth HC-06 | 1 |
| Appareil Android compatible Google Cardboard | 1 |
| Casque VR Google Cardboard | 1 |
| Fils de connexion (jumper wires) | 1 lot |
| Module accéléromètre/gyroscope MPU-6050 (GY-521) | 1 |
| Skateboard (de préférence large type old-school) | 1 |
| 4 balles de tennis (pour stabiliser la planche) | 4 |
| Plaque d'essai mini (mini breadboard) | 1 |
| Batterie 9V avec boîtier interrupteur et prise jack | 1 |
| Fer à souder et pistolet à colle chaude | 1 chacun |
Applications et services en ligne
- Google Cardboard VR SDKs - Pour le développement de l'application Unity Android
À propos du projet
Ce projet ludique et accessible se réalise en environ une heure. Un accéléromètre/gyroscope MPU-6050 monté sous le skateboard transmet les mouvements angulaires via Bluetooth (module HC-06) vers un jeu VR développé dans Unity pour Android. Lorsque l'Arduino s'allume et que la connexion Bluetooth s'établit avec le téléphone, l'avatar avance automatiquement. Inclinez-vous à gauche pour tourner à gauche, à droite pour tourner à droite. Soulevez l'avant de la planche pour faire sauter le personnage.
Prérequis : téléphone Android compatible Google Cardboard. Transformez un vieux skateboard en planche de snowboard virtuelle !
Étape 1 : Assembler le dispositif Arduino (émetteur)
Soudez les broches sur le MPU-6050 (une pointe de fer propre facilite grandement l'opération). Respectez scrupuleusement l'orientation montrée sur les photos pour éviter de modifier le code. Fixez l'ensemble sur le skateboard exactement comme illustré : le MPU-6050 doit pointer dans la même direction. Collez le boîtier de batterie à la colle chaude et vissez la carte Arduino. Une planche large (old-school) offre meilleure stabilité en VR.
Note importante : Le Leonardo fonctionne mieux car il possède un port série matériel supplémentaire (Serial1). Si vous utilisez un Uno, les connexions I2C changent : SDA → A4, SCL → A5.
Étape 2 : Téléverser le code Arduino
IMPORTANT : Débranchez les broches RX et TX avant de téléverser le code.
Étape 3 : Installer l'application sur votre téléphone
Téléchargez l'apk depuis : wirebeings.com/virtual-reality-skateboard.html
- Activez l'installation d'applications de sources inconnues dans les paramètres de sécurité.
- Appairez le module HC-06 (nom par défaut : HC-06, code PIN : 1234).
- Placez la planche à plat au sol avant d'allumer l'Arduino, puis lancez l'application. La connexion Bluetooth déclenche le démarrage immédiat.
- Si la connexion coupe, redémarrez l'application (connexion uniquement au lancement dans cette version).
C'est mon premier jeu Unity, donc il reste basique. Si le projet intéresse, je pourrai développer un vrai jeu de snowboard ou de skateboard selon les retours.
Code 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); // Pour Arduino Uno
Serial1.begin(9600); // Pour Leonardo
Serial.println(F("Initialisation I2C..."));
mpu.initialize();
Serial.println(F("Test connexion..."));
Serial.println(mpu.testConnection() ? F("MPU6050 OK") : F("MPU6050 ÉCHEC"));
Serial.println(F("Initialisation DMP..."));
devStatus = mpu.dmpInitialize();
mpu.setXGyroOffset(220);
mp u.setYGyroOffset(76);
mpu.setZGyroOffset(-85);
mpu.setZAccelOffset(1788);
if (devStatus == 0) {
Serial.println(F("Activation DMP..."));
mpu.setDMPEnabled(true);
Serial.println(F("Activation interruption (INT0)..."));
attachInterrupt(0, dmpDataReady, RISING);
mpuIntStatus = mpu.getIntStatus();
Serial.println(F("DMP prêt !"));
dmpReady = true;
packetSize = mpu.dmpGetFIFOPacketSize();
} else {
Serial.print(F("Échec DMP (code "));
Serial.print(devStatus);
Serial.println(F(")"));
}
}
void sendData(int x, int y, int z) {
if(z < -10){ // avant
Serial1.write("f"); Serial1.write(10);
Serial.write("f"); Serial.write(10);
} else if (z > 0){ // arrière
Serial1.write("b"); Serial1.write(10);
Serial.write("b"); Serial.write(10);
} else if (y > 5){ // droite (seuil ajustable)
Serial1.write("r"); Serial1.write(10);
Serial.write("r"); Serial.write(10);
} else if (y < -5){ // gauche (seuil ajustable)
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("Overflow 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; }
Schéma de câblage
Processus de fabrication
- Construisez votre propre LUMAZOID : Visualiseur musical DIY Arduino
- Photographie Haute Vitesse : Capturez les Gouttes d'Eau avec Arduino Nano
- Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile
- JX Wave Generator – Générateur DDS compatible Arduino avec affichage OLED
- Assistant vocal J.A.R.V.I.S DIY Arduino avec design Réacteur Arc
- Dispositif de Traitement Radionique EMR DIY avec Arduino Nano
- Simulateur de Course 2 Axes DIY : Arduino Nano & Servos SG90
- Construire un Notificateur de Destination GPS avec Arduino UNO et Module NEO‑6M
- ArduRadio : Réveil Radio FM DIY Basé sur Arduino