Innehållsförteckning:

ITTT Rolando Ritzen - Motion Control Arcade Handske: 5 steg
ITTT Rolando Ritzen - Motion Control Arcade Handske: 5 steg

Video: ITTT Rolando Ritzen - Motion Control Arcade Handske: 5 steg

Video: ITTT Rolando Ritzen - Motion Control Arcade Handske: 5 steg
Video: Часть 1 — Аудиокнига Эдит Уортон «Дом веселья» (Книга 1 — главы 01–05) 2024, November
Anonim
ITTT Rolando Ritzen - Motion Control Arcade Handske
ITTT Rolando Ritzen - Motion Control Arcade Handske

En handschoen die kan användas som rörelsekontroll för skyttar på järnväg. De gimmick van dit project is that alles motion control is, including it schieten. (Je schiet door te "finger bangen")

Steg 1: Material

Det material som du behöver är mycket enkelt. 1x Arduino pro micro från Arduino Leonardo1x MPU6050 gyroskop

4x kabels

Steg 2: De Bekabeling

De Bekabeling
De Bekabeling

Zoals är ett schema i en bild som ser fantastiskt enkelt ut. MPU VCC> Arduino VCCMPU jord> Arduino jord MPU SCL> Pin 3MPU SDA> Pin 2

Steg 3: Bibliotek 1

Bibliotek 1
Bibliotek 1

För detta projekt behöver du några anpassade bibliotek från denna länk:

Ladda ner en ZIP -fil med knappen "Klona eller ladda ner".

Steg 4: Bibliotek 2

Bibliotek 2
Bibliotek 2

Öppna zip -filen och klicka på "Arduino". En från denna Arduino -karta kommer att visa "I2Cdev" och "MPU6050" -paketet i dina Arduino -bibliotek (programfiler> Arduino> bibliotek)

Steg 5: Avkodning

#omfatta

#include #include #include #include

MPU6050 mpu;

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

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

// kod för utjämning av inputint readIndex = 0; const int numReadings = 20; int angleReadings [numReadings]; int totalt = 0; float averageAngle = 0,0;

int oldZ = 0;

int newZ = 0;

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

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

void loop () {

total = total - angleReadings [readIndex];

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

if (gz> 30000) {Serial.println ("Bang"); Mus.klick (); // Skjut genom att knacka pistolen bakåt (finger slår)}

// accx, accy, accz;

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

oldZ = newZ;

vx = (gx + 1000) / 150; vy = - (gz - 200) / 150; Mouse.move (vx, vy); fördröjning (20);

Denna kodkod har lite nödvändigt eftersom du troligen behöver en liten bit.

Vad är sannolikt att händelserna är att din markör kan komma över sig själv på skärmen kommer att bli (från rätt till länkar, ovanför till diagonalen) och den här kodkoden är säker på att din curor fortfarande kan stå som ingen inmatning ger. Du måste göra värdena i "gx + 1000" och "gz - 200" när du får resultatet att du vill att jag vill att värdena måste behöva vara beroende av vilken skärmupplösning du har. Om markören kommer från sig själv till rätten för länkar som du vill "gx + x" vid passagerare. Även om det är diagonalt påstått, kan du välja mellan två värden om du kan passera för att du bara kan överväga en som påstått och att du har andra.

Serial.print ("gx =");

Serial.print (gx); Serial.print ("| gz ="); Serial.print (gz); Serial.print ("| gy ="); Serial.println (gy); if (gx> 32000) {Serial.println ("Snick höger"); // Ladda om när du trycker på pistolen till höger Keyboard.write ('r'); fördröjning (250); } Serial.print ("accx ="); Serial.print (accx); Serial.print ("| accy ="); Serial.print (accy); Serial.print ("| accz ="); Serial.println (accz); // arbetar // vinkel = atan2 ((float) (ay - 16384), (float) (ax - 16384)) * (180,0 /PI) * -1; vinkel = atan2 ((float) ay, (float) ~ ax) * (180,0 / PI); // flottörvinkel = atan2 ((float) ay, (float) -ax) * (180,0 /PI); //Serial.println(averageAngle); }

Rekommenderad: