Turinys:

„Arduino“(JETI) PPM į USB vairasvirtės keitiklis, skirtas FSX: 5 žingsniai
„Arduino“(JETI) PPM į USB vairasvirtės keitiklis, skirtas FSX: 5 žingsniai

Video: „Arduino“(JETI) PPM į USB vairasvirtės keitiklis, skirtas FSX: 5 žingsniai

Video: „Arduino“(JETI) PPM į USB vairasvirtės keitiklis, skirtas FSX: 5 žingsniai
Video: Симулятор джойстика для аппаратуры управления на arduino / ppm 2024, Liepa
Anonim
„Arduino“(JETI) PPM į USB vairasvirtės keitiklis, skirtas FSX
„Arduino“(JETI) PPM į USB vairasvirtės keitiklis, skirtas FSX
„Arduino“(JETI) PPM į USB vairasvirtės keitiklis, skirtas FSX
„Arduino“(JETI) PPM į USB vairasvirtės keitiklis, skirtas FSX

Aš nusprendžiau pakeisti savo JETI DC-16 siųstuvą iš 2 režimo į 1 režimą, kuris iš esmės perjungia droselį ir liftą iš kairės į dešinę ir atvirkščiai. Kadangi aš nenorėjau sudaužyti vieno iš savo modelių dėl tam tikros sumaišties kairiajame/dešiniajame smegenyse, man buvo įdomu, ar įmanoma šiek tiek praktikuoti FSX.

Aš perskaičiau ir išbandžiau, kad JETI siųstuvai iš tikrųjų palaiko vairasvirtės režimą, tačiau norėjau visiško lankstumo ašims ir jungikliams priskirti ir naudoti TX kaip su tikru modeliu. Naudojant imtuvo išvestį, taip pat galima panaudoti signalo apdorojimą DC-16 ir naudoti maišytuvus, skrydžio fazes, dvigubą greitį, kad ir ką ten programuotumėte.

Neseniai radau gražią pamoką, kaip iš pigaus „Arduino“, kaip „Pro Micro“, padaryti USB HID įvesties įrenginį, būtent vairasvirtę:

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

Tai leistų viską, ko reikia norint valdyti lėktuvą / sraigtasparnį / bet ką FSX! Galima įsigyti daugybę ašių ir mygtukų.

Kadangi aš ką tik turėjau atsarginį JETI RSAT2, nusprendžiau prijungti jį prie „Arduino“ir pabandyti įdiegti mažą PPM analizatorių kartu su „Joystick“biblioteka.

Manau, kad kiekvienas, atlikęs šiuos veiksmus, yra susipažinęs su „Arduino“prijungimu ir programavimu. Aš neprisiimu jokių garantijų dėl gedimų ar žalos!

Prekės

Jums reikės…

  • bet kurį „Arduino“, palaikomą „Joystick“bibliotekoje, naudojau „Sparkfun Pro Micro 5V / 16 MHz“
  • naujausia „Arduino IDE“versija
  • bet kuris RC imtuvas, siunčiantis PPM signalą, pvz., JETI RSAT2
  • keletas trumpųjų laidų (min. 3)
  • „Arduino IDE“įdiegta „Joystick“biblioteka
  • „arduino-timer“biblioteka:

1 žingsnis: prijunkite RX ir „Arduino“

Prijunkite RX ir „Arduino“
Prijunkite RX ir „Arduino“
Prijunkite RX ir „Arduino“
Prijunkite RX ir „Arduino“

Laidai yra gana paprasti. Aš nusprendžiau „Arduino“maitinti tik iš USB, nes jis imituos „Joystick“įrenginį. Tai suteiks „Arduino“5 V įtampą, kuri taip pat gali būti naudojama RC imtuvui maitinti.

Aš naudoju „Pin VCC“, kuris užtikrina reguliuojamą išėjimą, ir artimiausią „Gnd“kaištį - tiesiog prijunkite jį prie PPM jungties + ir - kaiščių. Kai „Arduino“gauna maitinimą, imtuvas taip pat įjungiamas.

PPM signalui nusprendžiau naudoti pertraukas, kad galėčiau juos išanalizuoti. Galimi pertraukimai, pvz. prie 3 kaiščio, todėl tiesiog prijunkite jį ten - „arduino“nėra „vietinio RC kaiščio“, bet galbūt daugiau ir skirtingų būdų skaityti imtuvo signalą.

Turėjau išjungti RX įtampos signalą, nes VCC įtampa su USB tiekimu bus tik apie 4,5 V, bet gana stabili, todėl jokių problemų.

2 žingsnis: kai kurių PPM signalų gavimas

Kai kurių PPM signalų gavimas
Kai kurių PPM signalų gavimas
Kai kurių PPM signalų gavimas
Kai kurių PPM signalų gavimas

Kai imtuvas IR TX yra maitinamas, gavau PPM signalus, kaip parodyta paveikslėlyje. 16 kanalų, kartojama amžinai. Jei „RSAT Failsafe“yra išjungtas ir siųstuvas išjungtas, PPM išvestis bus išjungta.

Daugiau informacijos apie PPM rasite čia:

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

Kadangi šiuo atveju aš neskraidau tikrais daiktais, man nerūpėjo teorinis laikas ir tiesiog osciloskopu supratau, ką mano imtuvas tiksliai išvedė, kai lazdos buvo perkeltos iš visiškai kairės į dešinę (standartiniai TX nustatymai). Atrodė, kad -100% atitinka 600 µs ilgio impulsus, o nuo +100% iki 1600 µs. Aš taip pat nesirūpinau pauzės impulsų ilgiu (400 µs) savo „Arduino“kode, bet maniau, kad kadrų tarpas yra min. 3000 µs.

3 veiksmas: siųstuvo konfigūravimas

Siųstuvo konfigūravimas
Siųstuvo konfigūravimas
Siųstuvo konfigūravimas
Siųstuvo konfigūravimas
Siųstuvo konfigūravimas
Siųstuvo konfigūravimas

Kadangi reikia žinoti tik tikrąją valdymo paviršių padėtį, pakanka vieno kanalo / „servo“kiekvienai RC funkcijai. Todėl siųstuvo sąranka gali būti gana paprasta - panaši į įprastą RC modelį. Pagrindinėms alilerio, lifto, vairo ir droselio funkcijoms reikalingas tik vienas servo siųstuvo kanalas. Aš taip pat pridėjau sklendes, stabdžius ir pavarą, kol kas paliekant laisvus 9 kanalus. Atminkite, kad sklendės buvo įjungtos į skrydžio etapą ir nėra tiesiogiai valdomos per lazdelę, slankiklį ar mygtuką.

4 žingsnis: valdykite vairasvirtę

Valdymas vairasvirte
Valdymas vairasvirte
Valdymas vairasvirte
Valdymas vairasvirte

„Joystick“biblioteka yra gana paprasta naudotis, ji pateikia keletą pavyzdžių ir testų. Turėtų būti naudinga pirmiausia patikrinti, ar „Arduino“yra nustatyta kaip tinkama vairasvirtė, įvesties skyriuje pateiktos instrukcijos ir pati biblioteka pateikia keletą gerų nurodymų.

Įrenginių ir spausdintuvų valdymo skydelyje „Arduino“buvo rodomas kaip „Sparkfun Pro Micro“, o vairasvirtės bandymo lange buvo rodomos 7 ašys ir daugybė palaikomų mygtukų. Programuojant „Arduino“galima naudoti net skrybėlės jungiklį.

5 žingsnis: „Arduino“kodavimas

Koduoja „Arduino“
Koduoja „Arduino“
Koduoja „Arduino“
Koduoja „Arduino“

Dar trūksta tikrojo PPM signalo analizės ir priskyrimo vairasvirtės ašims ir mygtukams. Aš nusprendžiau atlikti tokį žemėlapį:

Kanalo / funkcijos / vairasvirtės priskyrimas:

  1. Droselis -> droselio ašis
  2. Eleronas -> X ašis
  3. Liftas -> Y ašis
  4. Vairas -> X sukimosi ašis
  5. Atvartai -> Y sukimosi ašis
  6. Stabdys -> Z ašis
  7. Pavaros -> mygtukas 0

Kai pavara nuleista, pirmasis vairasvirtės mygtukas turi būti paspaustas ir bus atleistas pakeliant pavarą. Tačiau tam reikės FSUIPC, skirto FSX, iš dėžutės, FSX priims tik mygtuką, skirtą perjungti pavarą, o tai ne visai vyksta su mano modeliais.

Pateikiau savo dabartinę kodo versiją su daugybe komentarų, o tai man puikiai tinka - nedvejodami pakeiskite užduotį arba pridėkite naujų funkcijų. Paskutiniai 9 RC kanalai šiuo metu nenaudojami.

Norint atlikti sąranką, reikia inicijuoti „Joystick“klasę, iš esmės apibrėžiant skaitinių ašių diapazonus:

/ * Nustatyti ašių diapazoną (apibrėžta antraštėje, 0 - 1000) */

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

Naudojant vertes nuo 0 iki 1000, galima tiesiogiai susieti impulsų ilgį (600 - 1600µs) į vairasvirtės vertes, nepakeičiant mastelio.

DIN 3 inicijuojamas kaip skaitmeninis įėjimas, įjungiami prisitraukimai ir pridedamas pertraukimas:

pinMode (PPM_PIN, INPUT_PULLUP);

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

Derinimo tikslais reguliariai pridėjau keletą spaudinių per serijinę sąsają, naudodamas „arduino-timer“biblioteką:

jei (SERIAL_PRINT_INTERVAL> 0) {

planuotojas.kiekvienas (SERIAL_PRINT_INTERVAL, (void*) -> bool {SerialPrintChannels (); return true;}); }

Smeigtuko pertraukimas bus iškviestas, kai pasikeis smeigtuko loginė vertė, taigi kiekvienam PPM signalo kraštui. Įvertinkite impulsų ilgį paprastu laiku, naudodami mikroskopus ():

uint32_t curTime = micros ();

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

Įvertinus dabartinę kaiščio būseną ir derinant ją su impulsų ilgiu ir praeities impulsais, galima klasifikuoti naujus impulsus. Toliau nurodyta sąlyga aptiks tarprėmių spragą:

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

Vėlesniems impulsams impulsų ilgis bus susietas su ašies būsena, nukirpiant ir pakreipiant impulsų ilgį, kad jis atitiktų vairasvirtės ašies diapazoną:

uint16_t rxLength = pulseLength;

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

„RxChannels“masyve galiausiai yra 16 reikšmių nuo 0 iki 1000, nurodančių lazdos / slankiklio ir mygtukų padėtį.

Gavus 16 kanalų, kartografavimas prie vairasvirtės atliekamas:

/ * ašys */

Joystick.setThrottle (kanalai [0]); Joystick.setXAxis (kanalai [1]); Joystick.setYAxis (1000 kanalų [2]); Joystick.setRxAxis (kanalai [3]); Joystick.setRyAxis (kanalai [4]); Joystick.setZAxis (1000 kanalų [5]); / * mygtukai */ Joystick.setButton (0, (kanalai [6] <500? 1: 0)); / * atnaujinti duomenis per USB */ Joystick.sendState ();

Aš apverčiau kai kurias kodo ašis, o tai nėra absoliučiai būtina, nes ašį taip pat galima apversti apverčiant servo kryptį arba priskiriant FSX. Tačiau nusprendžiau išlaikyti servo nurodymus ir originalią FSX užduotį.

Mygtukas įjungiamas arba išjungiamas 7 kanalo slenksčiu.

Ir nepamirškite pažymėti tvarkaraščio … kitaip nebus rodomi jokie derinimo atspaudai.

void loop () {

planuotojas.tick (); }

Mano pridėtoje ekrano kopijoje galite pamatyti, kad 1 kanalas buvo perkeltas iš 1000 (visas droselis) į 0 (tuščiąja eiga).

„FSX“aptiks „Arduino“kaip ir bet kuri kita vairasvirtė, todėl tiesiog priskirkite mygtuką ir ašis ir smagiai pakilkite!

Man labai patinka šis požiūris, jūs galite tiesiog naudoti savo siųstuvą kaip su tikru modeliu, pvz. naudojant skrydžio fazes ir pan.

Rekomenduojamas: