Satura rādītājs:
- Piegādes
- 1. darbība: pievienojiet RX un Arduino
- 2. darbība: dažu PPM signālu iegūšana
- 3. darbība: raidītāja konfigurēšana
- 4. solis: kursorsviras palaišana
- 5. solis: Arduino kodēšana
Video: Arduino bāzes (JETI) PPM uz USB kursorsviru pārveidotājs FSX: 5 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:53
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
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
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
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
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
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:
- Droseļvārsts -> Droseļvārsta ass
- Elerons -> X ass
- Lifts -> Y ass
- Stūre -> X rotācijas ass
- Atloks -> Y rotācijas ass
- Bremze -> Z ass
- 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:
Arduino tastatūras kursorsviru paplašinātāja kaste un skaņas kontroliera lieta, izmantojot Deej: 8 soļi
Arduino tastatūras kursorsviru paplašinātāja kaste un skaņas kontroliera lieta, izmantojot Deej: Kāpēc Jau kādu laiku es vēlos tastatūrai pievienot nelielu kursorsviru, lai kontrolētu saskarnes elementus, vai citus mazākus uzdevumus spēlēs un simulatoros (MS Flight Sim, Elite: Dangerous, Zvaigžņu kari: eskadras utt.). Arī Elite: Dangerous, es esmu bijis
Robota rokas vadība ar TLV493D, kursorsviru un Arduino: 3 soļi
Robota rokas vadība ar TLV493D, kursorsviru un Arduino: alternatīvs kontrolieris jūsu robotam ar TLV493D sensoru, magnētiskais sensors ar 3 brīvības pakāpēm (x, y, z), ar kuriem jūs varētu kontrolēt savus jaunos projektus, izmantojot I2C sakarus. mikrokontrolleri un elektroniskā tāfele, kas Bast P
Arduino LED vadība ar analogo kursorsviru: 6 soļi
Arduino LED vadība ar analogo kursorsviru: šajā apmācībā mēs iemācīsimies izmantot analogo kursorsviru, lai kontrolētu LED. Noskatieties demonstrācijas video
Kā kontrolēt BLDC motoru ar Arduino un kursorsviru: 6 soļi
Kā vadīt BLDC motoru ar Arduino un kursorsviru: Sveiki draugi šajā apmācībā es jums parādīšu, kā kontrolēt bezsuku līdzstrāvas motoru jeb BLDC motoru ar Arduino un kursorsviru
Pārveidojiet veco spēļu ostas kursorsviru USB lidojuma nūjā ar Arduino: 5 soļi
Pārveidojiet veco spēļu porta kursorsviru USB lidojuma nūjā ar Arduino: Ātra atruna: šī projekta mērķis nav padarīt lētu spēļu porta kursorsviras konversiju. Šī projekta mērķis ir izveidot daudzpusīgu un pielāgojamu kursorsviru, kuru varētu viegli modificēt. iemesls, kāpēc es izvēlējos Arduino, bija