Sisällysluettelo:
- Tarvikkeet
- Vaihe 1: Yhdistä RX ja Arduino
- Vaihe 2: Hanki joitain PPM -signaaleja
- Vaihe 3: Lähettimen asetukset
- Vaihe 4: Ohjaussauvan käyttäminen
- Vaihe 5: Arduinon koodaus
Video: Arduino -pohjainen (JETI) PPM -USB -joystick -muunnin FSX: 5 askelta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:00
Päätin vaihtaa JETI DC-16 -lähettimeni tilasta 2 tilaan 1, joka periaatteessa vaihtaa kaasun ja hissin vasemmalta oikealle ja päinvastoin. Koska en halunnut kaataa yhtä malleistani aivoni vasemman/oikean sekaannuksen vuoksi, mietin, onko mahdollista harjoitella hieman FSX: ssä.
Luin ja testasin, että JETI -lähettimet todella tukevat joystick -tilaa pakkauksesta, mutta halusin täyden joustavuuden akseleihin ja kytkimiin ja käyttää TX: tä kuten todellisessa mallissa. Käyttämällä vastaanottimen lähtöä on myös mahdollista hyödyntää DC-16: n signaalinkäsittelyä ja käyttää sekoittimia, lentovaiheita, kaksoisnopeuksia, mitä tahansa ohjelmoida siellä.
Äskettäin löysin mukavan opetusohjelman siitä, kuinka tehdä USB HID -laite, nimittäin ohjaussauva, halvasta Arduinosta, kuten Pro Micro:
www.instructables.com/id/Create-a-Joystick…
Tämä mahdollistaisi kaiken tarvittavan lentokoneen / helikopterin tai mitä tahansa FSX: n ohjaamiseen! Paljon akseleita ja painikkeita.
Koska minulla oli juuri ylimääräinen JETI RSAT2, päätin yhdistää sen Arduinon kanssa ja yrittää ottaa käyttöön pienen PPM -jäsennyksen Joystick -kirjaston kanssa.
Oletan, että joku, joka seuraa näitä vaiheita, tuntee Arduinon yhdistämisen ja ohjelmoinnin. En ota vastuuta toimintahäiriöistä tai vahingoista!
Tarvikkeet
Tarvitset…
- mitä tahansa Arduinoa, jota Joystick -kirjasto tukee, käytin Sparkfun Pro Micro 5V / 16 MHz
- Arduino IDE: n uusin versio
- mikä tahansa RC -vastaanotin, joka lähettää PPM -signaalin, kuten JETI RSAT2
- muutama hyppyjohdin (min. 3)
- joystick -kirjasto, joka on asennettu Arduino IDE: hen
- arduino-ajastinkirjasto:
Vaihe 1: Yhdistä RX ja Arduino
Johdotus on melko suoraviivaista. Päätin käyttää Arduinoa vain USB: stä, koska se jäljittelee ohjaussauvaa. Tämä syöttää Arduinolle 5 V: n jännitteen, jota voidaan käyttää myös RC -vastaanottimen virransyöttöön.
Käytin Pin VCC: tä, joka tarjoaa säädetyn lähdön, ja lähimmän Gnd -nastan - liitä se vain PPM: n liittimeen + ja - nastat. Kun Arduino saa virtaa, myös vastaanotin käynnistyy.
PPM -signaalin osalta päätin käyttää keskeytyksiä jäsentämään ne. Keskeytyksiä on saatavilla mm. nasta 3, joten kytke se vain sinne - arduinossa ei ole "alkuperäistä RC -nastaista", mutta mahdollisesti enemmän ja erilaisia tapoja lukea vastaanottimen signaali.
Minun oli poistettava RX -jännitehälytys käytöstä, koska VCC -jännite USB -liitännällä on vain noin 4,5 V - mutta melko vakaa, joten ei mitään ongelmaa.
Vaihe 2: Hanki joitain PPM -signaaleja
Kun vastaanotin JA TX on päällä, sain PPM -signaaleja, kuten kuvassa näkyy. 16 kanavaa, toistetaan ikuisesti. Jos RSAT -järjestelmän vikasuojaus on poistettu käytöstä ja lähetin on sammutettu, PPM -lähtö poistetaan käytöstä.
Lisätietoja PPM: stä löytyy täältä:
- https://en.wikipedia.org/wiki/Pulse-position_modul…
- https://wiki.rc-network.de/index.php/PPM
Koska en lentä todellista tavaraa tässä tapauksessa, en välittänyt teoreettisista ajoituksista ja tajusin vain oskilloskoopilla, mitä vastaanottimeni lähetti, kun tikkuja siirrettiin täysin vasemmalta oikealle (TX: n vakioasetukset). Näytti siltä, että -100% vastaa pulsseja, joiden pituus on 600 µs, ja +100% -1600 µs. En myöskään välittänyt taukopulssien pituudesta (400 µs) Arduino -koodissani, mutta oletin, että kehysväli on min. 3000 µs.
Vaihe 3: Lähettimen asetukset
Koska vain ohjauspintojen todellinen sijainti on tiedettävä, yksi kanava / "servo" per RC -toiminto riittää. Näin ollen voidaan tehdä melko yksinkertainen lähettimen asennus - samanlainen kuin tavallinen RC -malli. Päätoiminnot siipi, hissi, peräsin ja kaasu edellyttävät vain yhtä servoa vastaavasti lähettimen kanavaa. Lisäsin myös läppiä, jarruja ja vaihteita jättäen tähän mennessä yhdeksän kanavaa vapaaksi. Huomaa, että läpät asetettiin lentovaiheeseen, eikä niitä ohjata suoraan tikulla, liukusäätimellä tai painikkeella.
Vaihe 4: Ohjaussauvan käyttäminen
Joystick -kirjasto on melko helppokäyttöinen, ja se sisältää esimerkkejä ja testejä. Olisi hyödyllistä tarkistaa ensin, onko Arduino todettu oikeaksi joystickiksi, onko syöttöosioon linkitetyt ohjeet ja kirjasto itse hyviä ohjeita.
Laitteiden ja tulostimien ohjauspaneelissa Arduino näytettiin nimellä "Sparkfun Pro Micro", ja joystickin testiikkuna näytti 7 akselia ja runsaasti tuettuja painikkeita. Jopa hattokytkintä voidaan käyttää, kun se on ohjelmoitu Arduinossa.
Vaihe 5: Arduinon koodaus
Vielä puuttuu PPM -signaalin varsinainen jäsentäminen ja kohdistaminen ohjaussauvan akseleille ja painikkeille. Päätin seuraavan kartoituksen:
Kanava / toiminto / ohjaussauva:
- Kaasu -> Kaasun akseli
- Siipi -> X -akseli
- Hissi -> Y -akseli
- Peräsimet -> X pyörimisakseli
- Läpät -> Y -kiertoakseli
- Jarru -> Z -akseli
- Vaihde -> Painike 0
Kun vaihde on alhaalla, ohjaussauvan ensimmäistä painiketta on painettava ja se vapautetaan vaihdetta nostettaessa. Tämä vaatii kuitenkin FSUIPC for FSX: n.
Annoin koodin nykyiselle versiolleni paljon kommentteja, mikä toimii minulle varsin hyvin - voit muuttaa tehtävääsi tai lisätä uusia toimintoja. Viimeiset 9 RC -kanavaa eivät ole tällä hetkellä käytössä.
Asennusta varten Joystick -luokka on alustettava, pohjimmiltaan määrittämällä numeeriset akselialueet:
/ * Aseta akselialue (määritetty otsikossa, 0-1000) */
Joystick.setXAxisRange (CHANNEL_MIN, CHANNEL_MAX); Joystick.setYAxisRange (CHANNEL_MIN, CHANNEL_MAX); …
Käyttämällä arvoja 0-1000 on mahdollista yhdistää pulssin pituus (600 - 1600µs) suoraan ohjaussauvan arvoihin ilman skaalausta.
DIN 3 alustetaan digitaalitulona, pullupit käytössä ja keskeytys liitettynä:
pinMode (PPM_PIN, INPUT_PULLUP);
attachInterrupt (digitalPinToInterrupt (PPM_PIN), PPM_Pin_Changed, CHANGE);
Virheenkorjausta varten lisäsin joitain tulosteita sarjaliittymän kautta säännöllisin väliajoin käyttämällä arduino-ajastinkirjastoa:
jos (SERIAL_PRINT_INTERVAL> 0) {
ajastin.joka (SERIAL_PRINT_INTERVAL, (void*) -> bool {SerialPrintChannels (); return true;}); }
Tapin keskeytys kutsutaan aina, kun nastan looginen arvo on muuttunut, eli jokaisen PPM -signaalin reunan osalta. Arvioi pulssin pituus yksinkertaisella ajoituksella käyttäen micros ():
uint32_t curTime = micros ();
uint32_t pulseLength = curTime - edgeTime; uint8_t curState = digitalRead (PPM_PIN);
Arvioimalla nykyisen nastan tila ja yhdistämällä se pulssin pituuteen ja aiempiin pulsseihin, uudet pulssit voidaan luokitella. Seuraava ehdollinen tunnistaa kehysten välisen aukon:
if (lastState == 0 && pulseLength> 3000 && pulseLength <6000)
Seuraavia pulsseja varten pulssin pituus kartoitetaan akselitilaan leikkaamalla ja esijännittämällä pulssin pituus ohjaussauvan akselialueeseen sopivaksi:
uint16_t rxLength = pulseLength;
rxLength = (rxLength> 1600)? 1600: rxPituus; rxLength = (rxLength <600)? 600: rxPituus; rxChannels [curChannel] = rxPituus - 600;
RxChannels -taulukko sisältää lopulta 16 arvoa 0-1000, jotka osoittavat tikun / liukusäätimen ja painikkeen sijainnin.
16 kanavan vastaanottamisen jälkeen kartoitetaan ohjaussauvaan:
/ * akselit */
Joystick.setThrottle (kanavat [0]); Joystick.setXAxis (kanavat [1]); Joystick.setYAxis (1000 kanavaa [2]); Joystick.setRxAxis (kanavat [3]); Joystick.setRyAxis (kanavat [4]); Joystick.setZAxis (1000 kanavaa [5]); / * -painikkeet */ Joystick.setButton (0, (kanavat [6] <500? 1: 0)); / * päivitä tiedot USB: n kautta */ Joystick.sendState ();
Käänsin joitain akseleita koodissa, mikä ei ole ehdottoman välttämätöntä, koska akseli voidaan kääntää myös kääntämällä servosuuntaa tai FSX: n osoittamista. Päätin kuitenkin säilyttää servo -ohjeet ja myös alkuperäisen FSX -tehtävän.
Painike kytketään päälle tai pois päältä rajaamalla kanava 7.
Älä myöskään unohda rastittaa ajoitinta… muuten virheenkorjausjälkiä ei näy.
void loop () {
ajastin.tick (); }
Liitetyssä kuvakaappauksessa näet, että kanava 1 siirrettiin 1000: sta (täyskaasu) 0: een (tyhjäkäynti).
FSX tunnistaa Arduinon aivan kuten mikä tahansa muu ohjaussauva, joten määritä vain painike ja akselit ja pidä hauskaa nousussa!
Pidän todella tästä lähestymistavasta, voit käyttää lähetintäsi kuten todellisessa mallissa, esim. käyttämällä lentovaiheita jne.
Suositeltava:
Flash Arduino Bootloader ATMega328: 4 askelta
Flash Arduino Bootloader ATMega328: Questo -opetusohjelma, joka tekee karikatyyreistä Bootloader neljälle casulle cui l'ATmega, esittele su una bord di nostra creazione, sia vergine; tule ad esempio nel caso in cui si vuole realizzare la Drivemall
RG 1/144 Unicorn Gundam käyttäen Arduino Nano ja Attiny85: 10 askelta
RG 1/144 Unicorn Gundam Arduino Nanon ja Attiny85: n avulla: RG Unicorn Gundam on vihdoin valmis. Henkilökohtaisesti monet ideat ja konseptit ovat esitelleet ja todistaneet, mutta todellista tulosta ei kuitenkaan ole todella tyydytetty. Tämä johtuu 1/144 -mallin lisärakenteen vakaudesta, koska se ei ole yhtä hyvä
Ihminen seuraa robottia käyttäen Arduino Unoa alle 20 $: 9 askelta
Ihmisen seuraamisrobotti käyttäen Arduino Unoa alle 20 dollaria: joten tein tämän robotin noin vuosi sitten ja rakastin sitä, että se voi seurata sinua missä ja missä tahansa. tämä on paras vaihtoehto koiralle. se on edelleen kanssani tähän asti. Minulla on myös youtube -kanava, jossa voit nähdä sen tekemisen prosessin vi
Pitkän kantaman Wifi PPM / MSP: 5 vaihetta
Pitkän kantaman Wifi PPM / MSP: Jokin aika sitten lähetin Wifi PPM -ohjaimen. Se toimii aika hyvin. Vain kantama on vähän lyhyt. Löysin ratkaisun tähän ongelmaan. ESP8266 tukee ESPNOW -nimistä tilaa. Tämä tila on paljon matalampi. Yhteys ei katkea, joten
Wifi PPM (sovellusta ei tarvita): 4 vaihetta (kuvilla)
Wifi PPM (ei sovellusta tarvita): Halusin hallita DIY -mikro -sisätilojen nelikopteriani älypuhelimellani, mutta en löytänyt hyvää ratkaisua tähän. Minulla oli muutamia ESP8266 -wifi -moduuleja, joten päätin tehdä oman. Ohjelma käynnistää wifi -tukiaseman HTML -koodilla