جدول المحتويات:

Arduino Based (JETI) PPM to USB Joystick Converter for FSX: 5 خطوات
Arduino Based (JETI) PPM to USB Joystick Converter for FSX: 5 خطوات

فيديو: Arduino Based (JETI) PPM to USB Joystick Converter for FSX: 5 خطوات

فيديو: Arduino Based (JETI) PPM to USB Joystick Converter for FSX: 5 خطوات
فيديو: rc - how to connect and prepare wireless simulator usb dongle 2024, يوليو
Anonim
Arduino Based (JETI) PPM to USB Joystick Converter for FSX
Arduino Based (JETI) PPM to USB Joystick Converter for FSX
Arduino Based (JETI) PPM to USB Joystick Converter for FSX
Arduino Based (JETI) PPM to USB Joystick Converter for 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 صغير جنبًا إلى جنب مع مكتبة Joystick.

أفترض أن أي شخص يتبع هذه الخطوات على دراية بتوصيل Arduino وبرمجته. لن آخذ أي ضمانات عن الأعطال أو الأضرار!

اللوازم

سوف تحتاج…

  • أي Arduino مدعوم من مكتبة جويستيك ، استخدمت Sparkfun Pro Micro 5V / 16 MHz
  • نسخة حديثة من Arduino IDE
  • أي جهاز استقبال RC يخرج إشارة PPM ، مثل JETI RSAT2
  • عدد قليل من أسلاك العبور (الحد الأدنى 3)
  • مكتبة جويستيك المثبتة في Arduino IDE
  • مكتبة arduino-timer:

الخطوة 1: اربط RX و Arduino

قم بربط RX و Arduino
قم بربط RX و Arduino
قم بربط RX و Arduino
قم بربط RX و Arduino

الأسلاك بسيطة إلى حد كبير. قررت تشغيل Arduino فقط من USB ، لأنه يجب أن يحاكي جهاز جويستيك. سيؤدي ذلك إلى تزويد Arduino بجهد 5 فولت ، والذي يمكن استخدامه أيضًا لتشغيل مستقبل RC.

لقد استخدمت Pin VCC ، الذي يوفر إخراجًا منظمًا ، وأقرب دبوس Gnd - فقط قم بتوصيله بموصل PPM + و- دبابيس. عندما يتم تشغيل Arduino ، يتم تشغيل جهاز الاستقبال الآن أيضًا.

بالنسبة لإشارة PPM ، قررت استخدام المقاطعات لتحليلها. المقاطعات متاحة على سبيل المثال في Pin 3 ، فقط قم بتوصيله هناك - لا يوجد "دبوس RC أصلي" على اردوينو ، ولكن ربما هناك طرق أكثر ومختلفة للقراءة في إشارة جهاز الاستقبال.

اضطررت إلى تعطيل إنذار الجهد RX ، نظرًا لأن جهد VCC المزود بمصدر USB سيكون حوالي 4.5 فولت فقط - ولكنه مستقر تمامًا ، لذلك لا توجد مشكلة على الإطلاق.

الخطوة الثانية: الحصول على بعض إشارات 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 ثانية) في كود Arduino الخاص بي ، لكنني افترضت أن تباعد الإطارات يبلغ min. 3000 ميللي ثانية.

الخطوة 3: تكوين جهاز الإرسال

تكوين جهاز الإرسال
تكوين جهاز الإرسال
تكوين جهاز الإرسال
تكوين جهاز الإرسال
تكوين جهاز الإرسال
تكوين جهاز الإرسال

نظرًا لأنه لا يلزم معرفة سوى الموضع الفعلي لأسطح التحكم ، فإن قناة واحدة / "مؤازرة" لكل وظيفة RC كافية. وبالتالي ، يمكن إجراء إعداد بسيط لجهاز الإرسال - على غرار نموذج RC العادي. تتطلب الوظائف الرئيسية للجنيح ، والمصعد ، والدفة ، والخانق قناة إرسال مؤازرة واحدة على التوالي. أضفت أيضًا اللوحات والمكابح والعتاد ، وترك 9 قنوات مجانية حتى الآن. يرجى ملاحظة أنه تم وضع اللوحات على مرحلة الطيران ، ولا يتم التحكم فيها بشكل مباشر عن طريق عصا أو شريط تمرير أو زر.

الخطوة 4: تشغيل جويستيك

تشغيل جويستيك
تشغيل جويستيك
تشغيل جويستيك
تشغيل جويستيك

مكتبة Joystick سهلة الاستخدام للغاية ، وتوفر بعض الأمثلة والاختبارات. يجب أن يكون من المفيد التحقق أولاً مما إذا تم اكتشاف Arduino على أنه جويستيك مناسب ، والإرشادات المرتبطة في قسم الإدخال والمكتبة نفسها توفر بعض الإرشادات الجيدة.

في لوحة تحكم الأجهزة والطابعات ، كان Arduino يظهر باسم "Sparkfun Pro Micro" ، وكانت نافذة اختبار عصا التحكم تعرض 7 محاور والكثير من الأزرار المدعومة. حتى مفتاح القبعة يمكن استخدامه عند برمجته في Arduino.

الخطوة 5: ترميز Arduino

ترميز اردوينو
ترميز اردوينو
ترميز اردوينو
ترميز اردوينو

ما يزال مفقودًا هو التحليل الفعلي لإشارة PPM والتعيين لمحاور وأزرار جويستيك. قررت التعيين التالي:

تعيين القناة / الوظيفة / عصا التحكم:

  1. خنق -> محور الخانق
  2. الجنيح -> المحور العاشر
  3. المصعد -> المحور ص
  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 ثانية) لقيم عصا التحكم دون إعادة القياس.

تتم تهيئة DIN 3 كمدخل رقمي ، وتمكين سحب ، وإرفاق مقاطعة:

pinMode (PPM_PIN ، INPUT_PULLUP) ،

attachInterrupt (digitalPinToInterrupt (PPM_PIN) ، PPM_Pin_Changed ، أختر) ؛

لأغراض التصحيح ، أضفت بعض المطبوعات عبر الواجهة التسلسلية على فترات منتظمة ، باستخدام مكتبة اردوينو المؤقت:

إذا (SERIAL_PRINT_INTERVAL> 0) {

Scheduler.every (SERIAL_PRINT_INTERVAL، (void *) -> bool {SerialPrintChannels ()؛ return true؛})؛ }

سيتم استدعاء مقاطعة الدبوس كلما تغيرت القيمة المنطقية للدبوس ، لذلك لكل حافة في إشارة PPM. قم بتقييم طول النبضة فقط عن طريق التوقيت البسيط باستخدام الميكرو ():

uint32_t curTime = ميكرو () ،

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

من خلال تقييم حالة الدبوس الحالية ودمجها مع طول النبضة والنبضات السابقة ، يمكن تصنيف النبضات الجديدة. سيكشف الشرط التالي عن فجوة بين الإطارات:

إذا (lastState == 0 && pulseLength> 3000 && pulseLength <6000)

بالنسبة إلى النبضات اللاحقة ، سيتم تعيين طول النبضة إلى حالة المحور عن طريق اقتصاص طول النبضة وتحيزه لمطابقة نطاق محور عصا التحكم:

uint16_t rxLength = pulseLength ؛

rxLength = (rxLength> 1600)؟ 1600: rxLength ؛ rxLength = (rxLength <600)؟ 600: طول rx 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.

ولا تنس وضع علامة في المجدول … وإلا فلن تظهر مطبوعات تصحيح الأخطاء.

حلقة فارغة() {

مجدول. tick () ؛ }

في لقطة الشاشة التي أرفقتها ، يمكنك أن ترى ، تم نقل القناة 1 من 1000 (خنق كامل) إلى 0 (خامل).

سوف يكتشف FSX Arduino تمامًا مثل أي عصا تحكم أخرى ، لذا ما عليك سوى تعيين الزر والمحاور والاستمتاع بالإقلاع!

ما يعجبني حقًا في هذا النهج هو أنه يمكنك فقط استخدام جهاز الإرسال الخاص بك كما هو الحال مع نموذج حقيقي ، على سبيل المثال باستخدام مراحل الرحلة وما إلى ذلك.

موصى به: