תוכן עניינים:
- אספקה
- שלב 1: חיבור ה- RX והארדואינו
- שלב 2: קבלת כמה אותות PPM
- שלב 3: הגדרת המשדר
- שלב 4: הפעלת הג'ויסטיק
- שלב 5: קידוד הארדואינו
וִידֵאוֹ: ממיר ג'ויסטיק מבוסס Arduino (JETI) ל- USB ל- FSX: 5 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:13
החלטתי להחליף את משדר 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 והארדואינו
החיווט די פשוט. החלטתי להפעיל את הארדואינו רק מ- USB, מכיוון שהוא יחקה מכשיר ג'ויסטיק. זה יספק ל- Arduino 5V, שיכול לשמש גם להפעלת מקלט RC.
השתמשתי ב- Pin VCC, המספק פלט מוסדר, ובסיכת ה- Gnd הקרובה ביותר - פשוט חבר אותו למחבר + ו- - סיכות של ה- PPM. כאשר הארדואינו מופעל, גם המקלט מופעל.
לצורך אות ה- PPM, החלטתי להשתמש בהפרעות כדי לנתח אותן. יש הפרעות למשל בפין 3, אז פשוט חבר אותו לשם - אין "סיכת RC מקומית" על הארדואינו, אלא אולי דרכים רבות ושונות יותר לקרוא באות המקלט.
הייתי צריך לבטל את אזעקת המתח RX, מכיוון שמתח VCC עם אספקת USB יהיה בסביבות 4.5V בלבד - אך יציב למדי, כך שאין בעיה כלל.
שלב 2: קבלת כמה אותות 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 וההקצאה לצירים ולחצנים של הג'ויסטיק. החלטתי על המיפוי הבא:
הקצאת ערוץ / פונקציה / ג'ויסטיק:
- מצערת -> ציר המצערת
- ציר איילרון -> ציר X
- מעלית -> ציר Y
- הגה -> ציר סיבוב X
- דשים -> ציר סיבוב Y
- ציר בלם -> Z
- ציוד -> כפתור 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 יזהה את הארדואינו בדיוק כמו כל ג'ויסטיק אחר, אז פשוט הקצה את הכפתור והצירים ותהנה להמריא!
מה שאני מאוד אוהב בגישה הזו הוא שאתה יכול פשוט להשתמש במשדר שלך כמו בדגם אמיתי, למשל שימוש בשלבי טיסה וכו '.
מוּמלָץ:
ממיר Boost מבוסס Esp8266 עם ממשק Blynk מדהים עם וסת משוב: 6 שלבים
ממיר Boost מבוסס Esp8266 עם ממשק משתמש Blynk מדהים עם רגולטור משוב: בפרויקט זה אראה לך דרך יעילה ונפוצה כיצד להגביר את מתח DC. אני אראה לך כמה קל לבנות ממיר בוסט בעזרת Nodemcu. בואו לבנות אותו. הוא כולל גם מד מתח על המסך ומשוב
מד חום אינפרא אדום מבוסס Arduino - מד חום מבוסס IR באמצעות Arduino: 4 שלבים
מד חום אינפרא אדום מבוסס Arduino | מד חום מבוסס IR באמצעות Arduino: היי חברים במדריך זה נכין מדחום ללא מגע באמצעות arduino. מכיוון שלפעמים הטמפרטורה של הנוזל/מוצק גבוהה מדי או נמוכה ואז קשה ליצור איתו קשר ולקרוא אותו הטמפרטורה אז בתרחיש זה
חיישן תנועה מבוסס PIR מבוסס Arduino: 4 שלבים
חיישן תנועה מבוסס PIR מבוסס Arduino: בעזרת פרויקט זה, אתה יכול לשלוט על המצב הגבוה והרגישות של PIR
מחולל מוזיקה מבוסס מזג אוויר (מחולל מידי מבוסס ESP8266): 4 שלבים (עם תמונות)
מחולל מוזיקה מבוסס מזג אוויר (מחולל מידי מבוסס ESP8266): היי, היום אסביר כיצד להכין מחולל מוזיקה קטן מבוסס מזג אוויר. ועוצמת אור. אל תצפה שהוא ייצור שירים שלמים או יתפתח אקורד
משחק משחק ציפור פלאפפי עם לוח פיתוח מבוסס M5stack Esp32 מבוסס M5stick C: 5 שלבים
משחק משחק Flappy Bird עם לוח פיתוח מבוסס M5stack Esp32 מבוסס M5stick C: היי חברים היום נלמד כיצד להעלות את קוד משחק הציפורים ללוח הפיתוח של m5stick c המסופק על ידי m5stack. לפרויקט קטן זה תזדקקו לשני דברים הבאים: m5stick-c לוח פיתוח: https://www.utsource.net/itm/p/8663561.h