Tartalomjegyzék:

ITTT Rolando Ritzen - Motion Control Arcade Glove: 5 lépés
ITTT Rolando Ritzen - Motion Control Arcade Glove: 5 lépés

Videó: ITTT Rolando Ritzen - Motion Control Arcade Glove: 5 lépés

Videó: ITTT Rolando Ritzen - Motion Control Arcade Glove: 5 lépés
Videó: When players lose control 🥊😳 2024, November
Anonim
ITTT Rolando Ritzen - Motion Control Arcade kesztyű
ITTT Rolando Ritzen - Motion Control Arcade kesztyű

Een handschoen die je kan gebruiken als motion controller voor on-rail shooters. De van trükk a projektben, hogy csak a mozgásvezérlés van, beleértve a hatást. (Je schiet ajtó "ujj bangen")

1. lépés: Het Materiaal

Het anyag dat je gaat nodig hebben is vrij simpel. 1x Arduino pro mikro Arduino Leonardo 1x MPU6050 giroszkóp

4x kabels

2. lépés: De Bekabeling

De Bekabeling
De Bekabeling

Zoals je in het schema in de afbeelding ziet is de bekabeling super simpel. MPU VCC> Arduino VCCMPU földelés> Arduino földi MPU SCL> 3 -as érintkező MPU SDA> 2 -es tű

3. lépés: Könyvtárak 1

Könyvtárak 1
Könyvtárak 1

Voor dit project heb je een paar custom libraries nodig van deze link:

Töltse le az een ZIP fájlt a "Klón vagy töltse le" knop rechts bovenaan segítségével.

4. lépés: Könyvtárak 2

Könyvtárak 2
Könyvtárak 2

Nyissa meg a Zip fájlt, majd kattintson az "Arduino" térképre. Az Arduino térkép megjelenítése az "I2Cdev" és az "MPU6050" csomagban en in Arduino libraries zetten (Program Files> Arduino> libraries)

5. lépés: De kódolás

#befoglalni

#befoglalás #befoglalás #befoglalás #befoglalás

MPU6050 mpu;

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

int16_t accx, accy, accz; int vx, vy; lebegési szög;

// kód simítására inputint readIndex = 0; const int numReadings = 20; int angleReadings [numReadings]; int összesen = 0; úszó átlagAngle = 0,0;

int oldZ = 0;

int újZ = 0;

void setup () {Serial.begin (115200); Wire.begin (); Egér.kezdet (); mpu.initialize (); if (! mpu.testConnection ()) {while (1); }

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

void loop () {

összesen = összesen - szögReadings [readIndex];

angleReadings [readIndex] = szög; összesen = összesen + szögReadings [readIndex]; readIndex = readIndex + 1; if (readIndex> = számReadings) {readIndex = 0; }

if (gz> 30000) {Serial.println ("Bang"); Egér.kattint (); // Lőni a pisztoly hátrafelé pöccintésével (ujjbecsapás)}

// accx, accy, accz;

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

oldZ = newZ;

vx = (gx + 1000) / 150; vy = - (gz - 200) / 150; Egér.move (vx, vy); késleltetés (20);

Ez a kód heeft een beetje uitleg nodig omdat je het waarschijnlijk een klein beetje moet aanpassen.

Wat er waarschijnlijk gaat gebeuren is dat je kurzor uit zichzelf over je scherm gaat bewegen (van rechts naar links, van boven naar onder of diagonaal) en dit stukje code zorgt er voor dat je curor stil blijft staan als je geen input geeft. Je moet de values in in "gx + 1000" en "gz - 200" aanpassen totdat je het resultaat krijgt dat je wil en ik denk dat de values die wil nodig hebt afhankelijk zijn van je scherm resolutie. Ha a kurzor uit zichzelf van rechts naar links beweegd wil je "gx + x" aanpassen. Als de kurzor uit zichzelf van boven naar onder beweegd wil je de "gz - x" aan utas. Als het diagonaal beweegd, dan kies je een van de twee values om aan te utas totdat hij nog maar over een as beweegd en dan pas je de andere aan.

Soros.nyomtatás ("gx =");

Soros.nyomat (gx); Soros.nyomtatás ("| gz ="); Soros.nyomat (gz); Soros.nyomat ("| gy ="); Soros.println (gy); if (gx> 32000) {Serial.println ("Flick jobbra"); // Újratöltés a pisztoly jobbra pöccintése esetén Billentyűzet.write ('r'); késleltetés (250); } Serial.print ("accx ="); Serial.print (accx); Serial.print ("| accy ="); Serial.print (accy); Soros.nyomtatás ("| accz ="); Soros.println (accz); // működő // szög = atan2 ((úszó) (ay - 16384), (úszó) (ax - 16384)) * (180,0 /PI) * -1; szög = atan2 ((float) ay, (float) ~ ax) * (180,0 / PI); // lebegési szög = atan2 ((úszó) ay, (úszó) -ax) * (180,0 /PI); //Serial.println(averageAngle); }

Ajánlott: