Satura rādītājs:

Arduino bāzes (JETI) PPM uz USB kursorsviru pārveidotājs FSX: 5 soļi
Arduino bāzes (JETI) PPM uz USB kursorsviru pārveidotājs FSX: 5 soļi

Video: Arduino bāzes (JETI) PPM uz USB kursorsviru pārveidotājs FSX: 5 soļi

Video: Arduino bāzes (JETI) PPM uz USB kursorsviru pārveidotājs FSX: 5 soļi
Video: «ROBORACE» — Образовательный набор на базе Arduino 2024, Novembris
Anonim
Arduino bāzes (JETI) PPM uz USB kursorsviru pārveidotājs FSX
Arduino bāzes (JETI) PPM uz USB kursorsviru pārveidotājs FSX
Arduino bāzes (JETI) PPM uz USB kursorsviru pārveidotājs FSX
Arduino bāzes (JETI) PPM uz USB kursorsviru pārveidotājs FSX

Es nolēmu pārslēgt savu JETI DC-16 raidītāju no 2. režīma uz 1. režīmu, kas būtībā pārslēdz droseli un liftu no kreisās uz labo un otrādi. Tā kā es negribēju sabojāt vienu no saviem modeļiem, jo manā smadzenēs radās neskaidrības, es domāju, vai ir iespējams nedaudz praktizēt FSX.

Es izlasīju un pārbaudīju, ka JETI raidītāji faktiski atbalsta kursorsviras režīmu, taču es vēlējos pilnīgu asu un slēdžu piešķiršanas elastību un izmantot TX kā ar īstu modeli. Izmantojot uztvērēja izeju, ir iespējams arī izmantot signāla apstrādi DC-16 un izmantot maisītājus, lidojuma fāzes, dubultās likmes, neatkarīgi no tā, ko jūs tur varat ieprogrammēt.

Nesen es atradu jauku pamācību par to, kā no lēta Arduino, piemēram, Pro Micro, izveidot USB HID ievades ierīci, proti, kursorsviru:

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

Tas ļautu visu, kas nepieciešams, lai kontrolētu lidmašīnu / helikopteru / jebko FSX! Pieejams daudz asu un pogu.

Tā kā man tikko bija rezerves JETI RSAT2, es nolēmu to savienot ar Arduino un mēģināt ieviest nelielu PPM parsētāju kopā ar Joystick bibliotēku.

Es pieņemu, ka kāds, kurš veic šīs darbības, ir iepazinies ar Arduino savienošanu un programmēšanu. Es neuzņemos nekādas garantijas par darbības traucējumiem vai bojājumiem!

Piegādes

Jums būs nepieciešams…

  • jebkuru Arduino, ko atbalsta kursorsviru bibliotēka, es izmantoju Sparkfun Pro Micro 5V / 16 MHz
  • jaunākā Arduino IDE versija
  • jebkurš RC uztvērējs, kas izvada PPM signālu, piemēram, JETI RSAT2
  • daži džemperu vadi (min. 3)
  • kursorsviras bibliotēka, kas instalēta Arduino IDE
  • arduino-taimeru bibliotēka:

1. darbība: pievienojiet RX un Arduino

Pievienojiet RX un Arduino
Pievienojiet RX un Arduino
Pievienojiet RX un Arduino
Pievienojiet RX un Arduino

Elektroinstalācija ir diezgan vienkārša. Es nolēmu barot Arduino tikai no USB, jo tas emulēs kursorsviru ierīci. Tas Arduino piegādās 5 V, ko var izmantot arī RC uztvērēja barošanai.

Es izmantoju Pin VCC, kas nodrošina regulētu izeju, un tuvāko Gnd tapu - vienkārši pievienojiet to PPM savienotājam + un - tapas. Kad Arduino tiek barots, tagad tiek ieslēgts arī uztvērējs.

PPM signālam es nolēmu izmantot pārtraukumus, lai tos parsētu. Ir pieejami pārtraukumi, piem. pie tapas 3, tāpēc vienkārši pievienojiet to tur - arduino nav "vietējās RC tapas", bet, iespējams, vairāk un dažādi veidi, kā lasīt uztvērēja signālā.

Man bija jāatspējo RX sprieguma trauksme, jo VCC spriegums ar USB barošanu būs tikai aptuveni 4,5 V, bet diezgan stabils, tāpēc nekādu problēmu.

2. darbība: dažu PPM signālu iegūšana

Dažu PPM signālu iegūšana
Dažu PPM signālu iegūšana
Dažu PPM signālu iegūšana
Dažu PPM signālu iegūšana

Kad uztvērējs UN TX tiek darbināts, es saņēmu PPM signālus, kā parādīts attēlā. 16 kanāli, kas atkārtojas mūžīgi. Ja RSAT funkcija Failsafe ir atspējota un raidītājs ir izslēgts, PPM izeja tiks atspējota.

Plašāka informācija par PPM pieejama šeit:

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

Tā kā es šajā gadījumā nelidoju ar īstām lietām, man nebija vienalga par teorētisko laiku un tikai uz osciloskopa noskaidroju, ko uztvērējs akūtā veidā izvada, pārvietojot nūjas no pilnīgi kreisās uz labo pusi (standarta iestatījumi TX). Šķita, ka -100% atbilst impulsiem, kuru garums ir 600 µs, un no +100% līdz 1600 µs. Man arī nerūpēja pauzes impulsu garums (400 µs) manā Arduino kodā, bet es pieņēmu, ka kadru atstatums ir min. 3000 µs.

3. darbība: raidītāja konfigurēšana

Raidītāja konfigurēšana
Raidītāja konfigurēšana
Raidītāja konfigurēšana
Raidītāja konfigurēšana
Raidītāja konfigurēšana
Raidītāja konfigurēšana

Tā kā ir jāzina tikai vadības virsmu faktiskā atrašanās vieta, pietiek ar vienu kanālu / "servo" katrai RC funkcijai. Līdz ar to var izveidot diezgan vienkāršu raidītāja iestatīšanu - līdzīgi parastajam RC modelim. Katrai galvenajai funkcijai - eleronam, liftam, stūrei un droseļvārstei - ir nepieciešams tikai viens servo raidītāja kanāls. Es pievienoju arī atlokus, bremzes un pārnesumus, līdz šim atstājot brīvus 9 kanālus. Lūdzu, ņemiet vērā, ka atloki tika ievietoti lidojuma fāzē un netiek vadīti tieši, izmantojot nūju, slīdni vai pogu.

4. solis: kursorsviras palaišana

Vadot kursorsviru
Vadot kursorsviru
Vadot kursorsviru
Vadot kursorsviru

Joystick bibliotēka ir diezgan viegli lietojama, un tā sniedz dažus piemērus un testus. Būtu noderīgi vispirms pārbaudīt, vai Arduino tiek konstatēts kā pareiza kursorsvira, ievades sadaļā norādītās instrukcijas un pati bibliotēka sniedz dažus labus norādījumus.

Ierīču un printeru vadības panelī Arduino tika parādīts kā "Sparkfun Pro Micro", un kursorsviru testa logā bija redzamas 7 asis un daudz atbalstīto pogu. Pat cepures slēdzi var izmantot, ja tas ir ieprogrammēts Arduino.

5. solis: Arduino kodēšana

Arduino kodēšana
Arduino kodēšana
Arduino kodēšana
Arduino kodēšana

Vēl trūkst PPM signāla faktiskās parsēšanas un piešķiršanas kursorsviru asīm un pogām. Es nolēmu veikt šādu kartēšanu:

Kanāla / funkcijas / kursorsviru piešķiršana:

  1. Droseļvārsts -> Droseļvārsta ass
  2. Elerons -> X ass
  3. Lifts -> Y ass
  4. Stūre -> X rotācijas ass
  5. Atloks -> Y rotācijas ass
  6. Bremze -> Z ass
  7. Pārnesums -> Poga 0

Kad pārnesums ir nolaists, kursorsviras pirmā poga ir jānospiež un tiks atlaista, paceļot pārnesumu. Tomēr tam būs nepieciešams FSUIPC FSX, no kastes, FSX pieņems tikai pogu, lai pārslēgtu pārnesumu, kas nav tieši tas, kas notiek ar maniem modeļiem.

Es sniedzu savu pašreizējo koda versiju ar daudziem komentāriem, kas man darbojas diezgan labi - nekautrējieties mainīt savu uzdevumu vai pievienot jaunas funkcijas. Pēdējie 9 RC kanāli pašlaik netiek izmantoti.

Iestatīšanai ir jāinicializē kursorsviru klase, galvenokārt nosakot skaitlisko asu diapazonus:

/ * Iestatīt asu diapazonu (definēts galvenē, 0 - 1000) */

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

Izmantojot vērtības no 0 līdz 1000, ir iespējams tieši kartēt impulsa garumu (600 - 1600 µs) ar kursorsviru vērtībām, neveicot mērogošanu.

DIN 3 tiek inicializēts kā digitālā ieeja, iespējoti pullups un pievienots pārtraukums:

pinMode (PPM_PIN, INPUT_PULLUP);

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

Atkļūdošanas nolūkos es regulāri pievienoju dažas izdrukas, izmantojot seriālo saskarni, izmantojot arduino-taimeru bibliotēku:

ja (SERIAL_PRINT_INTERVAL> 0) {

plānotājs.katrs (SERIAL_PRINT_INTERVAL, (void*) -> bool {SerialPrintChannels (); return true;}); }

Piespraudes pārtraukums tiks izsaukts ikreiz, kad ir mainījusies tapas loģiskā vērtība, tātad katrai malai PPM signālā. Novērtējiet impulsa garumu, vienkārši izmantojot laiku, izmantojot mikroskopu ():

uint32_t curTime = micros ();

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

Izvērtējot pašreizējo tapas stāvokli un apvienojot to ar impulsa garumu un iepriekšējiem impulsiem, var klasificēt jaunos impulsus. Tālāk minētais nosacījums atklās starp kadru atstarpi:

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

Turpmākajiem impulsiem impulsa garums tiks kartēts uz ass stāvokli, nogriežot un novirzot impulsa garumu, lai tas atbilstu kursorsviru asu diapazonam:

uint16_t rxLength = pulseLength;

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

Masīvs rxChannels galu galā satur 16 vērtības no 0 līdz 1000, norādot nūju / slīdņu un pogu pozīcijas.

Pēc 16 kanālu saņemšanas tiek veikta kartēšana uz kursorsviru:

/ * asis */

Joystick.setThrottle (kanāli [0]); Joystick.setXAxis (kanāli [1]); Joystick.setYAxis (1000 - kanāli [2]); Joystick.setRxAxis (kanāli [3]); Joystick.setRyAxis (kanāli [4]); Joystick.setZAxis (1000 - kanāli [5]); / * pogas */ kursorsvira.setButton (0, (kanāli [6] <500? 1: 0)); / * atjaunināt datus, izmantojot USB */ Joystick.sendState ();

Es apgriezu dažas asis kodā, kas nav absolūti nepieciešams, jo asi var arī apgriezt, pagriežot servo virzienu vai piešķirot FSX. Tomēr es nolēmu saglabāt servo norādes un arī sākotnējo FSX uzdevumu.

Poga tiek ieslēgta vai izslēgta, nosakot 7. sliekšņa kanālu.

Un neaizmirstiet atzīmēt plānotāju … pretējā gadījumā atkļūdošanas izdrukas nebūs redzamas.

void loop () {

plānotājs.tick (); }

Pievienotajā ekrānuzņēmumā var redzēt, ka 1. kanāls tika pārvietots no 1000 (ar pilnu droseli) uz 0 (dīkstāvē).

FSX atklās Arduino tāpat kā jebkuru citu kursorsviru, tāpēc vienkārši piešķiriet pogu un asis un izklaidējieties pacelšanās laikā!

Man ļoti patīk šī pieeja, jūs varat vienkārši izmantot savu raidītāju kā ar īstu modeli, piem. izmantojot lidojuma fāzes utt.

Ieteicams: