Mündəricat:

ITTT Rolando Ritzen - Motion Control Arcade Əlcəyi: 5 addım
ITTT Rolando Ritzen - Motion Control Arcade Əlcəyi: 5 addım

Video: ITTT Rolando Ritzen - Motion Control Arcade Əlcəyi: 5 addım

Video: ITTT Rolando Ritzen - Motion Control Arcade Əlcəyi: 5 addım
Video: When players lose control 🥊😳 2024, Iyul
Anonim
ITTT Rolando Ritzen - Motion Control Arcade Əlcəyi
ITTT Rolando Ritzen - Motion Control Arcade Əlcəyi

Əl hərəkətləri ilə yanaşı, dəmir yolu atıcıları üçün də hərəkət nəzarətçisi. Hiyləgər bir layihə, bütün hərəkətlərin idarə edilməsidir, hər şeydən əvvəl. (Qapı "barmaq vurdu")

Addım 1: Het Materiaal

Məlumat çox sadədir. 1x Arduino Leonardo 1x Arduino pro micro1x MPU6050 giroskopu

4x kabels

Addım 2: De Bekabeling

De Bekabeling
De Bekabeling

Zoals çox böyük bir proqramdır. MPU VCC> Arduino VCCMPU torpaq> Arduino groundMPU SCL> Pin 3MPU SDA> Pin 2

Addım 3: Kitabxanalar 1

Kitabxanalar 1
Kitabxanalar 1

Xüsusi kitabxanalar üçün xüsusi bir layihə var:

ZIP faylını "Clone or download" düyməsinə basaraq yükləyin.

Addım 4: Kitabxanalar 2

Kitabxanalar 2
Kitabxanalar 2

"Arduino" proqramında Zip faylını açın. Arduino xəritəsi "I2Cdev" və "MPU6050" proqramlarını Arduino kitabxanalarında yerləşdirəcək (Proqram Faylları> Arduino> kitabxanaları)

Addım 5: Kod De

#daxil edin

#daxil edin #əlavə edin #daxil edin

MPU6050 mpu;

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

int16_t accx, accy, accz; int vx, vy; üzmək bucağı;

// readIndex girişini düzəltmək üçün kod = 0; const int numReadings = 20; int angleReadings [numReadings]; int cəmi = 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; }}

boşluq döngəsi () {

total = total - bucaqOxumları [readIndex];

angleReadings [readIndex] = bucaq; total = cəmi + bucaqOxumları [readIndex]; readIndex = readIndex + 1; if (readIndex> = numReadings) {readIndex = 0; }

if (gz> 30000) {Serial.println ("Bang"); Mouse.click (); // Silahı geriyə çəkərək vur (barmaq vurma)}

// accx, accy, accz;

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

oldZ = newZ;

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

Bunu etmək üçün heç bir kodu yoxlayın.

Wat er waarschijnlijk gaat gebeuren, bu düyməni sıx bir şəkildə bağlamaqdır (bağlantılar, bağlantılar, diaqonalın hər hansı bir hissəsi) və ya başqa bir məlumat daxil etmək üçün bu kodu istifadə edin. Qiymətlər "gx + 1000" və "gz - 200" düymələrindəki dəyərlər üçün ən yaxşı nəticələrdir və bu dəyərlər heç bir problemi həll etməyəcəkdir. Əlaqələr "gx + x" düymələri ilə sıx əlaqələndirilə bilər və "gz - x" düymələri də göstərilə bilər. Əlbətdə ki, bu dəyərlər bir -birindən çox fərqlidir.

Serial.print ("gx =");

Serial çapı (gx); Serial.print ("| gz ="); Serial çapı (gz); Serial.print ("| gy ="); Serial.println (gy); əgər (gx> 32000) {Serial.println ("Sağa Flick"); // Silahı sağa vuranda yenidən yükləyin Keyboard.write ('r'); gecikmə (250); } Serial.print ("accx ="); Serial. çap (accx); Serial.print ("| accy ="); Serial.çap (accy); Serial.print ("| accz ="); Serial.println (accz); // işləmə // bucaq = atan2 ((float) (ay - 16384), (float) (ax - 16384)) * (180.0 /PI) * -1; bucaq = atan2 ((float) ay, (float) ~ ax) * (180.0 / PI); // float açısı = atan2 ((float) ay, (float) -ax) * (180.0 /PI); //Serial.println(averageAngle); }

Tövsiyə: