Daftar Isi:

ITTT Rolando Ritzen - Sarung Tangan Arcade Kontrol Gerak: 5 Langkah
ITTT Rolando Ritzen - Sarung Tangan Arcade Kontrol Gerak: 5 Langkah

Video: ITTT Rolando Ritzen - Sarung Tangan Arcade Kontrol Gerak: 5 Langkah

Video: ITTT Rolando Ritzen - Sarung Tangan Arcade Kontrol Gerak: 5 Langkah
Video: Part 2 - The Adventures of Tom Sawyer Audiobook by Mark Twain (Chs 11-24) 2024, Juli
Anonim
ITTT Rolando Ritzen - Sarung Tangan Arkade Kontrol Gerakan
ITTT Rolando Ritzen - Sarung Tangan Arkade Kontrol Gerakan

Een handschoen die je kan gebruiken als motion controller voor on-rail shooters. De gimmick van dit project adalah semua kontrol gerak, termasuk het schieten. (Je schiet door te "finger bangen")

Langkah 1: Bahan Het

Het material dat je gaat nodig hebben is vrij simpel. 1x Arduino pro mikro Arduino Leonardo1x MPU6050 giroskop

4x kabel

Langkah 2: De Bekabeling

De Bekabeling
De Bekabeling

Zoals je dalam skema het di de afbeelding ziet adalah de 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 perpustakaan khusus tautan nodig van deze:

Unduh file ZIP een melalui de "Klon atau unduh" knop rechts bovenaan.

Langkah 4: Perpustakaan 2

Perpustakaan 2
Perpustakaan 2

Buka file 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 > libraries)

Langkah 5: De Kode

#termasuk

#sertakan #sertakan #sertakan #sertakan

MPU6050 mpu;

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

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

//kode untuk menghaluskan inputint readIndex = 0; const int numBacaan = 20; int angleReadings[numReadings]; int jumlah = 0; float rata-rataAngle = 0,0;

int lamaZ = 0;

int baruZ = 0;

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

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

lingkaran kosong() {

total = total - angleReadings[readIndex];

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

if (gz > 30000) { Serial.println("Bang"); Klik mouse(); //Menembak dengan menjentikkan pistol ke belakang (finger banging) }

//acx, accy, accz;

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

lamaZ = baruZ;

vx = (gx + 1000) / 150; vy = -(gz - 200) / 150; Mouse.move(vx, vy); penundaan (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 diagonal) en dit stukje code zorgt er voor dat je curor stil geblijft statif. Nilai dalam "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 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 nilai 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); if (gx > 32000) { Serial.println("Flick Right"); //Muat ulang saat menjentikkan pistol ke kanan Keyboard.write('r'); penundaan (250); } Serial.print("accx = "); Serial.print(acx); Serial.print(" | accy = "); Serial.print(accy); Serial.print(" | accz = "); Serial.println(acz); //kerja //angle = atan2((float) (ay - 16384), (float) (ax - 16384)) * (180.0 / PI) * -1; sudut = atan2((mengambang) ay, (mengambang) ~kapak) * (180.0 / PI); //sudut mengambang = atan2((mengambang) ay, (mengambang) -ax) * (180.0 / PI); //Serial.println(AverageAngle); }

Direkomendasikan: