Sisukord:

Arduino -põhine (JETI) PPM -USB juhtkangi muundur FSX -i jaoks: 5 sammu
Arduino -põhine (JETI) PPM -USB juhtkangi muundur FSX -i jaoks: 5 sammu

Video: Arduino -põhine (JETI) PPM -USB juhtkangi muundur FSX -i jaoks: 5 sammu

Video: Arduino -põhine (JETI) PPM -USB juhtkangi muundur FSX -i jaoks: 5 sammu
Video: Quicky #29... Wie funktioniert das... Summensignal (PPM) 2024, Juuli
Anonim
Arduino -põhine (JETI) PPM -USB juhtkangi muundur FSX -i jaoks
Arduino -põhine (JETI) PPM -USB juhtkangi muundur FSX -i jaoks
Arduino -põhine (JETI) PPM -USB juhtkangi muundur FSX -i jaoks
Arduino -põhine (JETI) PPM -USB juhtkangi muundur FSX -i jaoks

Otsustasin lülitada oma JETI DC-16 saatja režiimilt 2 režiimile 1, mis põhimõtteliselt lülitab gaasi ja lifti vasakult paremale ja vastupidi. Kuna ma ei tahtnud ajus mõne vasaku/parema segaduse tõttu ühte oma mudelit kokku kukkuda, mõtlesin, kas FSX -is on võimalik natuke harjutada.

Lugesin ja katsetasin, et JETI saatjad toetavad karbist tegelikult juhtkangi režiimi, kuid tahtsin telgede ja lülitite määramiseks täielikku paindlikkust ning kasutada TX -i nagu päris mudelil. Vastuvõtja väljundit kasutades on võimalik kasutada ka signaalitöötlust DC-16-s ja kasutada miksereid, lennufaase, topeltkiirusi, mida iganes saate sinna programmeerida.

Hiljuti leidsin ühe toreda õpetuse, kuidas odavalt Arduino -lt nagu Pro Micro USB HID -sisendseadet, nimelt juhtkangi teha:

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

See võimaldaks kõike, mis on vajalik lennuki / helikopteri või mis tahes juhtimiseks FSX -is! Saadaval on palju telgi ja nuppe.

Kuna mul oli alles varu JETI RSAT2, otsustasin selle Arduinoga ühendada ja proovida koos Joysticki koguga rakendada väikest PPM -i parserit.

Eeldan, et keegi, kes järgib neid samme, tunneb Arduino ühendamist ja programmeerimist. Ma ei võta garantiisid rikete või kahjustuste eest!

Tarvikud

Sa vajad…

  • mis tahes Arduino, mida toetab Joysticki raamatukogu, kasutasin Sparkfun Pro Micro 5V / 16 MHz
  • Arduino IDE uusim versioon
  • mis tahes RC -vastuvõtja, mis väljastab PPM -signaali, näiteks JETI RSAT2
  • mõned hüppajajuhtmed (min. 3)
  • juhtkangi raamatukogu, mis on installitud Arduino IDE -sse
  • arduino-taimeriteek:

Samm: ühendage RX ja Arduino

Ühendage RX ja Arduino
Ühendage RX ja Arduino
Ühendage RX ja Arduino
Ühendage RX ja Arduino

Juhtmestik on üsna lihtne. Otsustasin Arduino toiteks kasutada ainult USB -d, kuna see jäljendab juhtkangi seadet. See varustab Arduino 5V -ga, mida saab kasutada ka RC -vastuvõtja toiteks.

Ma kasutasin Pin VCC -d, mis tagab reguleeritud väljundi, ja lähimat Gnd -tihvti - lihtsalt ühendage see PPM -i pistiku + ja - kontaktidega. Kui Arduino saab toite, lülitub nüüd sisse ka vastuvõtja.

PPM -signaali puhul otsustasin nende analüüsimiseks kasutada katkestusi. Katkestused on saadaval nt. pin 3 juures, nii et lihtsalt ühendage see sinna - arduino'l pole "native RC pin", kuid võib -olla rohkem ja erinevaid viise vastuvõtja signaali lugemiseks.

Pidin RX pingealarmi välja lülitama, kuna VCC pinge USB -toitega on ainult umbes 4,5 V - kuid üsna stabiilne, seega pole probleemi üldse.

2. samm: mõnede PPM -signaalide hankimine

Mõnede PPM -signaalide hankimine
Mõnede PPM -signaalide hankimine
Mõnede PPM -signaalide hankimine
Mõnede PPM -signaalide hankimine

Kui vastuvõtja JA TX on toidetud, sain PPM -signaale, nagu pildil näidatud. 16 kanalit, korduvad igavesti. Kui RSAT -i tõrketeade on keelatud ja saatja välja lülitatud, keelatakse PPM -väljund.

Lisateavet PPM -i kohta leiate siit:

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

Kuna ma sel juhul päris asju ei lenda, ei hoolinud ma teoreetilisest ajastamisest ja arvasin lihtsalt ostsilloskoobil välja, mida mu vastuvõtja täpselt väljastas, kui pulgad täielikult vasakult paremale liigutada (TX -i standardseaded). Tundus, et -100% vastab impulssidele pikkusega 600 µs ja +100% kuni 1600 µs. Ma ei hoolinud ka oma Arduino koodi pausiimpulsside pikkusest (400 µs), kuid eeldasin, et kaadritevahe on min. 3000 µs.

3. samm: saatja seadistamine

Saatja seadistamine
Saatja seadistamine
Saatja seadistamine
Saatja seadistamine
Saatja seadistamine
Saatja seadistamine

Kuna teada on vaja ainult juhtpindade tegelikku asukohta, piisab ühest kanalist / servost RC funktsiooni kohta. Järelikult saab teha üsna lihtsa saatja seadistuse - sarnaselt tavalise RC mudeliga. Põhifunktsioonid: eleroon, lift, rool ja gaasiklapp vajavad kumbki ainult ühte servokanalit. Lisasin ka klapid, pidurid ja käigu, jättes seni 9 kanalit vabaks. Pange tähele, et klapid pandi lennufaasi ja neid ei juhita otse pulga, liuguri ega nupu abil.

Samm: juhtkangi käivitamine

Joysticki juhtimine
Joysticki juhtimine
Joysticki juhtimine
Joysticki juhtimine

Joysticki raamatukogu on üsna lihtne kasutada ning see sisaldab mõningaid näiteid ja teste. Esmalt peaks olema kasulik kontrollida, kas Arduino on tuvastatud õige juhtkangina, kas sisenemisjaos lingitud juhised ja raamatukogu ise annavad häid juhiseid.

Seadmete ja printerite juhtpaneelil oli Arduino kuvatud kui "Sparkfun Pro Micro" ja juhtkangi testiaknas oli 7 telge ja palju toetatud nuppe. Arduino programmeerimisel saab kasutada isegi mütsilülitit.

Samm: Arduino kodeerimine

Arduino kodeerimine
Arduino kodeerimine
Arduino kodeerimine
Arduino kodeerimine

Mis veel puudu on, on PPM -signaali tegelik parsimine ning juhtnupu telgedele ja nuppudele omistamine. Otsustasin järgmise kaardistamise:

Kanali / funktsiooni / juhtkangi määramine:

  1. Drossel -> Drosseli telg
  2. Siiber -> X -telg
  3. Lift -> Y -telg
  4. Rool -> X pöörlemistelg
  5. Klapid -> Y pöörlemistelg
  6. Pidur -> Z -telg
  7. Käik -> Nupp 0

Kui käik on maas, tuleb juhthoova esimest nuppu vajutada ja see vabastatakse käigu tõstmisel. Kuid selleks on vaja FSX -i jaoks FSUIPC -d, karbist välja, FSX võtab vastu ainult käiguvahetuse nupu, mis pole täpselt minu mudelitega toimuv.

Esitasin oma praeguse koodi versiooni paljude kommentaaridega, mis minu jaoks töötab üsna hästi - muutke julgelt oma ülesannet või lisage uusi funktsioone. Viimast 9 RC kanalit ei kasutata praegu.

Seadistamiseks tuleb juhtkangi klass lähtestada, määratledes põhimõtteliselt numbritelgede vahemikud:

/ * Telgede vahemiku määramine (päises määratletud, 0 - 1000) */

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

Kasutades väärtusi 0 kuni 1000, on võimalik impulsipikkus (600 - 1600 µs) otse kaardistada juhtkangi väärtustega ilma skaleerimata.

DIN 3 lähtestatakse digitaalsisendina, pullupid on lubatud ja katkestus on lisatud:

pinMode (PPM_PIN, INPUT_PULLUP);

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

Silumise eesmärgil lisasin arduino-taimer raamatukogu kasutades regulaarsete intervallide järel mõned väljatrükid jadaliidese kaudu:

kui (SERIAL_PRINT_INTERVAL> 0) {

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

Tihvti katkestust kutsutakse alati, kui tihvti loogiline väärtus on muutunud, nii PPM -signaali iga serva puhul. Hinnake impulsi pikkust lihtsa ajastuse abil, kasutades mikros ():

uint32_t curTime = micros ();

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

Hinnates praeguse tihvti olekut ja kombineerides selle impulsi pikkuse ja varasemate impulssidega, saab uued impulsid klassifitseerida. Järgmine tingimus tuvastab kaadritevahelise tühiku:

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

Järgmiste impulsside korral kaardistatakse impulsi pikkus telje olekusse, kärpides ja kallutades impulsi pikkust, et see vastaks juhtkangi teljevahemikule:

uint16_t rxLength = pulseLength;

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

Massiiv rxChannels sisaldab lõpuks 16 väärtust vahemikus 0–1000, mis näitab pulga / liuguri ja nupu asukohti.

Pärast 16 kanali vastuvõtmist teostatakse juhtkangi kaardistamine:

/ * teljed */

Joystick.setThrottle (kanalid [0]); Joystick.setXAxis (kanalid [1]); Joystick.setYAxis (1000 - kanalit [2]); Joystick.setRxAxis (kanalid [3]); Joystick.setRyAxis (kanalid [4]); Joystick.setZAxis (1000 - kanalit [5]); / * nupud */ Joystick.setButton (0, (kanalid [6] <500? 1: 0)); / * värskenda andmeid USB kaudu */ Joystick.sendState ();

Ma pöörasin koodis mõned teljed ümber, mis pole absoluutselt vajalik, kuna telge saab pöörata ka servo suuna pööramise või FSX -i määramise abil. Siiski otsustasin säilitada servo juhised ja ka esialgse FSX -i ülesande.

Nupp lülitatakse sisse või välja kanali 7 lävepakuga.

Ja ärge unustage ajakava märkida … vastasel juhul pole silumisprindid nähtavad.

void loop () {

ajakava.tick (); }

Lisatud ekraanipildil näete, et kanal 1 viidi 1000 -lt (täisgaas) 0 -le (jõude).

FSX tuvastab Arduino täpselt nagu iga teine juhtkang, nii et määrake lihtsalt nupp ja teljed ning nautige õhkutõusmist!

Mis mulle selle lähenemise juures väga meeldib, saate oma saatjat lihtsalt kasutada nagu päris mudeliga, nt. lennufaaside kasutamine jne.

Soovitan: