Makerspace, NLT

VR Skateboard

Wij hebben als eindopdracht voor de arduino lessen een VR Skateboard gemaakt. Wij hebben deze opdracht overgenomen en gemaakt van een voorbeeld op instructables.com van Matthewh8. Bij ons project bleek de app die wij hiervoor nodig hadden niet te werken. Omdat het niet werkte hebben we een paar stappen niet gedaan. Zo hebben we geen batterij gebruikt en de arduino niet aan het skateboard vastgemaakt. In deze uitleg gebruiken we deze wel.

naamloos

Er zijn een paar verschillen tussen het project van Matthewh8 en die van ons.
1. Wij hebben voor ons project een arduino UNO gebruikt. Matthewh8 gebruikt een arduino Leonardo.
2. De aanluiting van de arduino UNO is anders dan bij de arduino Leonardo.
3. Wij hebben geen tennisballen gebruikt om te voorkomen dat het skateboard wegrijdt als je erop staat, maar wij hebben de wielen vervangen voor houten planken.
4. Wij hebben in plaats van een HC-06 bluetooth module een HC-05 bluetooth module gebruikt. Het verschil is dat de HC-06 alleen een slave is en de HC-05 is een master en slave.
5. Matthewh8 heeft bij zijn aansluiting een mini breadboard, wij gebruiken deze niet. Het mini breadboard dient alleen maar als ondersteunong, deze heb je niet nodig.

Voor dit project heb je nodig:

  • Een VR bril
  • Een skateboard
  • 2 houten planken
  • Een arduino UNO
  • Man-vrouw draadjes
  • Een HC-05 bluetooth module
  • Een MPU-6050 accelerometer/gyro
  • Een soldeerijzer en soldeertin
  • Een 9V batterij met batterijdoos (deze hebben wij dus niet gebruikt vanwege de app)
  • De arduino code
  • De arduino VR Skateboard app

Dan komt nu de uitleg voor het maken van een VR Skateboard:

Wij zijn begonnen met het aansluiten van de arduino UNO, de HC-05 en de MPU-6050. Voordat je dit kan doen moet je de pinnen aan de MPU-6050 solderen door middel van de soldeerijzer en het soldeertin.

De aansluiting gaat als volgt:

Van MPU-6050 naar de arduino UNO

De SDA gaat naar A4
De SCL gaat naar A5
De GND gaat naar GND
De VCC gaat naar 5V

Van de HC-05 naar de arduino UNO

De VCC gaat naar 3.3V
De GND gaat naar GND
De TXD gaat naar 0
De RXD gaat naar 1

De HC-05 heeft 6 in-/uitgangen je hebt alleen degene die hierboven staan vermeld nodig.

Nadat we de aansluiting hadden gemaakt, hebben we het skateboard gemaakt.

naamloos.png

Het maken van het skateboard gaat als volgt:

Als eerste moet je een skateboard pakken en de afstand meten van het voorste wiel tot en met het achterste wiel (de wielen moet je erbij meten!). Hierna haal je de wielen van het skateboard af. Als je dit gedaan hebt, meet je de breedte en de diameter van een van de wielen. Deze metingen heb je nodig voor het hout. Wat je nu gaat doen is het hout zagen. Het hout moet dezelfde breedte hebben als de wielen, de hoogte moet net zo lang zijn als de diameter van de wielen en de lengte moet net zo lang zijn als de afstand van het voorste wiel tot en met het achterste wiel. Je moet bij de uiteinden van de stukken hout de rechte hoek vervangen door een schuine hoek (ongeveer 45 graden), dus het uiteinden schuin zagen. Dit doe je twee keer (deze schuine rand moet aan de onderkant zitten). Nu moet je twee gaten in elke plank boren. Deze gaten moeten een diameter hebben die net zo groot is als de diameter van het gat van de wielen. Het hout moet ongeveer hetzelfde uitsteken aan de voor- en achterkant. Zet de planken nu vast aan het skateboard door middel van schroeven. Zorg ervoor dat je de schroeven niet (te ver) in het hout draait.

naamloos.png

Nu gaan we de arduino op het skateboard zetten:

Zorg ervoor dat alle losse onderdelen vastzitten aan de arduino, zodat ze niet kunnen vallen. Ook moet je opletten hoe je de arduino op je skateboard zet. Op de MPU-6050 staat een X met een pijltje en een Y met een pijltje. Je moet ervoor zorgen dat de X naar rechts wijst en de Y naar de neus van het skateboard (dit is zo als je naar de onderkant van het skateboard kijkt).

Nu gaan we de arduino programmeren:

Ga naar de site ‘arduino.org’ en download de ‘Arduino IDE’ (dit is de app die je gebruikt om de arduino te programmeren. Deze moet je alleen downloaden als je deze nog niet hebt). Eerst gaan we twee bibliotheken installeren. Ga naar de site ‘http://www.i2cdevlib.com/’ en download het bestand ‘zip archive of entire current repository snapshot’. Plaats het bestand op je bureaublad (dat kun je doen door het te slepen) en open het (het dubbele bestand kun je verwijderen). Ga naar de map ‘arduino’. Plaats de bestanden ‘i2Cdev’ en ‘MPU-6050’ op je bureaublad. Als je dit gedaan hebt kun je de rest verwijderen (mag, hoeft niet). Deze twee bestanden moet je samendrukken tot twee zip bestanden. Open de ‘arduino IDE’ en klik op ‘bibliotheken invoeren’. Klik op ‘zip toevoegen’ en voeg deze twee bestanden toe. Sluit dan de ‘Arduino IDE’ af. Start de ‘Arduino IDE’ opnieuw op. Vergeet niet om de juiste poort te kiezen!

Nu moet je deze code toevoegen:

#include ”I2Cdev.h”
#include ”MPU6050_6Axis_MotionApps20.h”
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include ”Wire.h”
#endif

MPU6050 mpu;

bool sendLeft = true;
bool sendRight = true;
bool sendJump = true;
bool sendCenter = true;

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

Seial.begin(9600);

Serial.println(F(”Initializing I2C devices…”));
mpu.initialize();

Serial.println(F(”Testing device connections…”));
Serial.println(mpu.testConnection() ? F(MPU6050 connection succesful”) : 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 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; mppu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); int x = ypr[0] * 180/M_PI; int y = ypr[1] * 180/M_PI; int z = ypr[2] * 180/M_PI; if (z >= 0){
//backward
if (sendJump){
Serial.write(”b”);
Serial.write(10);
sendJump = false;
}
sendLeft = true;
sendRight = true;
sendCenter = true;

} else if (y > 4){
//right
if (sendRight){
Serial.write(”r”);
Serial.write(10);
sendRight = false;
}
sendJump = true;
sendLeft = true;
sendCenter = true;
} else if  (y < -4){ //left if (sendLeft){ Serial.write(”l”); Serial.write(10); sendLeft = false } sendJump = true; sendRight = true; sendCenter = true; } else if (y >= -3 // y <= 3){
//center
if (sendCenter == true){
Serial.write(”c”);
Serial.write(10);
sendCenter = false;
}

sendJump = true;
sendLeft = true;
sendRight = true
}

}
}

void dmpDataReady()
{
mpuInterrupt = true;
}

Dit was de code.

Als het niet lukt, check of de computer op de juiste poort staat. Als het programma nog niet wil uploaden, ga dan naar de site ‘http://wirebeings.com/virtual-reality-skateboard.html’ en kopieer de code die daar staat. Deze code is voor een arduino Leonardo, dus er moet nog wat aan verandert worden. Bij deze code moet je bij alles waar ‘Serial1’ bij staat moet je eruit halen door middel van twee //. Bijvoorbeeld:

if (sendCenter == true){
Serial1.write(”c”);
Serial1.write(10);
Serial.write(”c”);
Serial.write(10);
sendCenter = false;

wordt:

if (sendCenter == true){
//Serial1.write(”c”);
//Serial1.write(10);
Serial.write(”c”);
Serial.write(10);
sendCenter = false;

De arduino moet tijdens het uploaden met een USB-draad bevestigd zijn aan de computer.

Om te testen of je arduino het doet, ga je naar ‘hulpmiddelen’ en klik je op ‘serial monitor’. Zorg ervoor dat de arduino nog steeds aan de computer is bevestigd. Als alles werkt, zie je op je computerscherm als je de MPU-6050 beweegt letters op het scherm verschijnen. Deze staan voor de kant waar de arduino op gaat. Zoals bijvoorbeeld: als je de MPU-6050 naar links helt, komt er een L op je beeldscherm tevoorschijn.

Nu kun je de arduino en de batterijdoos aan het skateboard bevestigen (dit hebben wij niet gedaan). Zorg ervoor dat de x naar rechts wijst en de y naar de neus van je skateboard. Je kunt de batterij in de batterijdoos doen en het aan de arduino aansluiten.

Nu gaan we de HC-05 bluetooth module met je telefoon verbinden:

Doe de arduino aan. Open je telefoon en ga naar ‘instellingen’. Open deze en ga naar ‘bluetooth’. Als het goed is, staat er bij ‘gevonden apparaten’ HC-05, als dit niet zo is klik dan op ‘apparaten zoeken’. Klik op ‘HC-05’ en voer de pincode in. Deze pincode is meestal 1234 en als dat niet werkt 0000. Nu ben je gekoppeld aan de HC-05.

Installeer nu de app ‘arduino skateboard vr’.naamloos

Nu kun je je VR Skateboard uitproberen. Veel Plezier!!!

Leave a Reply