Πίνακας περιεχομένων:

ITTT Rolando Ritzen - Motion Control Arcade Glove: 5 Βήματα
ITTT Rolando Ritzen - Motion Control Arcade Glove: 5 Βήματα

Βίντεο: ITTT Rolando Ritzen - Motion Control Arcade Glove: 5 Βήματα

Βίντεο: ITTT Rolando Ritzen - Motion Control Arcade Glove: 5 Βήματα
Βίντεο: Curious Beginnings | Critical Role: THE MIGHTY NEIN | Episode 1 2024, Ιούλιος
Anonim
ITTT Rolando Ritzen - Motion Control Arcade Glove
ITTT Rolando Ritzen - Motion Control Arcade Glove

Een handschoen die je kan gebruiken als motion controller voor on-rail shooters. Το έργο τέχνης είναι αυτό που επιτρέπει τον έλεγχο της κίνησης, συμπεριλαμβανομένου του ελέγχου. (Je schiet door te "finger bangen")

Βήμα 1: Het Materiaal

Het materiaal dat je gaat nodig hebben is vrij simpel. 1x Arduino pro micro του Arduino Leonardo 1x γυροσκόπιο MPU6050

4x kabels

Βήμα 2: De Bekabeling

Ντε Μπεκαμπελίνγκ
Ντε Μπεκαμπελίνγκ

Το Zoals je in het schema in de afbeelding ziet is de bekabeling super simpel. MPU VCC> Arduino VCCMPU γείωση> Arduino γείωση MPU SCL> Pin 3MPU SDA> Pin 2

Βήμα 3: Βιβλιοθήκες 1

Βιβλιοθήκες 1
Βιβλιοθήκες 1

Βοηθήστε το έργο σας για να προσαρμόσετε τις προσαρμοσμένες βιβλιοθήκες και να συνδέσετε τον σύνδεσμο:

Κατεβάστε το αρχείο ZIP μέσω του "Κλωνοποίηση ή λήψη" knop rechts bovenaan.

Βήμα 4: Βιβλιοθήκες 2

Βιβλιοθήκες 2
Βιβλιοθήκες 2

Ανοίξτε το αρχείο Zip και κάντε κλικ στον χάρτη "Arduino". Ενσωματωμένος χάρτης Arduino με χάρτες "I2Cdev" και "MPU6050" πακέτο σε βιβλιοθήκες Arduino που έχουν δημιουργηθεί (Αρχεία προγράμματος> Arduino> βιβλιοθήκες)

Βήμα 5: De Code

#περιλαμβάνω

#Include #include #include #include

MPU6050 mpu.

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

int16_t accx, accy, accz; int vx, vy; πλωτή γωνία?

// κώδικας για εξομάλυνση inputint readIndex = 0; const int numReadings = 20; int angleReadings [numReadings]; int σύνολο = 0; float averageAngle = 0,0;

int oldZ = 0;

int newZ = 0;

void setup () {Serial.begin (115200); Wire.begin (); Mouse.begin (); mpu.initialize (); εάν (! mpu.testConnection ()) {ενώ (1); }

για (int thisReading = 0; thisReading <numReadings; thisReading ++) {angleReadings [thisReading] = 0; }}

void loop () {

σύνολο = σύνολο - angleReadings [readIndex];

angleReadings [readIndex] = γωνία; σύνολο = σύνολο + angleReadings [readIndex]; readIndex = readIndex + 1; εάν (readIndex> = numReadings) {readIndex = 0; }

if (gz> 30000) {Serial.println ("Bang"); Mouse.click (); // Πυροβολήστε με το κτύπημα του όπλου προς τα πίσω (χτύπημα του δακτύλου)}

// accx, accy, accz;

mpu.getMotion6 (& ax, & ay, & az, & gx, & gy, & gz); mpu.getAcceleration (& accx, & accy, & accz); //Serial.println(gy); // Serial.println (γωνία);

oldZ = newZ;

vx = (gx + 1000) / 150; vy = - (gz - 200) / 150; Mouse.move (vx, vy); καθυστέρηση (20)?

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

Wat er waarschijnlijk gaat gebeuren is dat je cursor 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. Οι τιμές είναι σε "gx + 1000" και "gz - 200" aanpassen totdat je het resultaat δημιουργώντας αυτές τις τιμές που θέλουμε να πετύχουμε όταν δεν έχουμε καμία απάντηση. Als de cursor uit zichzelf van rechts naar links beweegd wil je "gx + x" aanpassen. Als de cursor uit zichzelf van boven naar onder beweegd wil je de "gz - x" aan passen. Als het diagonaal beweegd, dan kies je een van de twee values om aan te passen totdat hij nog maar over een as beweegd en dan pas je de andere aan.

Serial.print ("gx =");

Serial.print (gx); Serial.print ("| gz ="); Serial.print (gz); Serial.print ("| gy ="); Serial.println (gy); if (gx> 32000) {Serial.println ("Flick Right"); // Επαναφόρτωση κατά το χτύπημα του όπλου προς τα δεξιά Keyboard.write ('r'); καθυστέρηση (250)? } Serial.print ("accx ="); Serial.print (accx); Serial.print ("| accy ="); Serial.print (accy); Serial.print ("| accz ="); Serial.println (accz); // εργασίας // γωνία = atan2 ((float) (ay - 16384), (float) (ax - 16384)) * (180.0 /PI) * -1; γωνία = atan2 ((float) ay, (float) ~ ax) * (180.0 / PI); // float angle = atan2 ((float) ay, (float) -ax) * (180.0 /PI); //Serial.println(averageAngle); }

Συνιστάται: