Мазмұны:

Arduino негізіндегі (JETI) PPM FSX үшін USB джойстик түрлендіргіші: 5 қадам
Arduino негізіндегі (JETI) PPM FSX үшін USB джойстик түрлендіргіші: 5 қадам

Бейне: Arduino негізіндегі (JETI) PPM FSX үшін USB джойстик түрлендіргіші: 5 қадам

Бейне: Arduino негізіндегі (JETI) PPM FSX үшін USB джойстик түрлендіргіші: 5 қадам
Бейне: Урок 99. Создание цифровых часов Arduino с использованием ЖК-дисплея DS3231 и семисегментного дисплея. 2024, Шілде
Anonim
Arduino негізіндегі (JETI) PPM FSX үшін USB джойстик түрлендіргіші
Arduino негізіндегі (JETI) PPM FSX үшін USB джойстик түрлендіргіші
Arduino негізіндегі (JETI) PPM FSX үшін USB джойстик түрлендіргіші
Arduino негізіндегі (JETI) PPM FSX үшін USB джойстик түрлендіргіші

Мен JETI DC-16 таратқышты 2 режимнен 1 режимге ауыстыруды шештім, ол негізінен Дроссель мен Лифтті солдан оңға және керісінше ауыстырады. Миымның сол/оң жақтағы шатасуына байланысты мен модельдердің бірін бұзғым келмеді, сондықтан FSX -те аздап жаттығуға бола ма деп ойладым.

Мен JETI таратқыштарын Joystick режимін қораптан тыс қолдайтынын оқыдым және сынап көрдім, бірақ мен осьтер мен коммутаторлардың тапсырмаларына толық икемділікті және TX -ты нақты модельдегідей қолдануды қалаймын. Қабылдағыштың шығуын қолдана отырып, сонымен қатар DC-16 сигналын өңдеуге және араластырғыштарды, ұшу фазаларын, қосарланған тарифтерді қолдануға болады.

Жақында мен USB HID енгізу құрылғысын, мысалы Джойстикті Pro Micro сияқты арзан Arduino -дан қалай жасауға болатыны туралы жақсы оқулық таптым:

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

Бұл FSX -те ұшақты / тікұшақты / кез келген нәрсені басқаруға қажет нәрсенің бәрін қосады! Көптеген осьтер мен түймелер қол жетімді.

Менде тек JETI RSAT2 бос болғандықтан, мен оны Arduino -мен байланыстыруды шештім және Джойстик кітапханасымен бірге шағын PPM талдаушысын енгізуге тырыстым.

Менің ойымша, осы қадамдарды орындаған кез келген адам Arduino -ны қосу мен бағдарламалауды біледі деп ойлаймын. Мен ақаулар мен зақымдарға кепілдік бермеймін!

Жабдықтар

Саған қажет болады…

  • Joystick кітапханасы қолдайтын кез келген Arduino, мен Sparkfun Pro Micro 5V / 16 MHz қолдандым
  • Arduino IDE соңғы нұсқасы
  • PPM сигналын шығаратын кез келген RC қабылдағышы, JETI RSAT2 сияқты
  • бірнеше секіргіш сымдар (мин. 3)
  • Arduino IDE -де орнатылған Джойстик кітапханасы
  • arduino-таймер кітапханасы:

1 -қадам: RX пен Arduino байланыстырыңыз

RX пен Arduino байланыстырыңыз
RX пен Arduino байланыстырыңыз
RX пен Arduino байланыстырыңыз
RX пен Arduino байланыстырыңыз

Сымдар өте қарапайым. Мен Arduino -ны USB -ден ғана қуаттаймын деп шештім, себебі ол джойстикке ұқсайды. Бұл Arduino -ны 5В -пен қамтамасыз етеді, оны RC қабылдағышты қуаттандыру үшін де пайдалануға болады.

Мен реттелетін шығуды қамтамасыз ететін Pin VCC және ең жақын Gnd түйреуішін қолдандым - оны PPM коннекторының + және - түйреуіштеріне қосыңыз. Arduino қосылған кезде ресивер де қосылады.

PPM сигналы үшін мен оларды ажырату үшін үзулерді қолдануды шештім. Үзілістер бар, мысалы. Pin 3 -те, оны тек осында жалғаңыз - arduino -да «жергілікті RC -түйреуіш» жоқ, бірақ қабылдағыш сигналында оқудың әр түрлі әдістері болуы мүмкін.

Мен RX кернеу дабылын өшіруге тура келді, өйткені USB қуатымен кернеу тек 4,5 В шамасында болады, бірақ өте тұрақты, сондықтан ешқандай проблема жоқ.

2 -қадам: PPM сигналдарын алу

Кейбір PPM сигналдарын алу
Кейбір PPM сигналдарын алу
Кейбір PPM сигналдарын алу
Кейбір PPM сигналдарын алу

Қабылдағыш пен TX қосылған кезде мен суретте көрсетілгендей PPM сигналдарын алдым. Мәңгілік қайталанатын 16 арна. Егер RSAT бойынша Failsafe өшірілген болса және таратқыш өшірілсе, PPM шығысы ажыратылады.

PPM туралы қосымша ақпаратты мына жерден алуға болады:

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

Мен бұл жағдайда нақты заттармен ұшпайтындықтан, мен теориялық уақытқа мән бермедім және таяқтарды толық солдан оңға қарай жылжытқанда, менің қабылдағышым нені қатты шығаратынын осциллографта білдім (TX стандартты параметрлері). -100% ұзындығы 600 микс, ал +100% -дан 1600 микс дейінгі импульстарға сәйкес келеді. Мен сондай -ақ Arduino кодымда үзіліс импульсінің ұзақтығына мән бермедім (400μs), бірақ мен кадр аралығын мин. 3000 мкс.

3 -қадам: таратқышты конфигурациялау

Таратқышты конфигурациялау
Таратқышты конфигурациялау
Таратқышты конфигурациялау
Таратқышты конфигурациялау
Таратқышты конфигурациялау
Таратқышты конфигурациялау

Басқару беттерінің нақты орнын білу қажет болғандықтан, RC функциясына бір арна / «серво» жеткілікті. Демек, таратқыштың қарапайым қондырғысын жасауға болады - бұл қалыпты RC моделіне ұқсас. Эйлерон, лифт, руль және дроссельдің негізгі функциялары әрқайсысы сәйкесінше бір серво таратқыш арнаны қажет етеді. Мен сонымен қатар қақпақтарды, тежегіштерді және редукторларды қостым, әзірге 9 арнаны бос қалдырдым. Назар аударыңыз, ілмектер ұшу фазасына қойылды және олар таяқша, сырғытпа немесе түйме арқылы тікелей басқарылмайды.

4 -қадам: Джойстикті іске қосыңыз

Джойстикті іске қосу
Джойстикті іске қосу
Джойстикті іске қосу
Джойстикті іске қосу

Джойстик кітапханасы өте қарапайым және бірнеше мысалдар мен тесттерді ұсынады. Алдымен Arduino сәйкес джойстик ретінде табылғанын, кіріс бөліміндегі сілтемелер мен кітапхананың өзі жақсы нұсқаулық беретінін тексеру пайдалы болуы керек.

Құрылғылар мен принтерлердің басқару тақтасында Arduino «Sparkfun Pro Micro» болып көрінді, ал джойстиктің сынақ терезесінде 7 ось пен қолдау көрсетілетін түймелер көп болды. Ардуинода бағдарламаланған кезде тіпті қалпақ қосқышты қолдануға болады.

5 -қадам: Arduino кодтау

Arduino кодтау
Arduino кодтау
Arduino кодтау
Arduino кодтау

Әлі де жетіспейтін нәрсе - PPM сигналының нақты талдауы және Джойстик осьтері мен түймелеріне тағайындау. Мен келесі карта жасауды шештім:

Арна / функция / джойстикті тағайындау:

  1. Дроссель -> Дроссель осі
  2. Эйлерон -> X осі
  3. Лифт -> Y осі
  4. Руль -> X айналу осі
  5. Қақпақтар -> Y айналу осі
  6. Тежегіш -> Z осі
  7. Gear -> 0 түймесі

Беріліс төмен болған кезде джойстиктің бірінші түймесі басылады және берілісті көтергенде босатылады. Алайда, бұл FSX үшін FSUIPC талап етеді, қораптан тыс, 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, CHANGE);

Жөндеу мақсатында мен arduino-таймер кітапханасын қолдана отырып, сериялық интерфейс арқылы тұрақты түрде бірнеше басып шығаруды қостым:

егер (SERIAL_PRINT_INTERVAL> 0) {

scheduler.every (SERIAL_PRINT_INTERVAL, (void*) -> bool {SerialPrintChannels (); true қайтару;}); }

Түйреуіштің логикалық мәні өзгерген сайын түйреуіштің үзілуі шақырылады, сондықтан PPM сигналының әр жиегі үшін. Импульстің ұзындығын micros () көмегімен қарапайым уақыт бойынша бағалаңыз:

uint32_t curTime = микросхемалар ();

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

Ағымдағы түйреуіштің күйін бағалау және оны импульстік ұзындықпен және өткен импульстармен біріктіру арқылы жаңа импульстарды жіктеуге болады. Келесі шарттар кадраралық алшақтықты анықтайды:

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

Кейінгі импульстер үшін импульстің ұзындығы джойстик осінің диапазонына сәйкес келу үшін импульстің ұзындығын кесу және бұру арқылы ось күйіне салыстырылады:

uint16_t rxLength = импульстік ұзындық;

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

RxChannels массиві ақырында таяқша / жүгірткі мен түйме позицияларын көрсететін 0 - 1000 аралығындағы 16 мәнді қамтиды.

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 арқылы қосылады немесе өшіріледі.

Жоспарлаушыға құсбелгі қоюды ұмытпаңыз, әйтпесе отладтаудың іздері көрінбейді.

void loop () {

scheduler.tick (); }

Мен қосқан скриншотта 1 -канал 1000 -нан (толық дроссель) 0 -ге (жұмыссыз) ауыстырылғанын көруге болады.

FSX кез келген басқа джойстик сияқты Arduino -ны анықтайды, сондықтан түйме мен осьтерді тағайындаңыз және ұшудан көңілді болыңыз!

Маған бұл тәсіл ұнады, сіз таратқышты нақты модель сияқты пайдалана аласыз, мысалы. ұшу кезеңдерін қолдану және т.

Ұсынылған: