Sadržaj:
Video: Arduino bazirani (JETI) PPM na USB Joystick pretvarač za FSX: 5 koraka
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
Odlučio sam prebaciti svoj odašiljač JETI DC-16 iz načina 2 u način rada 1, koji u osnovi prebacuje leptir za gas i dizalo s lijeva na desno i obrnuto. Budući da nisam htio srušiti jedan od svojih modela zbog neke zabune lijevo/desno u mozgu, pitao sam se je li moguće malo vježbati u FSX -u.
Pročitao sam i testirao JETI odašiljače koji uistinu podržavaju Joystick način rada, ali sam želio potpunu fleksibilnost za dodjelu osi i prekidača te koristiti TX kao sa pravim modelom. Korištenjem izlaza prijemnika, također je moguće poboljšati obradu signala u DC-16 i koristiti miksere, faze leta, dvostruke brzine, sve što tamo možete programirati.
Nedavno sam pronašao lijep vodič o tome kako napraviti USB HID ulazni uređaj, naime joystick, od jeftinog Arduina poput Pro Micro -a:
www.instructables.com/id/Create-a-Joystick…
To bi omogućilo sve potrebno za upravljanje avionom / helikopterom / bilo čime u FSX -u! Dostupno je puno sjekira i gumba.
Budući da sam upravo imao rezervni JETI RSAT2, odlučio sam ga povezati s Arduinom i pokušati implementirati mali PPM parser zajedno s Joystick knjižnicom.
Pretpostavljam da je netko slijedeći ove korake upoznat s povezivanjem i programiranjem Arduina. Ne preuzimam nikakva jamstva za kvarove ili oštećenja!
Pribor
Trebat će vam…
- bilo koji Arduino podržan od Joystick knjižnice, koristio sam Sparkfun Pro Micro 5V / 16 MHz
- novija verzija Arduino IDE -a
- bilo koji RC prijemnik koji emitira PPM signal, poput JETI RSAT2
- nekoliko kratkospojnih žica (min. 3)
- knjižnica Joystick instalirana u Arduino IDE -u
- biblioteka arduino-timera:
Korak 1: Povežite RX i Arduino
Ožičenje je prilično jednostavno. Odlučio sam napajati Arduino samo s USB -a jer će oponašati Joystick uređaj. To će Arduino napajati s 5 V, koje se može koristiti i za napajanje RC prijemnika.
Koristio sam Pin VCC, koji osigurava regulirani izlaz, i najbliži Gnd pin - samo ga spojite na PPM konektor + i - pinove. Kad se Arduino napaja, sada se uključuje i prijemnik.
Za PPM signal odlučio sam upotrijebiti prekide za njihovu analizu. Dostupni su prekidi, npr. na Pin 3, pa ga samo spojite tamo - nema "izvornog RC pina" na arduinu, već moguće više i različitih načina čitanja signala prijemnika.
Morao sam onemogućiti alarm napona RX, jer će VCC napon s USB napajanjem biti samo oko 4,5 V - ali prilično stabilan, tako da nema problema.
Korak 2: Dobivanje nekih PPM signala
Kad se prijemnik I TX napajaju, dobivao sam PPM signale kao što je prikazano na slici. 16 kanala, koji se ponavljaju zauvijek. Ako je Failsafe na RSAT -u onemogućen i odašiljač isključen, PPM izlaz će biti onemogućen.
Više informacija o PPM -u dostupno je ovdje:
- https://en.wikipedia.org/wiki/Pulse-position_modul…
- https://wiki.rc-network.de/index.php/PPM
Budući da u ovom slučaju ne letim pravim stvarima, nije me bilo briga za teoretsko vrijeme i samo sam na osciloskopu shvatio što je moj prijemnik aktualno odašiljao pri pomicanju palica s lijeva na potpuno desno (standardne postavke u TX -u). Činilo se da -100% odgovara impulsima duljine 600 µs i +100% do 1600 µs. Također me nije zanimala duljina impulsa pauze (400 μs) u mom Arduino kodu, ali sam pretpostavio razmak okvira od min. 3000µs.
Korak 3: Konfiguriranje odašiljača
Budući da je potrebno znati samo stvarni položaj upravljačkih površina, dovoljan je jedan kanal / "servo" po RC funkciji. Slijedom toga, može se napraviti prilično jednostavno postavljanje odašiljača - slično uobičajenom modelu daljinskog upravljača. Glavne funkcije elerona, dizala, kormila i gasa zahtijevaju samo jedan servo odnosno kanal odašiljača. Dodao sam i zaklopke, kočnice i zupčanike, ostavljajući do sada slobodnih 9 kanala. Imajte na umu da su zakrilca stavljena u fazu leta i da se njima ne upravlja izravno pomoću štapa, klizača ili gumba.
Korak 4: Pokretanje joysticka
Knjižnica Joystick prilično je jednostavna za korištenje i nudi neke primjere i testove. Bilo bi korisno prvo provjeriti je li Arduino otkriven kao ispravna joystick, upute povezane u odjeljku za unos i sama knjižnica pružaju neke dobre smjernice.
Na upravljačkoj ploči Uređaji i pisači, Arduino se pojavljivao kao "Sparkfun Pro Micro", a prozor za provjeru upravljačke palice pokazivao je 7 osi i puno podržanih gumba. Čak se i prekidač za šešir može koristiti kada je programiran u Arduinu.
Korak 5: Kodiranje Arduina
Ono što još nedostaje je stvarno raščlanjivanje PPM signala i dodjela osovinama i gumbima Joystick -a. Odlučio sam se za sljedeće mapiranje:
Dodjela kanala / funkcije / džojstika:
- Prigušivač -> Os leptira za gas
- Eleron -> X os
- Dizalo -> Y os
- Kormilo -> os rotacije X
- Klapne -> os rotacije Y
- Kočnica -> os Z
- Gear -> Gumb 0
Kad je stupanj prijenosa spušten, pritisnuti će se prva tipka upravljačke palice i otpustit će se pri podizanju stupnja prijenosa. Međutim, to će zahtijevati FSUIPC za FSX, izvan kutije, FSX će prihvatiti samo gumb za prebacivanje stupnja prijenosa, što se baš ne događa s mojim modelima.
Svojoj trenutnoj verziji koda dao sam puno komentara, što mi jako dobro odgovara - slobodno promijenite svoj zadatak ili dodajte nove funkcije. Posljednjih 9 RC kanala trenutno se ne koriste.
Za postavljanje klasu Joystick potrebno je inicijalizirati, u osnovi definiranjem numeričkih raspona osi:
/ * Postavi raspon osi (definirano u zaglavlju, 0 - 1000) */
Joystick.setXAxisRange (CHANNEL_MIN, CHANNEL_MAX); Joystick.setYAxisRange (CHANNEL_MIN, CHANNEL_MAX); …
Korištenjem vrijednosti od 0 do 1000, moguće je izravno preslikati duljinu impulsa (600 - 1600µs) na vrijednosti upravljačke palice bez promjene veličine.
DIN 3 je inicijaliziran kao digitalni ulaz, omogućeno podizanje i priključen prekid:
pinMode (PPM_PIN, INPUT_PULLUP);
attachInterrupt (digitalPinToInterrupt (PPM_PIN), PPM_Pin_Changed, CHANGE);
U svrhu otklanjanja pogrešaka, dodao sam neke ispise putem serijskog sučelja u redovitim intervalima, koristeći biblioteku arduino-timera:
ako (SERIAL_PRINT_INTERVAL> 0) {
Scheduler.every (SERIAL_PRINT_INTERVAL, (void*) -> bool {SerialPrintChannels (); return true;}); }
Prekid pina bit će pozvan kad god se promijeni logička vrijednost pina, dakle za svaki rub u PPM signalu. Procijenite duljinu impulsa jednostavnim vremenskim određivanjem pomoću micros ():
uint32_t curTime = mikros ();
uint32_t pulseLength = curTime - edgeTime; uint8_t curState = digitalno čitanje (PPM_PIN);
Procjenom trenutnog stanja pina i kombiniranjem s duljinom impulsa i prošlim impulsima, novi se impulsi mogu klasificirati. Sljedeći uvjetni će otkriti međukapacni jaz:
if (lastState == 0 && pulseLength> 3000 && pulseLength <6000)
Za sljedeće impulse, duljina impulsa bit će preslikana u stanje osi izrezivanjem i podešavanjem duljine impulsa kako bi odgovarala rasponu osi upravljačke palice:
uint16_t rxLength = pulsLength;
rxLength = (rxLength> 1600)? 1600: rxLength; rxLength = (rxLength <600)? 600: rxLength; rxChannels [curChannel] = rxDužina - 600;
Niz rxChannels na kraju sadrži 16 vrijednosti od 0 - 1000, što ukazuje na položaj palica / klizača i gumba.
Nakon primanja 16 kanala, vrši se preslikavanje na joystick:
/ * osi */
Joystick.setThrottle (kanali [0]); Joystick.setXAxis (kanali [1]); Joystick.setYAxis (1000 - kanala [2]); Joystick.setRxAxis (kanali [3]); Joystick.setRyAxis (kanali [4]); Joystick.setZAxis (1000 - kanala [5]); / * tipke */ Joystick.setButton (0, (kanali [6] <500? 1: 0)); / * ažurirati podatke putem USB -a/ Joystick.sendState ();
Okrenuo sam neke osi u kodu, što apsolutno nije potrebno, budući da se os može obrnuti i okretanjem servo smjera ili dodjelom u FSX -u. Ipak, odlučio sam zadržati servo upute, ali i izvornu dodjelu FSX -a.
Gumb se uključuje ili isključuje pragom kanala 7.
I ne zaboravite označiti raspoređivač … u protivnom neće biti vidljivi ispisi za ispravljanje pogrešaka.
void loop () {{100} {101}
raspoređivač.tick (); }
Na snimci zaslona koju sam priložio možete vidjeti da je kanal 1 premješten sa 1000 (pun gas) na 0 (u praznom hodu).
FSX će otkriti Arduino kao i svaki drugi joystick, pa samo dodijelite gumb i osi i zabavite se uzlijećući!
Ono što mi se jako sviđa kod ovog pristupa je, možete jednostavno koristiti svoj odašiljač kao sa pravim modelom, npr. pomoću faza leta itd.