Sadržaj:

ITTT Rolando Ritzen - Arkadne rukavice za kontrolu kretanja: 5 koraka
ITTT Rolando Ritzen - Arkadne rukavice za kontrolu kretanja: 5 koraka
Anonim
ITTT Rolando Ritzen - Arkadne rukavice za kontrolu kretanja
ITTT Rolando Ritzen - Arkadne rukavice za kontrolu kretanja

Ručno je moguće upravljati pokretom ili upravljačima pokreta za šinare na šini. Ovaj gimmick van dit projekt je dat alles kontrola kretanja, uključujući i het schieten. (Je li tiho vrata su "prsta udarila")

Korak 1: Het Materiaal

Het materialal dat je gaat nodig hebben is vrij simpel. 1x Arduino pro micro žiroskopa Arduino Leonardo1x MPU6050

4x kablovi

Korak 2: De Bekabeling

De Bekabeling
De Bekabeling

Zlato je u shemi u prilogu zet je super jednostavna. MPU VCC> Arduino VCCMPU uzemljenje> Arduino uzemljenjeMPU SCL> Pin 3MPU SDA> Pin 2

Korak 3: Biblioteke 1

Biblioteke 1
Biblioteke 1

Za projekt heb je een paar prilagođene biblioteke krenite na link:

Preuzmite ZIP datoteku putem opcije "Kloniraj ili preuzmi".

Korak 4: Biblioteke 2

Biblioteke 2
Biblioteke 2

Otvorite Zip datoteku i kliknite na karti "Arduino". Na Arduino karti će se nalaziti "I2Cdev" i "MPU6050" pakiranje i arhiviranje Arduino biblioteka (Programske datoteke> Arduino> biblioteke)

Korak 5: De Code

#include

#include #include #include #include

MPU6050 mpu;

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

int16_t accx, accy, accz; int vx, vy; kut plovka;

// kôd za izglađivanje inputint readIndex = 0; const int numReadings = 20; int angleReadings [numReadings]; int ukupno = 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 () {{100} {101}

total = total - angleReadings [readIndex];

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

if (gz> 30000) {Serial.println ("Bang"); Mouse.click (); // Pucajte okretanjem pištolja unatrag (udaranje prstom)}

// accx, accy, accz;

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

oldZ = newZ;

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

Ovaj kôd je postavljen tako da je beetje uitleg nodig omdat je het waarschijnlijk i klein beetje moet aanpassen.

Što je to što gaat gebeuren je da je kursor na zichzelf -u iznad je scherm gaat bewegen (van rechts naar links, van boven naar onder of diagonaal) en dit stukje code zorgt er voor dat je curor stil blijft staan als heen input geeft. Vrijednosti su navedene u "gx + 1000" i "gz - 200" aanpassen totdat je het rezultat koji je rezultirao da će wen en ik denk dati vrijednosti vrijednosti koje će potvrditi da je postignuta dobra vrijednost. Ako je kursor u zichzelf rechts naar linkovi će biti "gx + x" aanpassen. Als kursor u zichzelf van boven naar beweregd će biti "gz - x" aan passen. Alt 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 ="); Serijski.print (gz); Serial.print ("| gy ="); Serial.println (gy); if (gx> 32000) {Serial.println ("Listajte desno"); // Ponovno učitavanje pri prebacivanju pištolja udesno Keyboard.write ('r'); kašnjenje (250); } Serial.print ("accx ="); Serial.print (accx); Serial.print ("| accy ="); Serial.print (accy); Serial.print ("| accz ="); Serial.println (accz); // radi // kut = atan2 ((float) (ay - 16384), (float) (ax - 16384)) * (180.0 /PI) * -1; kut = atan2 ((plovak) ay, (plovak) ~ sjekira) * (180,0 / PI); // kut plutanja = atan2 ((float) ay, (float) -ax) * (180.0 /PI); //Serial.println(averageAngle); }

Preporučuje se: