Sadržaj:

ITTT Rolando Ritzen - Arkadna rukavica za upravljanje pokretom: 5 koraka
ITTT Rolando Ritzen - Arkadna rukavica za upravljanje pokretom: 5 koraka

Video: ITTT Rolando Ritzen - Arkadna rukavica za upravljanje pokretom: 5 koraka

Video: ITTT Rolando Ritzen - Arkadna rukavica za upravljanje pokretom: 5 koraka
Video: Часть 2. Аудиокнига Зейна Грея «Последний из жителей равнин» (гл. 06–11) 2024, Studeni
Anonim
ITTT Rolando Ritzen - Arkadna rukavica za upravljanje pokretom
ITTT Rolando Ritzen - Arkadna rukavica za upravljanje pokretom

Een handschoen die je kan gebruiken als motion controller voor on-rail shooters. Ovaj trik je zasnovan na kontroli kretanja, uključujući i njegovu kontrolu. (Je li tiho vrata su "prst udario")

Korak 1: Het Materiaal

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

4x kabelske

Korak 2: De Bekabeling

De Bekabeling
De Bekabeling

Zoals je u het shemi u de afbeelding ziet je de bekabeling super jednostavan. MPU VCC> Arduino VCCMPU uzemljenje> Arduino uzemljenjeMPU SCL> Pin 3MPU SDA> Pin 2

Korak 3: Knjižnice 1

Knjižnice 1
Knjižnice 1

Za projekt heb je een paar prilagođene knjižnice nodig van deze link:

Preuzmite ZIP datoteku putem opcije "Kloniraj ili preuzmi".

Korak 4: Knjižnice 2

Knjižnice 2
Knjižnice 2

Otvorite de zip datoteku i kliknite na karti "Arduino". U Arduino karti nalazi se "I2Cdev" i "MPU6050" pakiranje u Arduino biblioteci (programske datoteke> Arduino> knjižnice)

Korak 5: De Code

#uključi

#include #include #include #include

MPU6050 mpu;

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

int16_t accx, accy, accz; int vx, vy; kut plovka;

// kôd za izglađivanje inputint readIndex = 0; const int numReadings = 20; int angleReadings [numReadings]; int ukupno = 0; float averageAngle = 0,0;

int oldZ = 0;

int novoZ = 0;

void setup () {Serial.begin (115200); Wire.begin (); Mouse.begin (); mpu.initialize (); if (! mpu.testConnection ()) {while (1); }

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

void loop () {{100} {101}

total = total - angleReadings [readIndex];

angleReadings [readIndex] = kut; ukupno = ukupno + kutno čitanje [readIndex]; readIndex = readIndex + 1; if (readIndex> = numReadings) {readIndex = 0; }

if (gz> 30000) {Serial.println ("prasak"); Miš.klik (); // Pucajte trzanjem pištolja unatrag (udaranje prstom)}

// accx, accy, accz;

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

stariZ = noviZ;

vx = (gx + 1000) / 150; vy = - (gz - 200) / 150; Miš.kretanje (vx, vy); kašnjenje (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. Je moet de values in "gx + 1000" en "gz - 200" aanpassen totdat is het resultaat krijgt dat je wil en ik denk dat de values die wil nodig hebt afhankelijk zijn van je scherm resolutie. 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 =");

Serijski.ispis (gx); Serial.print ("| gz ="); Serijski.ispis (gz); Serial.print ("| gy ="); Serijski.println (gy); if (gx> 32000) {Serial.println ("Flick Right"); // Ponovno punjenje pri prebacivanju pištolja na desnu tipkovnicu Keyboard.write ('r'); kašnjenje (250); } Serial.print ("accx ="); Serijski.ispis (accx); Serial.print ("| accy ="); Serijski.ispis (accy); Serial.print ("| accz ="); Serijski.println (accz); // radni // kut = atan2 ((plovak) (ay - 16384), (plovak) (sjekira - 16384)) * (180,0 /PI) * -1; kut = atan2 ((plovak) ay, (plovak) ~ sjekira) * (180,0 / PI); // kut plutanja = atan2 ((float) ay, (float) -ax) * (180.0 /PI); //Serial.println(averageAngle); }

Preporučeni: