תוכן עניינים:

ITTT Rolando Ritzen - כפפת ארקייד לבקרת תנועה: 5 שלבים
ITTT Rolando Ritzen - כפפת ארקייד לבקרת תנועה: 5 שלבים

וִידֵאוֹ: ITTT Rolando Ritzen - כפפת ארקייד לבקרת תנועה: 5 שלבים

וִידֵאוֹ: ITTT Rolando Ritzen - כפפת ארקייד לבקרת תנועה: 5 שלבים
וִידֵאוֹ: Защитишь $500,000, Получишь Их! 2024, יולי
Anonim
ITTT Rolando Ritzen - כפפת ארקייד לבקרת תנועה
ITTT Rolando Ritzen - כפפת ארקייד לבקרת תנועה

אחד מהשיטות שאתה יכול להשתמש בו כבקרי תנועה עבור יורים על הרכבת. הפרויקט של גימיק הוא שכל בקרת התנועה היא, כולל הצעות. (Je schiet door te "finger bangen")

שלב 1: חומר

החומר כי אתה צריך להיות פשוט מאוד. 1x Arduino pro micro של ג'ירוסקופ Arduino Leonardo1x MPU6050

4x כבלים

שלב 2: De Bekabeling

דה בקבל
דה בקבל

Zoals יש את הסכימה בתמונה המראה היא פשוטה במיוחד. MPU VCC> Arduino VCCMPU הקרקע> Arduino groundMPU SCL> פין 3MPU SDA> פין 2

שלב 3: ספריות 1

ספריות 1
ספריות 1

בשביל הפרויקט הזה אתה צריך כמה ספריות מותאמות אישית מהקישור הזה:

הורד קובץ ZIP באמצעות הלחצן "שיבוט או הורדה" למעלה.

שלב 4: ספריות 2

ספריות 2
ספריות 2

פתח את קובץ ה- Zip ולחץ על המפה "Arduino". אם תצא ממפה זו של ארדואינו תוכל למנות את "I2Cdev" ו- "MPU6050" בחבילות הספרייות של ארדואינו (קבצי תוכנה> ארדואינו> ספריות)

שלב 5: דה קוד

#לִכלוֹל

#include #include #include #include

MPU6050 mpu;

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

int16_t accx, accy, accz; int vx, vy; זווית צף;

// קוד להחלקת inputint readIndex = 0; const int numReadings = 20; int angleReadings [numReadings]; int סה"כ = 0; float averageAngle = 0.0;

int oldZ = 0;

int newZ = 0;

הגדרת חלל () {Serial.begin (115200); Wire.begin (); Mouse.begin (); mpu.initialize (); if (! mpu.testConnection ()) {while (1); }

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

לולאת חלל () {

total = total - angleReadings [readIndex];

angleReadings [readIndex] = זווית; total = total + angleReadings [readIndex]; readIndex = readIndex + 1; if (readIndex> = numReadings) {readIndex = 0; }

if (gz> 30000) {Serial.println ("באנג"); לחיצת עכבר(); // יורים על ידי הפניית האקדח לאחור (חבטה באצבע)}

// 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);

קוד זה צריך קצת צורך כיוון שככל הנראה יש צורך בקצת קטנות.

מה הסיכוי שהתרחשו הוא כי הסמן שלך יכול להיעלם על פני המסך שלך יכול להיווצר (דרך קישורים, מעל למעבר לאלכסון) וקוד קוד זה ייעשה אם אתה עדיין לא יכול לתת כל קלט. אתה צריך את הערכים ב "gx + 1000" en "gz - 200" בזמן שההתוצאה שלך תקבל את זה ואתה רוצה שהערכים יצטרכו להיות תלויים בבעיה שלך. אם הסמן יכול להסתמך על קישורים לאתר "gx + 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 ((float) (ay - 16384), (float) (ax - 16384)) * (180.0 /PI) * -1; זווית = atan2 ((לצוף) ay, (לצוף) ~ ax) * (180.0 / PI); // זווית צף = atan2 ((לצוף) ay, (float) -ax) * (180.0 /PI); //Serial.println(averageAngle); }

מוּמלָץ: