Sisukord:

ITTT Rolando Ritzen - liikumiskontrolli arkaadkinnas: 5 sammu
ITTT Rolando Ritzen - liikumiskontrolli arkaadkinnas: 5 sammu

Video: ITTT Rolando Ritzen - liikumiskontrolli arkaadkinnas: 5 sammu

Video: ITTT Rolando Ritzen - liikumiskontrolli arkaadkinnas: 5 sammu
Video: Защитишь $500,000, Получишь Их! 2024, Juuli
Anonim
ITTT Rolando Ritzen - liikumiskontrolli kaarikinnas
ITTT Rolando Ritzen - liikumiskontrolli kaarikinnas

Een handschoen die je kan gebruiken als motion controller voor on-rail shooters. De gimmick van dit project is dat alles motion control is, inclusief het schieten. (Je schiet uks "sõrme bangen")

1. samm: Het Materiaal

Het materiaal dat je gaat nodig hebben is vrij simpel. 1x Arduino pro mikro Arduino Leonardo 1x MPU6050 güroskoop

4x kabeleid

2. samm: De Bekabeling

De Bekabeling
De Bekabeling

Zoals je in het schema in de afbeelding ziet is de bekabeling super simpel. MPU VCC> Arduino VCCMPU maa> Arduino maa MPU SCL> Pin 3MPU SDA> Pin 2

Samm: raamatukogud 1

Raamatukogud 1
Raamatukogud 1

Voor dit project heb je een paar custom custom libraries nodig van deze link:

Laadige een ZIP -fail alla "Kloonige või laadige alla" knop rechts bovenaan.

4. samm: raamatukogud 2

Raamatukogud 2
Raamatukogud 2

Avage ZIP -fail ja klõpsake kaardil "Arduino". Arduino kaardi kuvamine kaardil "I2Cdev" ja "MPU6050" pakkumine en Arduino raamatukogude zetten (Program Files> Arduino> teegid)

Samm 5: de kood

#kaasake

#kaasamine #kaasamine #kaasamine #kaasamine

MPU6050 mpu;

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

int16_t accx, accy, accz; int vx, vy; ujuki nurk;

// kood silumiseks inputint readIndex = 0; const int numReadings = 20; int angleReadings [numReadings]; int kokku = 0; ujuki keskmineNurk = 0,0;

int oldZ = 0;

int newZ = 0;

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

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

void loop () {

kokku = kokku - nurkReadings [readIndex];

angleReadings [readIndex] = nurk; kokku = kokku + nurkReadings [readIndex]; readIndex = readIndex + 1; if (readIndex> = numReadings) {readIndex = 0; }

if (gz> 30000) {Serial.println ("Bang"); Hiir.klõps (); // Tulistage relva tahapoole nipsutades (sõrmedega paugutades)}

// accx, accy, accz;

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

vanaZ = uusZ;

vx = (gx + 1000) / 150; vy = - (gz - 200) / 150; Hiir.move (vx, vy); viivitus (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 diagonaal) en dit stukje code zorgt er voor dat je curor stil blijft staan als je geen input geeft. Je moet de values 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 links beweegd wil je "gx + x" aanpassen. Als de cursor uit zichzelf van boven naar onder beweegd wil je de "gz - x" aannee. Als het diagonaal beweegd, dan kies je een van de twee values om aan te passi totdat hij nog maar over een as beweegd en dan pas je de andere aan.

Seeria.print ("gx =");

Serial.print (gx); Seeria.print ("| gz ="); Serial.print (gz); Seeria.print ("| gy ="); Seeria.println (gy); if (gx> 32000) {Serial.println ("Nipsake paremale"); // Laadige uuesti, kui püstolit paremale klõpsate. Klaviatuur.write ('r'); viivitus (250); } Serial.print ("accx ="); Serial.print (accx); Serial.print ("| accy ="); Serial.print (accy); Seeria.print ("| accz ="); Serial.println (accz); // töötav // nurk = atan2 ((ujuk) (ay - 16384), (ujuk) (kirves - 16384)) * (180,0 /PI) * -1; nurk = atan2 ((ujuk) ay, (ujuk) ~ kirves) * (180,0 / PI); // ujuknurk = atan2 ((ujuk) ay, (ujuk) -ax) * (180,0 /PI); //Seriaalne.println (keskmiseltAngle); }

Soovitan: