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

ממיר ג'ויסטיק מבוסס Arduino (JETI) ל- USB ל- FSX: 5 שלבים
ממיר ג'ויסטיק מבוסס Arduino (JETI) ל- USB ל- FSX: 5 שלבים

וִידֵאוֹ: ממיר ג'ויסטיק מבוסס Arduino (JETI) ל- USB ל- FSX: 5 שלבים

וִידֵאוֹ: ממיר ג'ויסטיק מבוסס Arduino (JETI) ל- USB ל- FSX: 5 שלבים
וִידֵאוֹ: מערכת ממשקים למשחקים שונים 2024, נוֹבֶמבֶּר
Anonim
ממיר ג'ויסטיק מבוסס Arduino (JETI) ל- USB ל- FSX
ממיר ג'ויסטיק מבוסס Arduino (JETI) ל- USB ל- FSX
ממיר ג'ויסטיק מבוסס Arduino (JETI) ל- USB ל- FSX
ממיר ג'ויסטיק מבוסס Arduino (JETI) ל- USB ל- FSX

החלטתי להחליף את משדר JETI DC-16 שלי ממצב 2 למצב 1, שבעצם מחליף את המצערת והמעלית משמאל לימין ולהיפך. מכיוון שלא רציתי לקרוס את אחד הדגמים שלי בגלל בלבול שמאל/ימין במוח, תהיתי אם אפשר להתאמן קצת ב- FSX.

קראתי ובדקתי את משדרי JETI תומכים למעשה במצב ג'ויסטיק מחוץ לקופסה, אולם רציתי גמישות מלאה לצירויות והמתגים ולהשתמש ב- TX כמו בדגם אמיתי. באמצעות פלט המקלט, ניתן גם למנף את עיבוד האותות ב- DC-16 ולהשתמש במערבלים, שלבי טיסה, תעריפים כפולים, כל מה שתוכל לתכנת שם.

לאחרונה מצאתי הדרכה נחמדה כיצד להכין מכשיר כניסת USB HID, כלומר ג'ויסטיק, מתוך Arduino זול כמו Pro Micro:

www.instructables.com/id/Create-a-Joystick…

זה יאפשר את כל הדרוש לשליטה על מטוס / מסוק / מה שב FSX! ניתן להשיג שפע של צירים ולחצנים.

מכיוון שהיה לי כרגע JETI RSAT2 פנוי, החלטתי לחבר אותו ל- Arduino ולנסות ליישם מנתח PPM קטן יחד עם ספריית הג'ויסטיק.

אני מניח שמישהו שעומד אחר השלבים האלה מכיר חיבור ותכנות של Arduino. לא אקח אחריות על תקלות או נזקים!

אספקה

אתה תצטרך…

  • בכל Arduino הנתמך על ידי ספריית הג'ויסטיק, השתמשתי ב- Sparkfun Pro Micro 5V / 16 MHz
  • גרסה עדכנית של ה- Arduino IDE
  • כל מקלט RC שמוציא אות PPM, כמו JETI RSAT2
  • כמה חוטי מגשר (מינימום 3)
  • ספריית הג'ויסטיק המותקנת ב- Arduino IDE
  • ספריית arduino-timer:

שלב 1: חיבור ה- RX והארדואינו

חבר את ה- RX והארדואינו
חבר את ה- RX והארדואינו
חבר את ה- RX והארדואינו
חבר את ה- RX והארדואינו

החיווט די פשוט. החלטתי להפעיל את הארדואינו רק מ- USB, מכיוון שהוא יחקה מכשיר ג'ויסטיק. זה יספק ל- Arduino 5V, שיכול לשמש גם להפעלת מקלט RC.

השתמשתי ב- Pin VCC, המספק פלט מוסדר, ובסיכת ה- Gnd הקרובה ביותר - פשוט חבר אותו למחבר + ו- - סיכות של ה- PPM. כאשר הארדואינו מופעל, גם המקלט מופעל.

לצורך אות ה- PPM, החלטתי להשתמש בהפרעות כדי לנתח אותן. יש הפרעות למשל בפין 3, אז פשוט חבר אותו לשם - אין "סיכת RC מקומית" על הארדואינו, אלא אולי דרכים רבות ושונות יותר לקרוא באות המקלט.

הייתי צריך לבטל את אזעקת המתח RX, מכיוון שמתח VCC עם אספקת USB יהיה בסביבות 4.5V בלבד - אך יציב למדי, כך שאין בעיה כלל.

שלב 2: קבלת כמה אותות PPM

קבלת כמה אותות PPM
קבלת כמה אותות PPM
קבלת כמה אותות PPM
קבלת כמה אותות PPM

כאשר המקלט וה- TX מופעל, קיבלתי אותות PPM כמו שמוצגים בתמונה. 16 ערוצים, חוזרים על עצמם לנצח. אם Failsafe ב- RSAT מושבת והמשדר כבוי, פלט ה- PPM יושבת.

מידע נוסף על PPM זמין כאן:

  • https://en.wikipedia.org/wiki/Pulse-position_modul…
  • https://wiki.rc-network.de/index.php/PPM

מכיוון שאני לא מטיס דברים אמיתיים במקרה זה, לא היה לי אכפת מהזמנים התיאורטיים ורק הבנתי באוסילוסקופ מה המקלט שלי מוציא באופן חריף בעת העברת המקלות משמאל לימין לגמרי (הגדרות סטנדרטיות ב- TX). נראה כי -100% תואם לפולסים באורך של 600µs, ו +100% ל- 1600µs. לא אכפת לי גם מהאורך של פעימות ההשהיה (400µs) בקוד הארדואינו שלי, אבל הנחתי מרווח מסגרות של דקות. 3000µs.

שלב 3: הגדרת המשדר

הגדרת המשדר
הגדרת המשדר
הגדרת המשדר
הגדרת המשדר
הגדרת המשדר
הגדרת המשדר

מכיוון שצריך לדעת רק את המיקום בפועל של משטחי הבקרה, מספיק ערוץ אחד / "סרוו" לכל פונקציית RC. כתוצאה מכך, ניתן לבצע התקנת משדרים פשוטה למדי - בדומה לדגם RC רגיל. הפונקציות העיקריות aileron, מעלית, הגה ומצערת כל אחת דורשת רק ערוץ משדר אחד בהתאמה. הוספתי גם דשים, בלמים וציוד והשארתי 9 ערוצים פנויים עד כה. שימו לב כי הדפים הוכנסו לשלב טיסה, ואינם נשלטים ישירות באמצעות מקל, מחוון או כפתור.

שלב 4: הפעלת הג'ויסטיק

הפעלת הג'ויסטיק
הפעלת הג'ויסטיק
הפעלת הג'ויסטיק
הפעלת הג'ויסטיק

ספריית הג'ויסטיק קלה למדי לשימוש, ומספקת דוגמאות ובדיקות. זה אמור להיות מועיל לבדוק תחילה אם הארדואינו מזוהה כג'ויסטיק תקין, ההנחיות המקושרות בחלק הכניסה והספרייה עצמה מספקות הדרכה טובה.

בלוח הבקרה התקנים ומדפסות, ה- Arduino הופיע כ- "Sparkfun Pro Micro", וחלון בדיקת הג'ויסטיק הראה 7 צירים והרבה כפתורים נתמכים. ניתן להשתמש אפילו במתג כובע כאשר הוא מתוכנת בארדואינו.

שלב 5: קידוד הארדואינו

קידוד הארדואינו
קידוד הארדואינו
קידוד הארדואינו
קידוד הארדואינו

מה שעדיין חסר הוא הניתוח האמיתי של אות ה- PPM וההקצאה לצירים ולחצנים של הג'ויסטיק. החלטתי על המיפוי הבא:

הקצאת ערוץ / פונקציה / ג'ויסטיק:

  1. מצערת -> ציר המצערת
  2. ציר איילרון -> ציר X
  3. מעלית -> ציר Y
  4. הגה -> ציר סיבוב X
  5. דשים -> ציר סיבוב Y
  6. ציר בלם -> Z
  7. ציוד -> כפתור 0

כאשר ההילוך למטה, יש ללחוץ על הכפתור הראשון של הג'ויסטיק והוא ישוחרר בעת הגבהת ההילוך. עם זאת, הדבר ידרוש FSUIPC עבור FSX, מחוץ לקופסה, FSX תקבל רק כפתור להחלפת ההילוכים, וזה לא בדיוק מה שקורה עם הדגמים שלי.

סיפקתי לגירסה הנוכחית של הקוד הרבה הערות, שעובדות לי די טוב - אתה מוזמן לשנות את ההקצאה שלך או להוסיף פונקציות חדשות. כרגע אין שימוש ב- 9 ערוצי RC האחרונים.

לצורך ההתקנה, צריך לאתחל את מחלקת הג'ויסטיק, בעצם על ידי הגדרת טווחי הציר המספרי:

/ * הגדר טווח צירים (מוגדר בכותרת, 0 - 1000) */

Joystick.setXAxisRange (CHANNEL_MIN, CHANNEL_MAX); Joystick.setYAxisRange (CHANNEL_MIN, CHANNEL_MAX); …

על ידי שימוש בערכים מ 0 עד 1000, ניתן למפות ישירות את אורך הדופק (600 - 1600µs) לערכי הג'ויסטיק מבלי לשנות את הגודל מחדש.

ה- DIN 3 מאתחל כקלט דיגיטלי, מופעל באמצעות Pullups ומצורף להפסקה:

pinMode (PPM_PIN, INPUT_PULLUP);

attachInterrupt (digitalPinToInterrupt (PPM_PIN), PPM_Pin_Changed, CHANGE);

לצורכי איתור באגים הוספתי כמה תדפיסים דרך הממשק הסידורי במרווחי זמן קבועים, תוך שימוש בספריית arduino-timer:

אם (SERIAL_PRINT_INTERVAL> 0) {

scheduler.every (SERIAL_PRINT_INTERVAL, (void*) -> bool {SerialPrintChannels (); החזר נכון;}); }

ההפרעה של הסיכה תקרא בכל פעם שהערך הלוגי של הסיכה השתנה, כך לכל קצה באות ה- PPM. העריכו את אורך הדופק רק על ידי תזמון פשוט באמצעות מיקרו ():

uint32_t curTime = micros ();

uint32_t pulseLength = curTime - edgeTime; uint8_t curState = digitalRead (PPM_PIN);

על ידי הערכת מצב הסיכה הנוכחית ושילובו עם אורך הדופק והפעימות הקודמות, ניתן לסווג את הפולסים החדשים. התנאי הבא יזהה את פער המסגרת:

if (lastState == 0 && pulseLength> 3000 && pulseLength <6000)

בפולסים הבאים, אורך הדופק ימופה למצב ציר על ידי חיתוך והטיית אורך הדופק כך שיתאים לטווח ציר הג'ויסטיק:

uint16_t rxLength = pulseLength;

rxLength = (rxLength> 1600)? 1600: rxLength; rxLength = (rxLength <600)? 600: rxLength; rxChannels [curChannel] = rxLength - 600;

מערך rxChannels מכיל בסופו של דבר 16 ערכים מ- 0 - 1000, המציינים מיקומי מקל / מחוון וכפתורים.

לאחר קבלת 16 ערוצים, המיפוי לג'ויסטיק מתבצע:

/ * צירים */

Joystick.setThrottle (ערוצים [0]); Joystick.setXAxis (ערוצים [1]); Joystick.setYAxis (1000 - ערוצים [2]); Joystick.setRxAxis (ערוצים [3]); Joystick.setRyAxis (ערוצים [4]); Joystick.setZAxis (1000 - ערוצים [5]); / * כפתורים */ Joystick.setButton (0, (ערוצים [6] <500? 1: 0)); / * עדכן נתונים באמצעות USB */ Joystick.sendState ();

הפכתי כמה צירים בקוד, וזה לא הכרחי, שכן ניתן להפוך את הציר גם על ידי הפניית כיוון סרוו או הקצאה ב- FSX. עם זאת, החלטתי לשמור על כיווני הסרוו וגם על הקצאת ה- FSX המקורית.

הכפתור מופעל או כבוי על ידי ערוץ 7.

ואל תשכח לסמן את מתזמן … אחרת לא יופיעו הדפסי ניפוי באגים.

לולאת חלל () {

scheduler.tick (); }

בצילום המסך שצירפתי אתה יכול לראות, ערוץ 1 הועבר מ -1000 (מצערת מלאה) ל- 0 (סרק).

FSX יזהה את הארדואינו בדיוק כמו כל ג'ויסטיק אחר, אז פשוט הקצה את הכפתור והצירים ותהנה להמריא!

מה שאני מאוד אוהב בגישה הזו הוא שאתה יכול פשוט להשתמש במשדר שלך כמו בדגם אמיתי, למשל שימוש בשלבי טיסה וכו '.

מוּמלָץ: