Мазмуну:

ITTT Rolando Ritzen - Кыймылды башкаруу Аркада Колкабы: 5 кадам
ITTT Rolando Ritzen - Кыймылды башкаруу Аркада Колкабы: 5 кадам

Video: ITTT Rolando Ritzen - Кыймылды башкаруу Аркада Колкабы: 5 кадам

Video: ITTT Rolando Ritzen - Кыймылды башкаруу Аркада Колкабы: 5 кадам
Video: Virtual Wellness Class: Gentle Exercises While Laying Down 2024, Июль
Anonim
ITTT Rolando Ritzen - Motion Control Arcade Glove
ITTT Rolando Ritzen - Motion Control Arcade Glove

Кыймыл-аракетти көзөмөлдөөчү темир жолдо атуу менен алектенет. Кыймылдын жоктугунан бул долбоордун баары кыймылдын көзөмөлү, анын ичинде бул дагы жок. (Эшик "бармак кагылган")

1 -кадам: Het Materiaal

Кандай болбосун, бул эң жөнөкөй нерсе. 1x Arduino pro micro Arduino Leonardo1x MPU6050 гироскопу

4x kabels

2 -кадам: Де Бекабелинг

De Bekabeling
De Bekabeling

Zoals je het схемасында afbeelding ziet де бекабелинг супер жөнөкөй. MPU VCC> Arduino VCCMPU ground> Arduino groundMPU SCL> Pin 3MPU SDA> Pin 2

3 -кадам: Китепканалар 1

Китепканалар 1
Китепканалар 1

Добуш берүүчү колдонуучулардын китепканалары шилтемеде:

ZIP файлын "Clone or download" аркылуу жүктөп алыңыз.

4 -кадам: Китепканалар 2

Китепканалар 2
Китепканалар 2

Zip файлын ачуу үчүн "Arduino" баскычын чыкылдатыңыз. Arduino картасы "I2Cdev" жана "MPU6050" карталарын Arduino китепканаларына жайгаштырат (Программа файлдары> Arduino> китепканалары)

5 -кадам: Декод

#кошуу

#кошуу #кошуу #кошуу #кошуу

MPU6050 мпу;

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

int16_t accx, accy, accz; int vx, vy; сүзүү бурчу;

// readIndex inputint тегиздөө коду = 0; const int numReadings = 20; int angleReadings [numReadings]; int total = 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] = бурч; total = total + angleReadings [readIndex]; readIndex = readIndex + 1; if (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; Mouse.move (vx, vy); кечигүү (20);

Документти кароо коду жок кылынган жок.

Wat er waarschijnlijk gaat gebeuren is the cursor uit zichzelf over je scherm gaat bewegen (van rechts naar naar, diagonagona of van boven naar onder on diagonaal) жана бул коддун негизги коду болуп саналат. "Gx + 1000" жана "gz - 200" ичиндеги маанилердин мааниси жок болсо, анда бул баалуулуктар качан гана чечилет. Ал эми "cx + x" шилтемелери менен болгон байланыштын курсору сизди "gz - x" деп тааныйт. Дагы бир нерсеге ишенбегиле, бул жерде эң чоң мааниге ээ болот.

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 ((калкып жүрүү) (ай - 16384), (калкып чыгуу) (балта - 16384)) * (180.0 /PI) * -1; бурч = atan2 ((калкып жүрүүчү) ay, (float) ~ ax) * (180.0 / PI); // сүзүү бурчу = atan2 ((сүзүү) ай, (калкып чыгуу) -ax) * (180.0 /PI); //Serial.println(averageAngle); }

Сунушталууда: