İçindekiler:

ITTT Rolando Ritzen - Hareket Kontrollü Atari Eldiveni: 5 Adım
ITTT Rolando Ritzen - Hareket Kontrollü Atari Eldiveni: 5 Adım

Video: ITTT Rolando Ritzen - Hareket Kontrollü Atari Eldiveni: 5 Adım

Video: ITTT Rolando Ritzen - Hareket Kontrollü Atari Eldiveni: 5 Adım
Video: Part 01 - Moby Dick Audiobook by Herman Melville (Chs 001-009) 2024, Kasım
Anonim
ITTT Rolando Ritzen - Hareket Kontrollü Atari Eldiveni
ITTT Rolando Ritzen - Hareket Kontrollü Atari Eldiveni

Raylı atıcılar için hareket kontrol cihazı da çok kullanışlı. De gimmick van dit projesi, het scheeten dahil olmak üzere tüm hareket kontrolüdür. (Je schiet kapı te "parmak bangen")

Adım 1: Het Malzeme

Gerçek materyal, en basitinden bir sanal gerçekliktir. 1x Arduino pro mikro Arduino Leonardo1x MPU6050 jiroskop

4x kabel

2. Adım: De Bekabeling

De Bekabeling
De Bekabeling

Ziet şemasındaki Zoals je, süper basitleştirmedir. MPU VCC > Arduino VCCMPU toprak > Arduino toprak MPU SCL > Pin 3MPU SDA > Pin 2

3. Adım: Kitaplıklar 1

Kitaplıklar 1
Kitaplıklar 1

Voor dit projesi heb je een paar özel kütüphaneleri nodig van deze bağlantısı:

een ZIP dosyasını "Klonla veya indir" knop rechts bovenaan aracılığıyla indirin.

4. Adım: Kitaplıklar 2

Kütüphaneler 2
Kütüphaneler 2

"Arduino" için Zip dosyasını açın. En uit deze Arduino map wil je de mapjes "I2Cdev" ve "MPU6050" pakken en in je Arduino kütüphaneleri zetten (Program Files > Arduino > library)

Adım 5: De Code

#Dahil etmek

#include #include #include #include

MPU6050 mpu;

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

int16_t accx, accy, accz; int vx, vy; şamandıra açısı;

// girişi yumuşatma kodu int readIndex = 0; const int numOkumalar = 20; int açıOkumaları[numOkumaları]; int toplam = 0; kayan ortalamaAçı = 0.0;

int eskiZ = 0;

int yeniZ = 0;

geçersiz kurulum() { Serial.begin(115200); Wire.begin(); fare.başla(); mpu.initialize(); if (!mpu.testConnection()) { while (1); }

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

boşluk döngüsü () {

toplam = toplam - açıOkumaları[readIndex];

açıOkumaları[readIndex] = açı; toplam = toplam + açıOkumalar[readIndex]; readIndex = readIndex + 1; if (readIndex >= numReadings) { readIndex = 0; }

if (gz > 30000) { Serial.println("Bang"); Fare tıklaması(); //Silahı geriye doğru sallayarak ateş edin (parmakla vurma) }

//accx, accy, accz;

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

eskiZ = yeniZ;

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

En iyi kodlar, en büyük ve en önemli kodlardır.

Wat er waarschijnlijk gaat gebeuren, je scherm gaat bewegen (van rechts naar linkleri, van boven naar onder of diagonaal) üzerinde dat je imleç uit zichzelf'tir. "gx + 1000" ve "gz - 200" içindeki Je moet de değerleri, bir anpassen totdat je het sonuç krijgt dat je wil en ik denk dat det de değerleri die wil nodig hebt afhankelijk zijn van je scherm çözünürlüğü. Ayrıca, "gx + x" ile bağlantılı olarak, zichzelf van rechts naar bağlantılarını da kullanabilirsiniz. Ayrıca, "gz - x" ile "gz - x" arasında geçiş yapabilirsiniz. Aynı zamanda çapraz olarak, şu ana kadarki tüm değerlerin şu an için geçerli olduğu da bir gerçek.

Serial.print("gx = ");

Seri.baskı(gx); Serial.print(" | gz = "); Seri.baskı(gz); Serial.print(" | gy = "); Seri.println(gy); if (gx > 32000) { Serial.println("Sağa Kaydır"); //Silahı sağa doğru sallarken yeniden yükle Keyboard.write('r'); gecikme(250); } Serial.print("accx = "); Seri.print(accx); Serial.print(" | accy = "); Serial.print(accy); Serial.print(" | accz = "); Seri.println(accz); //çalışıyor //açı = atan2((kayan) (ay - 16384), (kayan) (ax - 16384)) * (180.0 / PI) * -1; açı = atan2((kayan) ay, (kayan) ~ax) * (180.0 / PI); //float açısı = atan2((float) ay, (float) -ax) * (180.0 / PI); //Serial.println(ortalamaAçı); }

Önerilen: