Talaan ng mga Nilalaman:

ITTT Rolando Ritzen - Motion Control Arcade Glove: 5 Hakbang
ITTT Rolando Ritzen - Motion Control Arcade Glove: 5 Hakbang

Video: ITTT Rolando Ritzen - Motion Control Arcade Glove: 5 Hakbang

Video: ITTT Rolando Ritzen - Motion Control Arcade Glove: 5 Hakbang
Video: When players lose control ๐ŸฅŠ๐Ÿ˜ณ 2024, Hulyo
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. Ang proyekto ng gimik na van ay lahat ng paggalaw ng paggalaw ay, inclusief het schieten. (Je schiet door te "daliri bangen")

Hakbang 1: Het Materiaal

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

4x kabels

Hakbang 2: De Bekabeling

De Bekabeling
De Bekabeling

Ang mga pag-zoom sa iskema sa pag-uusap sa ziet ay de bekabeling sobrang simpel. MPU VCC> Arduino VCCMPU ground> Arduino groundMPU SCL> Pin 3MPU SDA> Pin 2

Hakbang 3: Mga Aklatan 1

Mga Aklatan 1
Mga Aklatan 1

Wala itong proyekto kung saan naka-link ang mga pasadyang silid aklatan na walang link sa link:

Mag-download ng een ZIP file sa pamamagitan ng "Clone or download" knop rechts bovenaan.

Hakbang 4: Mga Aklatan 2

Mga Aklatan 2
Mga Aklatan 2

Buksan ang de Zip file at i-click ang het mapje "Arduino". Sa iyo ang mapa ng Arduino upang mailagay ang "I2Cdev" at "MPU6050" na aken sa mga aklatan ng Arduino (Program Files> Arduino> mga aklatan)

Hakbang 5: De Code

# isama

# isama # isama # isama # isama

MPU6050 mpu;

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

int16_t accx, accy, accz; int vx, vy; anggulo ng float;

// code for smoothing inputint readIndex = 0; const int numReadings = 20; int angguloReadings [numReadings]; int kabuuang = 0; float averageAngle = 0.0;

int oldZ = 0;

int bagongZ = 0;

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

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

void loop () {

kabuuan = kabuuan - angguloReadings [readIndex];

angguloReadings [readIndex] = anggulo; kabuuan = kabuuang + angguloReadings [readIndex]; readIndex = readIndex + 1; kung (readIndex> = numReadings) {readIndex = 0; }

kung (gz> 30000) {Serial.println ("Bang"); Mouse.click (); // Shoot by flicking the gun backward (finger banging)}

// accx, accy, accz;

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

oldZ = newZ;

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

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

Ang iyong mga serbisyo ay nai-click upang makita ang higit sa lahat na mga link (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. Maari mong pahalagahan ang in "gx + 1000" en "gz - 200" aanpassen totdat je 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 link 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); kung (gx> 32000) {Serial.println ("Flick Right"); // Reload kapag pumitik ang baril sa kanang Keyboard.write ('r'); pagkaantala (250); } Serial.print ("accx ="); Serial.print (accx); Serial.print ("| accy ="); Serial.print (accy); Serial.print ("| accz ="); Serial.println (accz); // working // anggulo = atan2 ((float) (ay - 16384), (float) (ax - 16384)) * (180.0 / PI) * -1; anggulo = atan2 ((float) ay, (float) ~ ax) * (180.0 / PI); // float anggulo = atan2 ((float) ay, (float) -ax) * (180.0 / PI); //Serial.println(averageAngle); }

Inirerekumendang: