Inhoudsopgave:

ITTT Rolando Ritzen - Motion Control Arcade-handschoen - Ajarnpa
ITTT Rolando Ritzen - Motion Control Arcade-handschoen - Ajarnpa

Video: ITTT Rolando Ritzen - Motion Control Arcade-handschoen - Ajarnpa

Video: ITTT Rolando Ritzen - Motion Control Arcade-handschoen - Ajarnpa
Video: When players lose control 馃馃槼 2024, Juli-
Anonim
ITTT Rolando Ritzen - Motion Control Arcade-handschoen
ITTT Rolando Ritzen - Motion Control Arcade-handschoen

Een handschoen die je kan gebruiken als motion controller voor on-rail shooters. De gimmick van dit project is dat alles motion control is, inclusief het schieten. (Je schiet door te "finger bangen")

Stap 1: Het Materiaal

Het materiaal dat je gaat nodig hebben is vrij simpel. 1x Arduino pro micro of Arduino Leonardo1x MPU6050 gyroscoop

4x kabel

Stap 2: De Bekabeling

De Bekabeling
De Bekabeling

Zoals je in het schema in de afbeelding ziet is de bekabeling super simpel. MPU VCC > Arduino VCCMPU aarde > Arduino aarde MPU SCL > Pin 3MPU SDA > Pin 2

Stap 3: Bibliotheken 1

Bibliotheken 1
Bibliotheken 1

Voor dit project heb je een paar aangepaste bibliotheken nodig van deze link:

Download een ZIP-bestand via de "Clone or download" knop rechts bovenaan.

Stap 4: Bibliotheken 2

Bibliotheken 2
Bibliotheken 2

Open de Zip file en klik op het mapje "Arduino". En uit deze Arduino kaart wil je de mapjes "I2Cdev" en "MPU6050" pakken en in je Arduino bibliotheken zetten (Program Files > Arduino > libraries)

Stap 5: De code

#erbij betrekken

#include #include #include #include

MPU6050mpu;

int16_t ax, ay, az, gx, gy, gz;

int16_t accx, accy, accz; int vx, vy; zweefhoek;

// code voor het afvlakken van inputint readIndex = 0; const int numReadings = 20; int angleReadings[numReadings]; int totaal = 0; float gemiddeldeAngle = 0.0;

int oudZ = 0;

int nieuwZ = 0;

void setup() { Serial.begin(115200); Draad.begin(); Muis.begin(); mpu.initialiseren(); if (!mpu.testConnection()) { while (1); }

for (int thisReading = 0; thisReading < numReadings; thisReading++) { angleReadings[thisReading] = 0; } }

lege lus() {

totaal = totaal - hoekaflezingen [readIndex];

angleReadings[readIndex] = hoek; totaal = totaal + hoekaflezingen [readIndex]; readIndex = readIndex + 1; if (readIndex >= numReadings) { readIndex = 0; }

if (gz > 30000) { Serial.println ("Bang"); Muis klik(); // Schiet door het pistool naar achteren te vegen (vingerbonzen)}

// accx, accy, accz;

mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); mpu.getAcceleration(&accx, &accy, &accz); //Serial.println(gy); // Serial.println (hoek);

oudeZ = nieuweZ;

vx = (gx + 1000) / 150; vy = -(gz - 200) / 150; Mouse.move(vx, vy); vertraging(20);

Dit stukje code heeft een beetje uitleg nodig omdat je waarschijnlijk een klein beetje moet aanpassen.

Wat er gaat gebeuren is dat je cursor uit zichzelf over je scherm gaat bewegen (van rechts naar links, van boven naar onder van diagonaal) en dit stukje code zorgt ervoor dat je curor stil blijft staan als je geen input geeft. Je moet de waarden in "gx + 1000" en "gz - 200" aanpassen om tot het resultaat te komen dat je nodig hebt dat de waarden afhankelijk zijn van je scherm resolutie. Als de cursor uit zichzelf van rechts naar links bewegend wil je "gx + x" aanpassen. Als de cursor uit zichzelf van boven naar onder bewegend wil je de "gz - x" aan passagiers. Als het diagonaal beweegd, dan kies je een van de twee waarden om aan te passen totdat hij nog maar over een as beweegd en dan pas je de andere aan.

Serial.print("gx = ");

Seri毛le.print(gx); Serial.print(" | gz = "); Seri毛le.print(gz); Serial.print(" | gy = "); Serieel.println(gy); if (gx > 32000) { Serial.println ("Flick Right"); //Herladen wanneer het pistool naar rechts wordt geduwd Keyboard.write('r'); vertraging (250); } Serial.print("accx = "); Seri毛le.print(accx); Serial.print(" | accy = "); Serial.print(accy); Serial.print(" | accz = "); Serial.println(accz); //working //angle = atan2((float) (ay - 16384), (float) (ax - 16384)) * (180,0 / PI) * -1; hoek = atan2((float) ay, (float) ~ax) * (180,0 / PI); // zweefhoek = atan2 ((float) ay, (float) -ax) * (180,0 / PI); //Serial.println (gemiddelde hoek); }

Aanbevolen: