Mundarija:

Arduino asosidagi (JETI) PPM -dan FSX uchun USB -konvertor konvertori: 5 qadam
Arduino asosidagi (JETI) PPM -dan FSX uchun USB -konvertor konvertori: 5 qadam

Video: Arduino asosidagi (JETI) PPM -dan FSX uchun USB -konvertor konvertori: 5 qadam

Video: Arduino asosidagi (JETI) PPM -dan FSX uchun USB -konvertor konvertori: 5 qadam
Video: Урок 99. Создание цифровых часов Arduino с использованием ЖК-дисплея DS3231 и семисегментного дисплея. 2024, Noyabr
Anonim
Arduino asosidagi (JETI) PPM -dan FSX uchun USB -konvertor konvertori
Arduino asosidagi (JETI) PPM -dan FSX uchun USB -konvertor konvertori
Arduino asosidagi (JETI) PPM -dan FSX uchun USB -konvertor konvertori
Arduino asosidagi (JETI) PPM -dan FSX uchun USB -konvertor konvertori

Men JETI DC-16 uzatgichimni 2-rejimdan 1-rejimga o'tkazishga qaror qildim, u asosan gaz va liftni chapdan o'ngga va aksincha o'zgartiradi. Miyamda chap/o'ng chalkashlik tufayli o'z modellarimdan birini buzishni xohlamaganim uchun, men FSXda biroz mashq qilish mumkinmi, deb hayron bo'ldim.

Men JETI transmitterlarini o'qib chiqdim va sinab ko'rdim, aslida qutidan tashqarida Joystick rejimini qo'llab -quvvatlayman, lekin men o'qlar va kalitlarni almashtirish uchun to'liq moslashuvchanlikni va TXni haqiqiy modeldagi kabi ishlatishni xohlardim. Qabul qiluvchining chiqishidan foydalanib, siz DC-16 signallarini qayta ishlashdan foydalanishingiz va mikserlardan, uchish fazalaridan, ikkilamchi tariflardan va u erda dasturlash mumkin bo'lgan narsalardan foydalanishingiz mumkin.

Yaqinda men Pro Micro kabi arzon Arduino -dan USB HID kirish moslamasini, ya'ni Joystickni qanday yasash bo'yicha yaxshi qo'llanma topdim:

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

Bu FSXda samolyot / vertolyot / nima bo'lishidan qat'i nazar, hamma narsani boshqarishga imkon beradi! Ko'p sonli o'qlar va tugmalar mavjud.

Menda zaxira JETI RSAT2 bo'lgani uchun, men uni Arduino -ga ulashga qaror qildim va Joystick kutubxonasi bilan bir qatorda kichik PPM -analizatorini o'rnatishga harakat qildim.

O'ylaymanki, kimdir bu qadamlarni bajarsa, Arduino -ni ulash va dasturlash bilan tanish. Nosozliklar yoki shikastlanishlar uchun hech qanday kafolat olmayman!

Ta'minotlar

Sizga kerak bo'ladi…

  • Joystick kutubxonasi tomonidan qo'llab -quvvatlanadigan har qanday Arduino, men Sparkfun Pro Micro 5V / 16 MGts dan foydalanardim.
  • Arduino IDE -ning so'nggi versiyasi
  • PPM signalini chiqaradigan har qanday RC qabul qiluvchisi, masalan, JETI RSAT2
  • bir nechta o'tish simlari (min. 3)
  • Arduino IDE -da o'rnatilgan Joystick kutubxonasi
  • arduino-taymer kutubxonasi:

1 -qadam: RX va Arduino -ni ulang

RX va Arduino -ni ulang
RX va Arduino -ni ulang
RX va Arduino -ni ulang
RX va Arduino -ni ulang

Kabelning ulanishi deyarli aniq. Men faqat Arduino -ni USB -dan quvvatlantirishga qaror qildim, chunki u Joystick qurilmasini taqlid qiladi. Bu Arduino -ni 5V bilan ta'minlaydi, uni RC qabul qilgichini quvvatlantirish uchun ham ishlatish mumkin.

Men tartibga solingan chiqishni ta'minlaydigan Pin VCC va eng yaqin Gnd pinidan foydalandim - uni PPM + va - pinlariga ulang. Arduino quvvat olganda, qabul qilgich ham quvvat oladi.

PPM signali uchun men ularni ajratish uchun uzilishlardan foydalanishga qaror qildim. Tanaffuslar mavjud, masalan. 3 -pin, shuning uchun uni shu erga ulang - arduino -da "mahalliy RC -pin" yo'q, lekin qabul qilish signalida o'qishning har xil usullari bo'lishi mumkin.

Men RX kuchlanish signalini o'chirib qo'yishga majbur bo'ldim, chunki USB quvvat manbai bo'lgan VCC voltaji atigi 4,5 V atrofida bo'ladi, lekin juda barqaror, shuning uchun hech qanday muammo yo'q.

2 -qadam: Ba'zi PPM signallarini olish

Ba'zi PPM signallarini olish
Ba'zi PPM signallarini olish
Ba'zi PPM signallarini olish
Ba'zi PPM signallarini olish

Qabul qilgich va TX quvvat olganda, men rasmda ko'rsatilgandek PPM signallarini oldim. 16 kanal, abadiy takrorlanadi. Agar RSAT -da Failsafe o'chirilgan bo'lsa va transmitter o'chirilgan bo'lsa, PPM chiqishi o'chiriladi.

PPM haqida ko'proq ma'lumot bu erda mavjud:

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

Men bu erda haqiqiy narsalarni uchirmaganim uchun, nazariy vaqtlarga ahamiyat bermadim va tayoqlarni to'liq chapdan to'liq o'ngga siljitish paytida qabul qilgichim qanday aniq chiqishini osiloskopda aniqladim (TX standart sozlamalari). Ko'rinib turibdiki, -100% uzunligi 600 mks va +100% dan 1600 mks gacha bo'lgan pulslarga to'g'ri keladi. Men ham Arduino kodimdagi pauza pulslarining uzunligiga (400 miks) ahamiyat bermadim, lekin men minut oralig'ida ramka oralig'ini qabul qildim. 3000 ms.

3 -qadam: Transmitterni sozlash

Transmitterni sozlash
Transmitterni sozlash
Transmitterni sozlash
Transmitterni sozlash
Transmitterni sozlash
Transmitterni sozlash

Boshqarish yuzalarining faqat haqiqiy holatini bilish kerak bo'lgani uchun, bitta RC funktsiyasi uchun bitta kanal / "servo" etarli. Shunday qilib, oddiy RC modeliga o'xshash transmitterni juda oddiy sozlash mumkin. Aleron, lift, rul va gazning asosiy funktsiyalari har biri mos ravishda bitta servo uzatuvchi kanalni talab qiladi. Shuningdek, men flaplar, tormozlar va viteslarni qo'shib qo'ydim, shu paytgacha 9 ta kanal bo'sh qoldi. E'tibor bering, flaplar uchish bosqichiga o'tkazildi va ular to'g'ridan -to'g'ri tayoq, slayder yoki tugma orqali boshqarilmaydi.

4 -qadam: Joystikni ishga tushirish

Joystikni ishga tushirish
Joystikni ishga tushirish
Joystikni ishga tushirish
Joystikni ishga tushirish

Joystick kutubxonasidan foydalanish juda oson va ba'zi misollar va testlarni taqdim etadi. Avval Arduino tegishli Joystik aniqlanganligini, kirish bo'limida ko'rsatilgan ko'rsatmalar va kutubxonaning o'zi yaxshi ko'rsatma berishini tekshirish foydali bo'lishi kerak.

Qurilmalar va printerlar boshqaruv panelida Arduino "Sparkfun Pro Micro", joystik test oynasida esa 7 o'q va qo'llab -quvvatlanadigan tugmalar ko'p bo'lgan. Hatto shlyapa kalitini ham Arduino -da dasturlash mumkin.

5 -qadam: Arduino -ni kodlash

Arduino kodlash
Arduino kodlash
Arduino kodlash
Arduino kodlash

Hali ham etishmayotgan narsa - bu PPM signalini haqiqiy tahlil qilish va Joystick o'qlari va tugmalariga tayinlash. Men quyidagi xaritani tuzishga qaror qildim:

Kanal / Funktsiya / Joystik vazifasi:

  1. Gaz kelebeği -> Gaz oqi o'qi
  2. Aileron -> X o'qi
  3. Lift -> Y o'qi
  4. Rulda -> X aylanish o'qi
  5. Qoplamalar -> Y aylanish o'qi
  6. Tormoz -> Z o'qi
  7. Gear -> 0 tugmasi

Vites tushganda, Joystikning birinchi tugmasi bosiladi va vitesni ko'targanda qo'yib yuboriladi. Biroq, buning uchun FSX uchun FSUIPC kerak bo'ladi, qutidan tashqarida, FSX faqat vitesni almashtirish tugmachasini qabul qiladi, bu mening modellarim bilan aniq emas.

Men kodning hozirgi versiyasini ko'plab sharhlar bilan ta'minladim, bu men uchun juda yaxshi ishlaydi - o'z vazifangizni o'zgartiring yoki yangi funktsiyalarni qo'shing. Oxirgi 9 ta RC kanallari hozircha ishlatilmayapti.

O'rnatish uchun Joystick sinfini raqamli o'qlar diapazonini aniqlash orqali boshlash kerak:

/ * Eksa diapazonini o'rnating (sarlavhada ko'rsatilgan, 0 - 1000) */

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

0 dan 1000 gacha bo'lgan qiymatlarni ishlatib, puls uzunligini (600 - 1600 ms) o'lchov o'lchovisiz joystik qiymatlariga to'g'ridan -to'g'ri solishtirish mumkin.

DIN 3 raqamli kirish sifatida ishga tushiriladi, tortishish yoqiladi va uzilish biriktiriladi:

pinMod (PPM_PIN, INPUT_PULLUP);

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

Nosozliklarni tuzatish maqsadida, men arduino-taymer kutubxonasidan foydalanib, ketma-ket ketma-ket interfeys orqali bir nechta nashrlarni qo'shdim:

agar (SERIAL_PRINT_INTERVAL> 0) {

scheduler.every (SERIAL_PRINT_INTERVAL, (void*) -> bool {SerialPrintChannels (); rostini qaytarish;}); }

PIN -kodning mantiqiy qiymati o'zgarganda, pin uzilishi chaqiriladi, shuning uchun PPM signalining har bir chekkasi uchun. Puls uzunligini micros () yordamida oddiy vaqt bilan baholang:

uint32_t curTime = mikrosxemalar ();

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

Hozirgi pin holatini baholab, uni impuls uzunligi va o'tgan pulslar bilan birlashtirib, yangi impulslarni tasniflash mumkin. Quyidagi shartlar ramkalar orasidagi bo'shliqni aniqlaydi:

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

Keyingi impulslar uchun pulsning uzunligi eksa holatiga moslashtiriladi, bu puls uzunligini joystik o'qi diapazoniga mos kelishi uchun qirqiladi va egiladi.

uint16_t rxLength = zarba uzunligi;

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

Oxir -oqibat rxChannels massivida tayoq / slayder va tugma pozitsiyalarini ko'rsatuvchi 0 dan 1000 gacha 16 ta qiymat mavjud.

16 ta kanalni olgandan so'ng, Joystikka xaritalash amalga oshiriladi:

/ * o'qlar */

Joystick.setThrottle (kanallar [0]); Joystick.setXAxis (kanallar [1]); Joystick.setYAxis (1000 - kanal [2]); Joystick.setRxAxis (kanallar [3]); Joystick.setRyAxis (kanallar [4]); Joystick.setZAxis (1000 - kanal [5]); / * tugmalari */ Joystick.setButton (0, (kanallar [6] <500? 1: 0)); / * ma'lumotlarni USB orqali yangilash */ Joystick.sendState ();

Men koddagi ba'zi o'qlarni teskari aylantirdim, bu mutlaqo kerak emas, chunki o'qni servo yo'nalishini yoki FSX -dagi topshiriqni teskari burish mumkin. Biroq, men servo yo'nalishlarini va asl FSX topshirig'ini saqlashga qaror qildim.

Tugma 7 -sonli kanal orqali yoqiladi yoki o'chadi.

Rejalashtiruvchini belgilashni unutmang, aks holda disk raskadrovka izlari ko'rinmaydi.

void loop () {

scheduler.tick (); }

Men biriktirgan skrinshotda siz ko'rasiz, 1 -kanal 1000 (to'liq gaz) dan 0 (bo'sh) ga ko'chirildi.

FSX boshqa Joystiklar singari Arduino -ni ham aniqlaydi, shuning uchun tugma va boltalarni belgilang va uchishdan zavqlaning!

Menga bu yondashuvning yoqishi shundaki, siz transmitteringizni haqiqiy modeldagi kabi ishlatishingiz mumkin, masalan. parvoz bosqichlaridan foydalanish va boshqalar.

Tavsiya: