INHOUDSOPGAWE:

ITTT Rolando Ritzen - Bewegingsbeheer Arcadehandskoen: 5 stappe
ITTT Rolando Ritzen - Bewegingsbeheer Arcadehandskoen: 5 stappe

Video: ITTT Rolando Ritzen - Bewegingsbeheer Arcadehandskoen: 5 stappe

Video: ITTT Rolando Ritzen - Bewegingsbeheer Arcadehandskoen: 5 stappe
Video: Защитишь $500,000, Получишь Их! 2024, Julie
Anonim
ITTT Rolando Ritzen - Bewegingsbeheer -arcadehandskoen
ITTT Rolando Ritzen - Bewegingsbeheer -arcadehandskoen

Een handskoen wat u as bewegingsbeheerder kan gebruik vir skieters op die spoor. Die gimmick van dit projek is dat alles bewegingsbeheer is, insluitend die skiet. (Je schiet door te "finger bangen")

Stap 1: materiaal

Die materiaal wat u nodig het, is baie eenvoudig. 1x Arduino pro micro van Arduino Leonardo1x MPU6050 gyroscoop

4x kabels

Stap 2: De Bekabeling

De Bekabeling
De Bekabeling

Zoals is 'n skema in die prentjie wat baie eenvoudig is. MPU VCC> Arduino VCCMPU grond> Arduino grond MPU SCL> Pin 3MPU SDA> Pin 2

Stap 3: Biblioteke 1

Biblioteke 1
Biblioteke 1

Vir hierdie projek moet u 'n paar aangepaste biblioteke van hierdie skakel benodig:

Laai 'n zip -lêer af met die knoppie "Klone of aflaai".

Stap 4: Biblioteke 2

Biblioteke 2
Biblioteke 2

Open die zip -lêer en klik op die kaart "Arduino". 'N Uit hierdie Arduino -kaart sal die "I2Cdev" en "MPU6050" pakkette in u Arduino -biblioteke plaas (programlêers> Arduino> biblioteke)

Stap 5: De Code

#insluit

#include #include #include #include

MPU6050 mpu;

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

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

// kode vir die gladmaak van inputint readIndex = 0; const int numReadings = 20; int angleReadings [numReadings]; int totaal = 0; float averageAngle = 0.0;

int oldZ = 0;

int newZ = 0;

ongeldige opstelling () {Serial.begin (115200); Wire.begin (); Muis.begin (); mpu.initialize (); as (! mpu.testConnection ()) {terwyl (1); }

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

leemte -lus () {

total = total - angleReadings [readIndex];

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

as (gz> 30000) {Serial.println ("Bang"); Muis.kliek (); // Skiet deur die geweer agteruit te slaan (vinger slaan)}

// accx, accy, accz;

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

oldZ = newZ;

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

Hierdie stukje kode het 'n bietjie nodig omdat jy waarskynlik 'n klein bietjie moet aanpas.

Wat is waarskynlik dat gebeure is dat die rigting van u self oor u skerm gaan (van links na links, van bo na onder in diagonaal) en dat die kode kode sorg vir u dat u curor steeds kan bly as u geen invoer gee nie. U moet die waardes in "gx + 1000" en "gz - 200" aanpas totdat u die resultaat kan kry en dat die waardes van u nodig is om van u skerm resoluut afhanklik te wees. As die cursor uit homself van regs na skakels beweer word, sal u "gx + x" aanpas. As die diagonaal beweer word, kan u 'n van die twee waardes kies om aan te pas, maar hy kan net meer as een beweer en dan die ander aan.

Serial.print ("gx =");

Reeks.afdruk (gx); Serial.print ("| gz ="); Reeks.afdruk (gz); Serial.print ("| gy ="); Serial.println (gy); as (gx> 32000) {Serial.println ("Regs flikker"); // Herlaai as die geweer na regs flikker Keyboard.write ('r'); vertraging (250); } Serial.print ("accx ="); Reeks.afdruk (accx); Serial.print ("| accy ="); Serial.print (accy); Serial.print ("| accz ="); Serial.println (accz); // werk // hoek = atan2 ((float) (ay - 16384), (float) (ax - 16384)) * (180.0 /PI) * -1; hoek = atan2 ((float) ay, (float) ~ ax) * (180.0 / PI); // float hoek = atan2 ((float) ay, (float) -ax) * (180.0 /PI); //Serial.println(averageAngle); }

Aanbeveel: