INHOUDSOPGAWE:
- Voorrade
- Stap 1: Draai die RX en die Arduino op
- Stap 2: Kry 'n paar PPM -seine
- Stap 3: Stel die sender in
- Stap 4: Draai die joystick
- Stap 5: Kodering van die Arduino
Video: Arduino -gebaseerde (JETI) PPM na USB -joystick -omskakelaar vir FSX: 5 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:24
Ek het besluit om my JETI DC-16-sender van modus 2 na modus 1 oor te skakel, wat basies Throttle en Elevator van links na regs skakel en omgekeerd. Aangesien ek nie een van my modelle wou neerstort as gevolg van verwarring in my brein links/regs nie, het ek gewonder of dit moontlik is om 'n bietjie in FSX te oefen.
Ek het gelees en getoets dat die JETI -senders eintlik 'n joystick -modus uit die boks ondersteun, maar ek wou volle buigsaamheid vir die asse en skakelaaropdragte hê en die TX gebruik soos met 'n regte model. Deur die uitvoer van die ontvanger te gebruik, is dit ook moontlik om die seinverwerking in die DC-16 te benut en mengers, vlugfases, dubbele snelhede te gebruik, wat u ook al daar kan programmeer.
Onlangs het ek 'n goeie handleiding gevind oor hoe om 'n USB HID -invoertoestel, naamlik 'n joystick, uit 'n goedkoop Arduino soos 'n Pro Micro te maak:
www.instructables.com/id/Create-a-Joystick…
Dit sou alles moontlik maak om 'n vliegtuig / helikopter / wat ook al in FSX te beheer! Baie asse en knoppies beskikbaar.
Aangesien ek net 'n ekstra JETI RSAT2 gehad het, het ek besluit om dit saam met die Arduino aan te sluit en 'n klein PPM -ontleder saam met die joystick -biblioteek te probeer implementeer.
Ek neem aan dat iemand wat hierdie stappe volg, vertroud is met die koppeling en programmering van 'n Arduino. Ek neem geen waarborg vir foute of skade nie!
Voorrade
Jy sal nodig hê…
- enige Arduino wat deur die Joystick -biblioteek ondersteun word, het ek 'n Sparkfun Pro Micro 5V / 16 MHz gebruik
- 'n onlangse weergawe van die Arduino IDE
- enige RC -ontvanger wat 'n PPM -sein uitstuur, soos die JETI RSAT2
- 'n paar springdrade (min. 3)
- die joystick -biblioteek geïnstalleer in die Arduino IDE
- die arduino-timer biblioteek:
Stap 1: Draai die RX en die Arduino op
Die bedrading is redelik eenvoudig. Ek het besluit om die Arduino slegs via USB aan te dryf, aangesien dit 'n joystick -toestel sal naboots. Dit sal die Arduino van 5V voorsien, wat ook gebruik kan word vir die voeding van die RC -ontvanger.
Ek gebruik die Pin VCC, wat gereguleerde uitset bied, en die naaste Gnd -pen - koppel dit net aan die PPM se connector + en - pins. As die Arduino aangeskakel word, skakel die ontvanger ook aan.
Vir die PPM -sein het ek besluit om onderbrekings te gebruik om dit te ontleed. Onderbrekings is beskikbaar bv. by Pin 3, koppel dit net daar aan - daar is geen 'native RC pin' op die arduino nie, maar moontlik meer en verskillende maniere om die ontvanger sein in te lees.
Ek moes die RX -spanningsalarm deaktiveer, aangesien die VCC -spanning met USB -toevoer slegs ongeveer 4,5V sal wees - maar redelik stabiel, dus geen probleem nie.
Stap 2: Kry 'n paar PPM -seine
As die ontvanger EN die TX aangeskakel is, kry ek PPM -seine soos in die prentjie getoon. 16 kanale, vir ewig herhaal. As Failsafe op die RSAT gedeaktiveer is en die sender afgeskakel is, word PPM -uitset gedeaktiveer.
Meer inligting oor PPM is hier beskikbaar:
- https://en.wikipedia.org/wiki/Pulse-position_modul…
- https://wiki.rc-network.de/index.php/PPM
Aangesien ek in hierdie geval nie met regte dinge vlieg nie, het ek nie omgee vir die teoretiese tydsberekening nie, maar net op die ossilloskoop agtergekom wat my ontvanger akuut uitvoer wanneer ek die stokke van heeltemal links na regs skuif (standaardinstellings in die TX). Dit het gelyk asof -100% ooreenstem met pulse met 'n lengte van 600µs en +100% tot 1600µs. Ek het ook nie omgegee vir die lengte van die pouse -pulse (400µs) in my Arduino -kode nie, maar ek het 'n raamafstand van min aanvaar. 3000µs.
Stap 3: Stel die sender in
Aangesien slegs die werklike posisie van die bedieningsoppervlakke bekend moet wees, is een kanaal / "servo" per RC -funksie voldoende. Gevolglik kan 'n redelik eenvoudige senderopstelling gemaak word - soortgelyk aan 'n normale RC -model. Die hooffunksies rolstoel, hysbak, roer en versneller benodig elk slegs een onderskeidelik servokanaalkanaal. Ek het ook kleppe, remme en rat bygevoeg, en ek het tot dusver 9 kanale vrygelaat. Let daarop dat kleppe in 'n vlugfase geplaas is en nie direk met 'n stok, skuifknop of knoppie beheer word nie.
Stap 4: Draai die joystick
Die joystick -biblioteek is redelik maklik om te gebruik en bied voorbeelde en toetse. Dit moet handig wees om eers te kyk of die Arduino as die regte joystick opgespoor word, die instruksies wat in die inskrywingsgedeelte en die biblioteek self gekoppel is, goeie leiding gee.
Op die bedieningspaneel van toestelle en drukkers verskyn die Arduino as 'Sparkfun Pro Micro', en die joystick -toetsvenster toon 7 asse en baie ondersteunde knoppies. Selfs 'n hoedskakelaar kan gebruik word as dit in die Arduino geprogrammeer word.
Stap 5: Kodering van die Arduino
Wat nog ontbreek, is die werklike ontleding van die PPM -sein en die toewysing aan die joystick -asse en -knoppies. Ek het besluit vir die volgende kartering:
Kanaal / funksie / joystick -opdrag:
- Gaspedaal -> Gaspedaalas
- Aileron -> X -as
- Hysbak -> Y -as
- Roer -> X rotasie -as
- Klappe -> Y rotasie -as
- Rem -> Z -as
- Toerusting -> Knoppie 0
As die rat af is, word die eerste knoppie van die joystick ingedruk en sal dit losgelaat word wanneer die rat gehys word. Dit vereis egter FSUIPC vir FSX, maar FSX aanvaar net 'n knoppie om die rat te skakel, wat nie presies gebeur met my modelle nie.
Ek het baie kommentaar op my huidige weergawe van die kode gegee, wat vir my baie goed werk - verander gerus u opdrag of voeg nuwe funksies by. Die laaste 9 RC -kanale word tans nie gebruik nie.
Vir die opstelling moet die joystick -klas geïnisialiseer word, basies deur die numeriese asreeks te definieer:
/ * Stel asbereik (gedefinieer in die kop, 0 - 1000) */
Joystick.setXAxisRange (CHANNEL_MIN, CHANNEL_MAX); Joystick.setYAxisRange (CHANNEL_MIN, CHANNEL_MAX); …
Deur waardes van 0 tot 1000 te gebruik, is dit moontlik om die polslengte (600 - 1600µs) direk aan die joystick -waardes te koppel sonder om te herskaal.
Die DIN 3 word geïnisialiseer as digitale invoer, pullups geaktiveer en 'n onderbreking aangeheg:
pinMode (PPM_PIN, INPUT_PULLUP);
attachInterrupt (digitalPinToInterrupt (PPM_PIN), PPM_Pin_Changed, CHANGE);
Vir ontfoutingsdoeleindes het ek gereeld afdrukke bygevoeg via die seriële koppelvlak met behulp van die arduino-timer biblioteek:
as (SERIAL_PRINT_INTERVAL> 0) {
scheduler.every (SERIAL_PRINT_INTERVAL, (void*) -> bool {SerialPrintChannels (); return true;}); }
Die onderbreking van die pen sal gebel word wanneer die logiese waarde van die pen verander het, dus vir elke rand in die PPM -sein. Evalueer die polslengte net deur eenvoudige tydsberekening met behulp van micros ():
uint32_t curTime = micros ();
uint32_t pulseLength = curTime - edgeTime; uint8_t curState = digitalRead (PPM_PIN);
Deur die toestand van die huidige pen te evalueer en dit te kombineer met die pulslengte en vorige pulse, kan die nuwe pulse geklassifiseer word. Die volgende voorwaardelike sal die tussenraam gaping opspoor:
if (lastState == 0 && pulslengte> 3000 && polslengte <6000)
Vir daaropvolgende pulse word die pulslengte in 'n as -toestand gekarteer deur die polslengte af te sny en te vooroordeel om by die joystick -asreeks te pas:
uint16_t rxLength = polslengte;
rxLengte = (rxLengte> 1600)? 1600: rxLengte; rxLengte = (rxLengte <600)? 600: rxLengte; rxChannels [curChannel] = rxLength - 600;
Die rxChannels -skikking bevat uiteindelik 16 waardes van 0 - 1000, wat dui op stok- / skuif- en knopposisies.
Nadat u 16 kanale ontvang het, word die kartering na die joystick uitgevoer:
/ * asse */
Joystick.setThrottle (kanale [0]); Joystick.setXAxis (kanale [1]); Joystick.setYAxis (1000 - kanale [2]); Joystick.setRxAxis (kanale [3]); Joystick.setRyAxis (kanale [4]); Joystick.setZAxis (1000 - kanale [5]); / * knoppies */ Joystick.setButton (0, (kanale [6] <500? 1: 0)); / * werk data op via USB */ Joystick.sendState ();
Ek het 'n paar asse in die kode omgekeer, wat absoluut nie nodig is nie, aangesien die as ook omgedraai kan word deur die servorigting of die opdrag in FSX om te draai. Ek het egter besluit om die servo -aanwysings en ook die oorspronklike FSX -opdrag te hou.
Die knoppie word deur kanaal 7 in- of uitgeskakel.
En moenie vergeet om die skeduleerder aan te merk nie … anders is geen ontfoutafdrukke sigbaar nie.
leemte -lus () {
scheduler.tick (); }
Op die skermkiekie wat ek aangeheg het, kan u sien dat kanaal 1 van 1000 (vol gas) na 0 (ledig) verskuif is.
FSX sal die Arduino opspoor net soos enige ander joystick, dus ken net die knoppie en byle toe en geniet dit!
Wat ek regtig van hierdie benadering hou, is dat u u sender net soos met 'n regte model kan gebruik, bv. met behulp van vlugfases, ens.
Aanbeveel:
Arduino motorwaarskuwingstelsel vir omgekeerde parkering - Stap vir stap: 4 stappe
Arduino -waarskuwingstelsel vir omgekeerde parkeerterrein | Stap vir stap: In hierdie projek ontwerp ek 'n eenvoudige Arduino Car Reverse Parking Sensor Circuit met behulp van Arduino UNO en HC-SR04 Ultrasonic Sensor. Hierdie Arduino -gebaseerde motor -omkeerwaarskuwingstelsel kan gebruik word vir 'n outonome navigasie, robotafstand en ander reeks
Opstelling vir eksterne Bluetooth GPS -verskaffer vir Android -toestelle: 8 stappe
Opstelling vir eksterne Bluetooth GPS-verskaffer vir Android-toestelle: hierdie instruksies sal verduidelik hoe u u eie eksterne Bluetooth-gps vir u telefoon kan aanbring, maar dit kan slegs teen ongeveer $ 10 aanbring.Materiaal: NEO 6M U-blox GPSHC-05 bluetooth-moduleKennis van koppelvlak Blutooth lae energie modules Ardui
Relay Board vir Arduino vir minder as $ 8 .: 5 stappe
Relay Board vir Arduino vir minder as $ 8 .: Hallo vriende, vandag gaan ek u vertel hoe u 'n relay board vir Arduino vir minder as $ 8 kan maak. In hierdie kring gaan ons geen IC of transistor gebruik nie, so kom ons doen dit
Gebruik 1 analoog invoer vir 6 knoppies vir Arduino: 6 stappe
Gebruik 1 analoog invoer vir 6 knoppies vir Arduino: ek het gereeld gewonder hoe ek meer digitale insette vir my Arduino kan kry. Dit het onlangs by my opgekom dat ek een van die analoog insette moet kan gebruik om verskeie digitale insette in te voer. Ek het vinnig gesoek en gevind waar mense is
Tutoriaal vir L298 2Amp -motorbestuurderskerm vir Arduino: 6 stappe
Tutoriaal vir L298 2Amp-motorbestuurderskerm vir Arduino: beskrywingL298 2Amp-motorbestuurderskerm vir Arduino is gebaseer op die geïntegreerde kring van die L298-motorbestuurder, 'n motorbestuurder met volledige brug. Dit kan twee afsonderlike 2A DC -motors of 1 2A -stapmotors aandryf. Motor se snelheid en rigtings kan afsonderlik beheer word