Բովանդակություն:

ITTT Rolando Ritzen - Motion Control Arcade ձեռնոց ՝ 5 քայլ
ITTT Rolando Ritzen - Motion Control Arcade ձեռնոց ՝ 5 քայլ

Video: ITTT Rolando Ritzen - Motion Control Arcade ձեռնոց ՝ 5 քայլ

Video: ITTT Rolando Ritzen - Motion Control Arcade ձեռնոց ՝ 5 քայլ
Video: GOALKEEPERS HATE THIS 🧤😂 #shorts 2024, Նոյեմբեր
Anonim
ITTT Rolando Ritzen - Motion Control Arcade ձեռնոց
ITTT Rolando Ritzen - Motion Control Arcade ձեռնոց

Ձեռքի երեխաները կարող են շարժման վերահսկիչ օգտագործել երկաթուղային հրաձիգների համար: Այս հնարքի նախագիծն այն է, որ բոլոր շարժումների վերահսկումը, ներառյալ, ուսումնասիրվում է: (Je schiet դուռը «մատի բենգեն»)

Քայլ 1: Het Materiaal

Het materiaal dat je gaat nodig hebben is vrij simpel. 1x Arduino pro micro Arduino Leonardo 1x MPU6050 գիրոսկոպ

4x կաբել

Քայլ 2. Դե Բեկաբելինգ

Դե Բեկաբելինգ
Դե Բեկաբելինգ

Zoals je in het schema in de febeelding ziet is de beakabeling super simpel. MPU VCC> Arduino VCCMPU հիմք> Arduino հիմք MPU SCL> Pin 3MPU SDA> Pin 2

Քայլ 3: Գրադարաններ 1

Գրադարաններ 1
Գրադարաններ 1

Հարկ է նշել, որ հատուկ գրադարանները կարող են ծանոթանալ այս հղմանը ՝

Ներբեռնեք ZIP ֆայլը «Clone or download» knop rechts bovenaan- ի միջոցով:

Քայլ 4: Գրադարաններ 2

Գրադարաններ 2
Գրադարաններ 2

Բացեք de Zip ֆայլը և կտտացրեք «Arduino» քարտեզին: Արդուինոյի քարտեզը կարող է լինել «I2Cdev» և «MPU6050» քարտեզների հավաքածուն Arduino գրադարաններում (Fiրագրի ֆայլեր> Arduino> գրադարաններ)

Քայլ 5: De Code

#ներառում

#ներառել #ներառել #ներառել #ներառել

MPU6050 մպ;

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

int16_t accx, accy, accz; int vx, vy; լողացող անկյուն;

// մուտքագրման համար readIndex- ի հարթեցման ծածկագիր = 0; const int numReadings = 20; int angleReadings [numReadings]; int ընդհանուր = 0; բոց միջինAngle = 0.0;

int oldZ = 0;

int newZ = 0;

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

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

դատարկ շրջան () {

ընդհանուր = ընդհանուր - angleReadings [readIndex];

angleReadings [readIndex] = անկյուն; ընդհանուր = ընդհանուր + angleReadings [readIndex]; readIndex = readIndex + 1; եթե (readIndex> = numReadings) {readIndex = 0; }

if (gz> 30000) {Serial.println ("Bang"); Mouse.click (); // Կրակել ՝ հրացանը հետ շուռ տալով (մատը ծեծելով)}

// accx, accy, accz;

mpu.getMotion6 (& ax, & ay, & az, & gx, & gy, & gz); mpu.getAcceleration (& accx, & accy, & accz); //Serial.println(gy); // Serial.println (անկյուն);

oldZ = newZ;

vx = (gx + 1000) / 150; vy = - (gz - 200) / 150; Մկնիկ. Շարժվել (vx, vy); ուշացում (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. Արժեքները կարող են լինել «gx + 1000» - ում և «gz - 200» - ում, քանի որ դրանք կարող են հանգեցնել դրանց արժեքների մահվան, եթե դրանք չլինեն որոշ չափով: 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 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 ="); Serial.print (gz); Serial.print ("| gy ="); Serial.println (gy); if (gx> 32000) {Serial.println ("Շարժվել աջ"); // Վերաբեռնել ատրճանակը աջ թեքելիս Keyboard.write ('r'); ուշացում (250); } Serial.print ("accx ="); Serial.print (accx); Serial.print ("| accy ="); Serial.print (accy); Serial.print ("| accz ="); Serial.println (accz); // աշխատանքային // անկյուն = atan2 ((float) (ay - 16384), (float) (ax - 16384)) * (180.0 /PI) * -1; անկյուն = atan2 ((float) ay, (float) ~ ax) * (180.0 / PI); // float angle = atan2 ((float) ay, (float) -ax) * (180.0 /PI); //Serial.println(averageAngle); }

Խորհուրդ ենք տալիս: