Բովանդակություն:

Arduino- ի վրա հիմնված (JETI) PPM- ից USB Joystick փոխարկիչ FSX- ի համար. 5 քայլ
Arduino- ի վրա հիմնված (JETI) PPM- ից USB Joystick փոխարկիչ FSX- ի համար. 5 քայլ

Video: Arduino- ի վրա հիմնված (JETI) PPM- ից USB Joystick փոխարկիչ FSX- ի համար. 5 քայլ

Video: Arduino- ի վրա հիմնված (JETI) PPM- ից USB Joystick փոխարկիչ FSX- ի համար. 5 քայլ
Video: Lesson 95: Using L293D 4 DC Motors Shield for Arduino UNO and Mega | Arduino Step By Step Course 2024, Հուլիսի
Anonim
Arduino- ի վրա հիմնված (JETI) PPM- ից USB Joystick փոխարկիչ FSX- ի համար
Arduino- ի վրա հիմնված (JETI) PPM- ից USB Joystick փոխարկիչ FSX- ի համար
Arduino- ի վրա հիմնված (JETI) PPM- ից USB Joystick փոխարկիչ FSX- ի համար
Arduino- ի վրա հիմնված (JETI) PPM- ից USB Joystick փոխարկիչ FSX- ի համար

Ես որոշեցի իմ JETI DC-16 հաղորդիչը 2 ռեժիմից միացնել 1 ռեժիմի, որը հիմնականում Throttle- ը և Elevator- ը ձախից աջ է փոխում և հակառակը: Քանի որ ես չէի ուզում խափանել իմ մոդելներից մեկը ՝ ուղեղումս ձախ/աջ շփոթության պատճառով, ինձ հետաքրքրում էր, թե հնարավո՞ր է մի փոքր զբաղվել FSX- ում:

Ես կարդացի և փորձարկեցի JETI հաղորդիչները, որոնք իրականում աջակցում են Joystick ռեժիմը տուփից դուրս, սակայն ես ուզում էի լիարժեք ճկունություն առանցքների և անջատիչների առաջադրանքների համար և օգտագործել TX- ը, ինչպես իսկական մոդելի դեպքում: Օգտագործելով ստացողի ելքը, հնարավոր է նաև օգտագործել լույսի ներքո DC-16- ում ազդանշանի մշակումը և օգտագործել խառնիչներ, թռիչքի փուլեր, երկակի դրույքաչափեր, ինչ որ կարող եք այնտեղ ծրագրավորել:

Վերջերս ես գտա մի գեղեցիկ ձեռնարկ, թե ինչպես պատրաստել USB HID մուտքային սարք, այն է `Joystick, էժան Arduino- ից, ինչպիսին է Pro Micro- ն:

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

Սա հնարավորություն կտա ամեն ինչ անհրաժեշտ է ինքնաթիռը / ուղղաթիռը / ինչ էլ որ լինի FSX- ում վերահսկելու համար: Առկա են բազմաթիվ կացիններ և կոճակներ:

Քանի որ ես պարզապես ունեի պահեստային JETI RSAT2, ես որոշեցի այն միացնել Arduino- ի հետ և Joystick գրադարանի հետ միասին փորձեմ ներդնել մի փոքր PPM վերլուծիչ:

Ենթադրում եմ, որ այս քայլերին հետևող որևէ մեկը ծանոթ է Arduino- ի միացմանը և ծրագրավորմանը: Ես երաշխիքներ չեմ վերցնի անսարքությունների կամ վնասների համար:

Պարագաներ

Ձեզ հարկավոր կլինի…

  • ցանկացած Arduino, որն աջակցում է Joystick գրադարանը, ես օգտագործել եմ Sparkfun Pro Micro 5V / 16 MHz
  • Arduino IDE- ի վերջին տարբերակը
  • ցանկացած RC ընդունիչ, որը թողարկում է PPM ազդանշան, ինչպես JETI RSAT2- ը
  • մի քանի ցատկող լար (նվազ. 3)
  • Arduino IDE- ում տեղադրված Joystick գրադարանը
  • arduino-timer գրադարանը ՝

Քայլ 1: Միացրեք RX- ը և Arduino- ն

Wire Up the RX և Arduino
Wire Up the RX և Arduino
Wire Up the RX և Arduino
Wire Up the RX և Arduino

Էլեկտրագծերը բավականին պարզ են: Ես որոշեցի Arduino- ն միացնել միայն USB- ով, քանի որ այն պետք է ընդօրինակի Joystick սարքը: Սա Arduino- ին կմատակարարի 5 Վ լարման, որը կարող է օգտագործվել նաև RC ընդունիչին սնուցելու համար:

Ես օգտագործել եմ Pin VCC- ն, որն ապահովում է կարգավորվող ելք, և մոտակա Gnd քորոցը `պարզապես միացրեք այն PPM- ի միակցիչին + և - կապումներին: Երբ Arduino- ն սնվում է, ստացողը նույնպես միանում է:

PPM ազդանշանի համար ես որոշեցի օգտագործել ընդհատումները դրանք վերլուծելու համար: Ընդհատումները մատչելի են, օրինակ. Pin 3 -ում, այնպես որ պարզապես միացրեք այն այնտեղ. arduino- ում չկա «մայրենի RC կապ», բայց, հավանաբար, ընդունիչի ազդանշանում կարդալու ավելի ու ավելի տարբեր եղանակներ:

Ես ստիպված էի անջատել RX լարման ահազանգը, քանի որ VCC- ի լարումը USB մատակարարմամբ կլինի միայն 4.5V- ի սահմաններում, բայց բավականին կայուն, այնպես որ ընդհանրապես խնդիր չկա:

Քայլ 2: Ստացեք որոշ PPM ազդանշաններ

Որոշ PPM ազդանշանների ստացում
Որոշ PPM ազդանշանների ստացում
Որոշ PPM ազդանշանների ստացում
Որոշ PPM ազդանշանների ստացում

Երբ ստացողը և TX- ը սնուցվում են, ես ստանում էի PPM ազդանշաններ, ինչպես ցույց է տրված նկարում: 16 ալիք, ընդմիշտ կրկնվող: Եթե RSAT- ի Failsafe- ն անջատված է, և հաղորդիչն անջատված է, PPM- ի ելքը կանջատվի:

PPM- ի մասին լրացուցիչ տեղեկություններ հասանելի են այստեղ.

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

Քանի որ այս դեպքում ես իրական իրեր չեմ թռչում, ես թքած ունեի տեսական ժամերի վրա և պարզապես պարզեցի, թե ոսկրոսկոպի վրա ինչ է իմ ստացողը սուր դուրս տալիս, երբ ձողերը ամբողջովին ձախից տեղափոխում է աջ (ստանդարտ պարամետրեր ՏՀՍ -ում). Թվում էր, թե -100% -ը համապատասխանում է 600 մկ երկարությամբ իմպուլսներին, և +100% -ից մինչև 1600 մկ: Ես նաև չէի մտածում իմ Arduino ծածկագրում դադարի իմպուլսների երկարության մասին (400μs), բայց ենթադրում էի, որ շրջանակի միջև ընկած հատվածը կազմում է րոպե: 3000μs

Քայլ 3: Հաղորդիչի կազմաձևում

Հաղորդիչի կազմաձևում
Հաղորդիչի կազմաձևում
Հաղորդիչի կազմաձևում
Հաղորդիչի կազմաձևում
Հաղորդիչի կազմաձևում
Հաղորդիչի կազմաձևում

Քանի որ հսկիչ մակերևույթների միայն փաստացի դիրքը պետք է հայտնի լինի, մեկ RC ֆունկցիայի համար բավարար է մեկ ալիք / «servo»: Հետևաբար, կարող է կատարվել հաղորդիչի բավականին պարզ կարգավորում `նման սովորական RC մոդելի: Aileron- ի, վերելակի, ղեկի և շնչափողի հիմնական գործառույթներից յուրաքանչյուրը պահանջում է համապատասխանաբար միայն մեկ servo հաղորդիչ ալիք: Ավելացրել եմ նաև փեղկեր, արգելակներ և հանդերձում ՝ մինչ այժմ 9 ալիք ազատ թողնելով: Խնդրում ենք նկատի ունենալ, որ փեղկերը տեղադրվել են թռիչքի փուլում և ուղղակիորեն չեն վերահսկվում փայտի, սահիչի կամ կոճակի միջոցով:

Քայլ 4: Գործարկել Joystick- ը

Գործարկում է Joystick- ը
Գործարկում է Joystick- ը
Գործարկում է Joystick- ը
Գործարկում է Joystick- ը

Joystick գրադարանը բավականին հեշտ է օգտագործել և տալիս է որոշ օրինակներ և թեստեր: Օգտակար կլինի նախ ստուգել, արդյոք Arduino- ն ճանաչվում է որպես ճիշտ Joystick, մուտքի բաժնում և հրատարակված գրականությունը տալիս են որոշ լավ ուղեցույցներ:

«Սարքեր և տպիչներ» կառավարման վահանակում Arduino- ն ցուցադրվում էր որպես «Sparkfun Pro Micro», իսկ ջոյսթիկի փորձարկման պատուհանը ցույց էր տալիս 7 առանցք և բազմաթիվ աջակցվող կոճակներ: Նույնիսկ գլխարկի անջատիչը կարող է օգտագործվել Arduino- ում ծրագրավորվելիս:

Քայլ 5. Arduino- ի կոդավորումը

Arduino- ի կոդավորում
Arduino- ի կոդավորում
Arduino- ի կոդավորում
Arduino- ի կոդավորում

Այն, ինչ դեռ բացակայում է, PPM ազդանշանի իրական վերլուծությունն է և Joystick առանցքների և կոճակների նշանակումը: Ես որոշեցի հետևյալ քարտեզագրումը.

Ալիք / Ֆունկցիա / oyոյստիկ առաջադրանք.

  1. Շնչափող -> շնչափողի առանցք
  2. Այլերոն -> X առանցք
  3. Վերելակ -> Y առանցք
  4. Ղեկ -> X պտտման առանցք
  5. Flaալքեր -> Y ռոտացիայի առանցք
  6. Արգելակ -> Z առանցք
  7. Gear -> Կոճակ 0

Երբ հանդերձանքը իջնում է, Joystick- ի առաջին կոճակը պետք է սեղմվի և ազատվի հանդերձանքը բարձրացնելիս: Այնուամենայնիվ, դա կպահանջի FSUIPC FSX- ի համար, տուփից դուրս, FSX- ը կընդունի միայն հանդերձանքը փոխելու կոճակ, ինչը հենց այն չէ, ինչ կատարվում է իմ մոդելների հետ:

Ես տրամադրեցի կոդի իմ ընթացիկ տարբերակը բազմաթիվ մեկնաբանություններով, որոնք ինձ համար բավականին լավ են աշխատում. Ազատ զգալ փոխեք ձեր առաջադրանքը կամ ավելացրեք նոր գործառույթներ: Վերջին 9 RC ալիքները ներկայումս չեն օգտագործվում:

Կարգավորման համար Joystick դասը պետք է նախաստորագրվի ՝ հիմնականում թվային առանցքների տիրույթները սահմանելով.

/ * Սահմանել առանցքների տիրույթ (սահմանվում է վերնագրում, 0 - 1000) */

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

Օգտագործելով 0 -ից 1000 -ի արժեքները, հնարավոր է ուղղակիորեն քարտեզագրել զարկերակի երկարությունը (600 - 1600μs) ըստ ջոյսթիկի արժեքներին `առանց վերալիցքավորման:

DIN 3 – ը նախաստորագրված է որպես թվային մուտքագրում, քաշքշուկները միացված և ընդհատված ՝ կցված.

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 (); true true;}); }

PIN- ի ընդհատումը կկոչվի ամեն անգամ, երբ pin- ի տրամաբանական արժեքը փոխվի, այնպես որ PPM ազդանշանի յուրաքանչյուր եզրին: Գնահատեք զարկերակի երկարությունը `պարզ ժամանակացույցով` օգտագործելով micros ():

uint32_t curTime = միկրո ();

uint32_t զարկերակLength = curTime - edgeTime; uint8_t curState = digitalRead (PPM_PIN);

Գնահատելով ընթացիկ քորոցի վիճակը և այն համատեղելով զարկերակի երկարության և անցյալ իմպուլսների հետ, կարող են դասակարգվել նոր իմպուլսները: Հետևյալ պայմանականությունը կբացահայտի միջանկյալ բացը.

եթե (lastState == 0 && զարկերակ Երկարություն> 3000 && զարկերակ Երկարություն <6000)

Հետագա իմպուլսների դեպքում զարկերակի երկարությունը քարտեզագրվելու է առանցքի վիճակի `ճարմանդների երկարությունը կտրելով և կողմնակալելով, որպեսզի համապատասխանի ջոյսթիկի առանցքի տիրույթին.

uint16_t rxLength = զարկերակային երկարություն;

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

RxChannels զանգվածը, ի վերջո, պարունակում է 0 - 1000 -ից 16 արժեք ՝ նշելով փայտի / սահիչի և կոճակի դիրքերը:

16 ալիք ստանալուց հետո Joystick- ի քարտեզագրումը կատարվում է.

/ * առանցքներ */

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 ();

Ես կոդի մեջ մի քանի առանցք շրջեցի, ինչը բացարձակապես անհրաժեշտ չէ, քանի որ առանցքը կարող է նաև շրջվել ՝ շրջելով servo ուղղությունը կամ FSX- ում նշանակումը: Այնուամենայնիվ, ես որոշեցի պահպանել servo- ի ուղղությունները և նաև FSX- ի օրիգինալ հանձնարարականը:

Կոճակը միացված կամ անջատված է 7 -րդ շեմային ալիքով:

Եվ մի մոռացեք նշելու ժամանակացույցը … հակառակ դեպքում, վրիպազերծման տպումներ չեն երևա:

դատարկ շրջան () {

scheduler.tick (); }

Իմ կցած սքրինշոթում կարող եք տեսնել, որ 1 -ին ալիքը 1000 -ից (լրիվ շնչափող) տեղափոխվել է 0 (անգործուն):

FSX- ը Arduino- ն կբացահայտի այնպես, ինչպես ցանկացած այլ Joystick, այնպես որ պարզապես նշանակեք կոճակը և առանցքները և զվարճացեք թռիչքից:

Այս մոտեցման մեջ ինձ իսկապես դուր է գալիս այն, որ դուք կարող եք պարզապես օգտագործել ձեր հաղորդիչը, ինչպես իրական մոդելի դեպքում, օրինակ. թռիչքի փուլերի օգտագործումը և այլն:

Խորհուրդ ենք տալիս: