Innholdsfortegnelse:

ITTT Rolando Ritzen - Motion Control Arcade Hanske: 5 trinn
ITTT Rolando Ritzen - Motion Control Arcade Hanske: 5 trinn

Video: ITTT Rolando Ritzen - Motion Control Arcade Hanske: 5 trinn

Video: ITTT Rolando Ritzen - Motion Control Arcade Hanske: 5 trinn
Video: Часть 3. Аудиокнига Зейна Грея «Последний из жителей равнин» (главы 12–17) 2024, November
Anonim
ITTT Rolando Ritzen - Bevegelseskontroll Arkadehanske
ITTT Rolando Ritzen - Bevegelseskontroll Arkadehanske

En håndskifte som du kan bruke som bevegelseskontroller for skytter på jernbane. De gimmick van dit project is that alles motion control is, including it schieten. (Je schiet door te "finger bangen")

Trinn 1: Materialet

Det materialet du trenger er veldig enkelt. 1x Arduino pro micro av Arduino Leonardo1x MPU6050 gyroskop

4x kabels

Trinn 2: De Bekabeling

De Bekabeling
De Bekabeling

Zoals er et skjema med en avbildet ser ut som en veldig enkel bekreftelse. MPU VCC> Arduino VCCMPU bakken> Arduino bakken MPU SCL> Pin 3MPU SDA> Pin 2

Trinn 3: Biblioteker 1

Biblioteker 1
Biblioteker 1

For dette prosjektet må du ha noen tilpassede biblioteker som trenger denne lenken:

Last ned en ZIP -fil med knappen "Klon eller nedlasting".

Trinn 4: Biblioteker 2

Biblioteker 2
Biblioteker 2

Åpne Zip -filen og klikk på "Arduino". En av dette Arduino -kartet vil gi kartene "I2Cdev" og "MPU6050" pakken og i Arduino -bibliotekene (programfiler> Arduino> biblioteker)

Trinn 5: Kode

#inkludere

#include #include #include #include

MPU6050 mpu;

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

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

// kode for utjevning av inputint readIndex = 0; const int numReadings = 20; int angleReadings [numReadings]; int totalt = 0; float averageAngle = 0.0;

int oldZ = 0;

int newZ = 0;

ugyldig oppsett () {Serial.begin (115200); Wire.begin (); Mus.begin (); mpu.initialize (); if (! mpu.testConnection ()) {while (1); }

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

void loop () {

total = total - angleReadings [readIndex];

angleReadings [readIndex] = vinkel; total = total + angleReadings [readIndex]; readIndex = readIndex + 1; hvis (readIndex> = numReadings) {readIndex = 0; }

if (gz> 30000) {Serial.println ("Bang"); Mus. Klikk (); // Skyt ved å skyte pistolen bakover (fingerslag)}

// accx, accy, accz;

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

oldZ = newZ;

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

Denne delkoden har litt nødvendig fordi du sannsynligvis trenger en liten pakke.

Hva er sannsynlig at hendelsene er at markøren din kan bli over seg selv når skjermen blir vist (fra høyre til koblinger, fra oven til under diagonalen) og i denne kodekoden for å sikre at kurven din fortsatt blir stående som du ikke gir noen inngang. Du må verdiene i "gx + 1000" og "gz - 200" når du får resultatet at du vil at verdiene trenger å ha avhengige av skjermens løsning. Hvis markøren fra seg selv eller til lenker viser seg å være "gx + x" på passasjerer. Som en diagonal bevegelse, kan du velge en av de to verdiene for å kunne passere, men han kan bare si mer enn en som kan bekreftes, og da kan du også si de andre.

Serial.print ("gx =");

Serial.print (gx); Serial.print ("| gz ="); Serial.print (gz); Serial.print ("| gy ="); Serial.println (gy); if (gx> 32000) {Serial.println ("Flick til høyre"); // Last inn igjen når du blar med pistolen til høyre Keyboard.write ('r'); forsinkelse (250); } Serial.print ("accx ="); Serial.print (accx); Serial.print ("| accy ="); Serial.print (accy); Serial.print ("| accz ="); Serial.println (accz); // arbeider // vinkel = atan2 ((float) (ay - 16384), (float) (ax - 16384)) * (180,0 /PI) * -1; vinkel = atan2 ((float) ay, (float) ~ ax) * (180,0 / PI); // flytevinkel = atan2 ((float) ay, (float) -ax) * (180,0 /PI); //Serial.println(averageAngle); }

Anbefalt: