Sisukord:
- Tarvikud
- Samm: ühendage RX ja Arduino
- 2. samm: mõnede PPM -signaalide hankimine
- 3. samm: saatja seadistamine
- Samm: juhtkangi käivitamine
- Samm: Arduino kodeerimine
Video: Arduino -põhine (JETI) PPM -USB juhtkangi muundur FSX -i jaoks: 5 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:46
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
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
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
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 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
Mis veel puudu on, on PPM -signaali tegelik parsimine ning juhtnupu telgedele ja nuppudele omistamine. Otsustasin järgmise kaardistamise:
Kanali / funktsiooni / juhtkangi määramine:
- Drossel -> Drosseli telg
- Siiber -> X -telg
- Lift -> Y -telg
- Rool -> X pöörlemistelg
- Klapid -> Y pöörlemistelg
- Pidur -> Z -telg
- 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:
Arduino klaviatuuri juhtkangi pikenduskast ja helikontrolleri asi Deej abil: 8 sammu
Arduino klaviatuuri juhtkangide pikenduskast ja helikontroller, kasutades Deejat: miks Ma olen mõnda aega tahtnud klaviatuurile lisada väikese juhtkangi liideseelementide juhtimiseks või muid väiksemaid ülesandeid mängudes ja simulaatorites (MS Flight Sim, Elite: Dangerous, Tähesõjad: eskadronid jne). Samuti olen Elite: Dangerous jaoks olnud
Robotikäe juhtimine TLV493D, juhtkangi ja Arduino abil: 3 sammu
Robotikäe juhtimine TLV493D, juhtkangi ja Arduino abil: alternatiivne kontroller teie robotile TLV493D anduriga, 3 vabadusastmega (x, y, z) magnetandur, millega saate oma uusi projekte juhtida oma I2C -side abil mikrokontrollerid ja elektrooniline plaat, mis Bast P
Kuidas juhtida BLDC mootorit Arduino ja juhtkangi abil: 6 sammu
Kuidas juhtida BLDC mootorit Arduino ja juhtkangi abil: Tere sõbrad selles õpetuses, ma näitan teile, kuidas juhtida harjadeta alalisvoolumootorit ehk BLDC mootorit Arduino ja juhtkangi abil
Arduino tekst kõneks muundur, kasutades LM386 - Rääkiva Arduino projekt - Talkie Arduino raamatukogu: 5 sammu
Arduino tekst kõneks muundur, kasutades LM386 | Rääkiva Arduino projekt | Talkie Arduino raamatukogu: Tere poisid, paljudes projektides nõuame, et arduino räägiks midagi, nagu rääkiv kell või mõningaid andmeid, nii et need juhised muudame teksti kõneks Arduino abil
Kasutage 1 analoogsisendit 6 nupu jaoks Arduino jaoks: 6 sammu
Kasutage Arduino jaoks kuue nupu jaoks ühte analoogsisendit: olen sageli mõelnud, kuidas saaksin oma Arduino jaoks rohkem digitaalseid sisendeid. Hiljuti tuli mulle pähe, et peaksin saama kasutada ühte analoogsisendit mitme digitaalse sisendi toomiseks. Otsisin kiiresti ja leidsin, kus inimesed asuvad