Isi kandungan:

ITTT Rolando Ritzen - Sarung Tangan Arcade Motion Control: 5 Langkah
ITTT Rolando Ritzen - Sarung Tangan Arcade Motion Control: 5 Langkah

Video: ITTT Rolando Ritzen - Sarung Tangan Arcade Motion Control: 5 Langkah

Video: ITTT Rolando Ritzen - Sarung Tangan Arcade Motion Control: 5 Langkah
Video: A Bob Velseb Dating Sim - Fappable Cannibal DEMO 2024, Julai
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 shooter. De gimmick van dit projek adalah kawalan gerak dat alles, inclusief het schieten. (Je schiet pintu te "jari bangen")

Langkah 1: Het Materiaal

Het materiaal dat je gaat nodig hebben adalah vrij simpel. 1x Arduino pro mikro dari giroskop Arduino Leonardo1x MPU6050

4x kabels

Langkah 2: De Bekabeling

De Bekabeling
De Bekabeling

Zoals je in het schema in de afbeelding ziet adalah bekabeling super simpel. MPU VCC> Arduino VCCMPU ground> Arduino groundMPU SCL> Pin 3MPU SDA> Pin 2

Langkah 3: Perpustakaan 1

Perpustakaan 1
Perpustakaan 1

Voor dit project heb je een paar pustaka khusus nodig van deze pautan:

Muat turun fail ZIP een melalui de "Clone or download" knop rechts bovenaan.

Langkah 4: Perpustakaan 2

Perpustakaan 2
Perpustakaan 2

Buka fail de Zip dan klik op het mapje "Arduino". En uit deze Arduino map wil je de mapjes "I2Cdev" en "MPU6050" pakken en in je Arduino library zetten (Program Files> Arduino> perpustakaan)

Langkah 5: De Code

#sertakan

#sertakan #sertakan #sertakan #sertakan

MPU6050 mpu;

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

int16_t accx, accy, accz; int vx, vy; sudut apungan;

// kod untuk melancarkan inputint readIndex = 0; const int numReadings = 20; int angleReadings [numReadings]; jumlah int = 0; purata apunganAngle = 0.0;

int oldZ = 0;

int newZ = 0;

persediaan tidak sah () {Serial.begin (115200); Wire.begin (); Tetikus.begin (); mpu.initialize (); jika (! mpu.testConnection ()) {sementara (1); }

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

gelung kosong () {

total = total - angleReadings [readIndex];

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

jika (gz> 30000) {Serial.println ("Bang"); Tetikus.klik (); // Tembak dengan menjentikkan pistol ke belakang (memukul jari)}

// accx, accy, accz;

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

oldZ = newZ;

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

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

Wat er waarschijnlijk gaat gebeuren adalah dat je kursor uit zichzelf over je scherm gaat bewegen (van rechts naar link, van boven naar onder of diagonaal) en dit stukje code zorgt er voor dat je curor stil blijft staan als je geen input geeft. Nilai mo mo de dalam "gx + 1000" en "gz - 200" aanpassen totdat je het resultaat krijgt dat je wil en ik denk dat de nilai die wil nodig hebt afhankelijk zijn van je scherm resolutie. Als de kursor uit zichzelf van rechts naar link beweegd wil je "gx + x" aanpassen. Als de kursor uit zichzelf van boven naar onder beweegd wil je de "gz - x" aan passen. Ala het diagonaal beweegd, dan kies je een van de twee nilai om aan te passen totdat hij nog maar over een as beweegd en dan pas je de andere aan.

Serial.print ("gx =");

Cetakan bersiri (gx); Serial.print ("| gz ="); Cetakan bersiri (gz); Serial.print ("| gy ="); Serial.println (gy); jika (gx> 32000) {Serial.println ("Flick Right"); // Muat semula semasa menjentikkan pistol ke Papan Kekunci kanan.write ('r'); kelewatan (250); } Serial.print ("accx ="); Serial.print (accx); Serial.print ("| accy ="); Serial.print (accy); Serial.print ("| accz ="); Serial.println (accz); // bekerja // sudut = atan2 ((apungan) (ay - 16384), (apungan) (kapak - 16384)) * (180.0 / PI) * -1; sudut = atan2 ((apungan) ay, (apungan) ~ kapak) * (180.0 / PI); // float angle = atan2 ((float) ay, (float) -ax) * (180.0 / PI); //Serial.println(averageAngle); }

Disyorkan: