Talaan ng mga Nilalaman:
- Mga gamit
- Hakbang 1: Wire Up ang RX at ang Arduino
- Hakbang 2: Pagkuha ng Ilang Mga Signal ng PPM
- Hakbang 3: Pag-configure ng Transmitter
- Hakbang 4: Pagpapatakbo ng Joystick
- Hakbang 5: Pag-coding ng Arduino
Video: Batay sa Arduino (JETI) PPM sa USB Joystick Converter para sa FSX: 5 Mga Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:11
Napagpasyahan kong ilipat ang aking transmiter ng JETI DC-16 mula sa Mode 2 hanggang sa Mode 1, na karaniwang pinalilipat ang Throttle at Elevator mula kaliwa hanggang kanan at kabaliktaran. Dahil hindi ko nais na mag-crash ng isa sa aking mga modelo dahil sa ilang kaliwa / kanang pagkalito sa aking utak, iniisip ko kung posible na magsanay ng kaunti sa FSX.
Nabasa at nasubukan ko ang mga JETI transmitter na aktwal na sumusuporta sa isang mode ng Joystick sa labas ng kahon, subalit nais ko ang buong kakayahang umangkop para sa mga palakol at lumipat ng mga takdang-aralin at gamitin ang TX na may isang tunay na modelo. Sa pamamagitan ng paggamit ng output ng tatanggap, posible ring magamit ang pagproseso ng signal sa DC-16 at gamitin ang mga mixer, flight phase, dual rate, kung ano ang maaari mong mai-program doon.
Kamakailan lamang natagpuan ko ang isang magandang tutorial sa kung paano gumawa ng isang USB HID input device, katulad ng isang Joystick, mula sa isang murang Arduino tulad ng isang Pro Micro:
www.instructables.com/id/Create-a-Joystick…
Paganahin nito ang lahat ng kinakailangan upang makontrol ang isang eroplano / helikopter / anupaman sa FSX! Maraming mga palakol at mga pindutan na magagamit.
Dahil mayroon lamang akong ekstrang JETI RSAT2, nagpasya akong i-wire ito sa Arduino at subukang ipatupad ang isang maliit na parser ng PPM kasama ang library ng Joystick.
Ipinapalagay kong sinumang sumusunod sa mga hakbang na ito ay pamilyar sa pagkonekta at pagprograma ng isang Arduino. Hindi ako kukuha ng anumang mga garantiya para sa mga madepektong paggawa o pinsala!
Mga gamit
Kakailanganin mong…
- anumang Arduino na suportado ng Joystick library, gumamit ako ng Sparkfun Pro Micro 5V / 16 MHz
- isang kamakailang bersyon ng Arduino IDE
- anumang RC receiver na naglalabas ng isang senyas ng PPM, tulad ng JETI RSAT2
- ilang mga wire ng lumulukso (min. 3)
- ang library ng Joystick ay naka-install sa Arduino IDE
- ang arduino-timer library:
Hakbang 1: Wire Up ang RX at ang Arduino
Ang mga kable ay medyo prangka. Napagpasyahan kong i-power lang ang Arduino mula sa USB, dahil tutulad ito sa isang aparato ng Joystick. Ibibigay nito ang Arduino ng 5V, na maaaring magamit din para sa pag-power ng RC receiver.
Ginamit ko ang Pin VCC, na nagbibigay ng kinokontrol na output, at ang pinakamalapit na pin ng Gnd - ikonekta lamang ito sa konektor + at - mga pin ng PPM. Kapag ang Arduino ay pinalakas, ang tatanggap ay nagpapalakas din ngayon.
Para sa signal ng PPM, nagpasya akong gumamit ng mga interrupts upang ma-parse ang mga ito. Magagamit ang mga pagkagambala hal. sa Pin 3, kaya't ikonekta lamang ito doon - walang "katutubong RC pin" sa arduino, ngunit posibleng higit pa at iba't ibang mga paraan upang mabasa sa signal ng receiver.
Kailangan kong huwag paganahin ang alarma ng RX boltahe, dahil ang boltahe ng VCC na may suplay ng USB ay nasa paligid ng 4.5V lamang - ngunit medyo matatag, kaya't wala talagang problema.
Hakbang 2: Pagkuha ng Ilang Mga Signal ng PPM
Kapag ang tagatanggap AT ang TX ay pinalakas, nakakakuha ako ng mga signal ng PPM tulad ng ipinakita sa imahe. 16 na mga channel, paulit-ulit na magpakailanman. Kung ang Failsafe sa RSAT ay hindi pinagana at ang transmitter ay pinapatay, ang output ng PPM ay hindi pagaganahin.
Ang karagdagang impormasyon tungkol sa PPM ay magagamit dito:
- https://en.wikipedia.org/wiki/Pulse-position_modul…
- https://wiki.rc-network.de/index.php/PPM
Dahil hindi ako lumilipad ng mga totoong bagay sa kasong ito, wala akong pakialam sa mga oras ng teoretikal at naisip ko lamang sa oscilloscope kung ano ang Acutally outputting ng aking tatanggap kapag inililipat ang mga stick mula sa ganap na kaliwa patungo sa buong kanan (karaniwang mga setting sa TX). Tila -100% ay tumutugma sa mga pulso na may haba na 600µs, at + 100% hanggang 1600µs. Hindi ko rin alintana ang haba ng mga pause ng pause (400µs) sa aking Arduino code, ngunit ipinalagay ko ang isang spacing ng frame na min. 3000µs
Hakbang 3: Pag-configure ng Transmitter
Dahil ang aktwal na posisyon lamang ng mga kontrol sa ibabaw ay kailangang malaman, isang channel / "servo" bawat pag-andar ng RC ay sapat. Dahil dito, maaaring magawa ang isang simpleng setup ng transmiter - katulad ng isang normal na modelo ng RC. Ang pangunahing pagpapaandar aileron, elevator, timon at throttle bawat isa ay nangangailangan lamang ng isang servo ayon sa pagkakabanggit transmiter channel. Nagdagdag din ako ng mga flap, preno at gamit, naiwan nang libre ang 9 na mga channel sa ngayon. Mangyaring tandaan na ang Flaps ay inilagay sa isang yugto ng paglipad, at hindi kontrolado nang direkta sa pamamagitan ng isang stick, slider o pindutan.
Hakbang 4: Pagpapatakbo ng Joystick
Ang library ng Joystick ay medyo madaling gamitin, at nagbibigay ng ilang mga halimbawa at pagsubok. Dapat maging kapaki-pakinabang upang suriin muna kung ang Arduino ay napansin bilang wastong Joystick, ang mga tagubiling naka-link sa seksyon ng pagpasok at ang silid-aklatan mismo ay nagbibigay ng ilang mabuting patnubay.
Sa control panel ng Mga Device at Printer, ang Arduino ay ipinapakita bilang "Sparkfun Pro Micro", at ang window ng pagsubok ng Joystick ay nagpapakita ng 7 palakol at maraming mga sinusuportahang pindutan. Kahit na ang isang switch ng sumbrero ay maaaring magamit kapag naka-program sa Arduino.
Hakbang 5: Pag-coding ng Arduino
Ang kulang pa rin ay ang aktwal na pag-parse ng signal ng PPM at pagtatalaga sa mga axic at button ng Joystick. Nagpasya ako para sa sumusunod na pagmamapa:
Pagtatalaga ng Channel / Function / Joystick:
- Throttle -> Throttle axis
- Aileron -> X axis
- Elevator -> Y axis
- Rudder -> X rotation axis
- Flaps -> Y rotation axis
- Preno -> Z axis
- Gear -> Button 0
Kapag ang gear ay nakabukas, ang unang pindutan ng Joystick ay pipilitin at ilalabas kapag tinaas ang gear. Gayunpaman, mangangailangan ito ng FSUIPC para sa FSX, sa labas ng kahon, tatanggapin lamang ng FSX ang isang pindutan para sa pag-toggle ng gear, na hindi eksakto kung ano ang nangyayari sa aking mga modelo.
Ibinigay ko ang aking kasalukuyang bersyon ng code na may maraming mga puna, na gumagana nang maayos para sa akin - huwag mag-atubiling baguhin ang iyong takdang-aralin o magdagdag ng mga bagong pag-andar. Ang huling 9 na mga channel ng RC ay kasalukuyang hindi ginagamit.
Para sa pag-setup, ang klase ng Joystick ay kailangang gawing pauna, karaniwang sa pamamagitan ng pagtukoy sa mga saklaw ng mga numero ng axis:
/ * Itakda ang saklaw ng mga palakol (tinukoy sa header, 0 - 1000) * /
Joystick.setXAxisRange (CHANNEL_MIN, CHANNEL_MAX); Joystick.setYAxisRange (CHANNEL_MIN, CHANNEL_MAX); …
Sa pamamagitan ng paggamit ng mga halaga mula 0 hanggang 1000, posible na direktang mapa ang haba ng pulso (600 - 1600µs) sa mga halaga ng joystick nang hindi nag-aalis.
Ang DIN 3 ay pinasimulan bilang digital input, pinagana ang mga pullup, at isang nakakagambalang nakakabit:
pinMode (PPM_PIN, INPUT_PULLUP);
attachInterrupt (digitalPinToInterrupt (PPM_PIN), PPM_Pin_Changed, CHANGE);
Para sa mga layuning pag-debug, nagdagdag ako ng ilang mga printout sa pamamagitan ng Serial interface sa mga regular na agwat, gamit ang arduino-timer library:
kung (SERIAL_PRINT_INTERVAL> 0) {
scheduler.every (SERIAL_PRINT_INTERVAL, (void *) -> bool {SerialPrintChannels (); return true;}); }
Ang pagkagambala ng pin ay tatawagan tuwing ang lohikal na halaga ng pin ay nagbago, kaya para sa bawat gilid sa signal ng PPM. Suriin ang haba ng pulso sa pamamagitan lamang ng simpleng tiyempo gamit ang micros ():
uint32_t curTime = micros ();
uint32_t pulseLength = curTime - edgeTime; uint8_t curState = digitalRead (PPM_PIN);
Sa pamamagitan ng pagsusuri ng estado ng kasalukuyang pin at pagsasama-sama nito sa haba ng pulso at mga nakaraang pulso, maaaring maiuri ang mga bagong pulso. Ang sumusunod na may kundisyon ay makakakita ng agwat ng interframe:
kung (lastState == 0 && pulseLength> 3000 && pulseLength <6000)
Para sa kasunod na mga pulso, ang haba ng pulso ay mai-map sa isang estado ng axis sa pamamagitan ng pag-clipping at bias ng haba ng pulso upang tumugma sa saklaw ng axis ng joystick:
uint16_t rxLength = pulseLength;
rxLength = (rxLength> 1600)? 1600: rxLength; rxLength = (rxLength <600)? 600: haba ng rx; rxChannels [curChannel] = rxLength - 600;
Ang rxChannels array sa kalaunan ay naglalaman ng 16 na halaga mula 0 - 1000, na nagpapahiwatig ng mga posisyon ng stick / slider at button.
Matapos makatanggap ng 16 na mga channel, isinasagawa ang pagmamapa sa Joystick:
/ * axes * /
Joystick.setThrottle (mga channel [0]); Joystick.setXAxis (mga channel [1]); Joystick.setYAxis (1000 - mga channel [2]); Joystick.setRxAxis (mga channel [3]); Joystick.setRyAxis (mga channel [4]); Joystick.setZAxis (1000 - mga channel [5]); / * mga pindutan * / Joystick.set Button (0, (mga channel [6] <500? 1: 0)); / * i-update ang data sa pamamagitan ng USB * / Joystick.sendState ();
Inverted ko ang ilang mga palakol sa code, na kung saan ay hindi absolutey kinakailangan, dahil ang axis ay maaari ding baligtarin sa pamamagitan ng pag-flip ng direksyon ng servo o ang pagtatalaga sa FSX. Gayunpaman, nagpasya akong panatilihin ang mga direksyon ng servo at pati na rin ang orihinal na takdang-aralin sa FSX.
Ang pindutan ay nakabukas o naka-off sa pamamagitan ng thresholding channel 7.
At huwag kalimutan na lagyan ng tsek ang tagapag-iskedyul … kung hindi man, walang mga debug print na makikita.
void loop () {
scheduler.tick (); }
Sa screenshot na na-attach ko makikita mo, ang channel 1 ay inilipat mula 1000 (buong throttle) sa 0 (idle).
Madiskubre ng FSX ang Arduino tulad ng anumang iba pang Joystick, kaya't italaga lamang ang pindutan at mga palakol at magsaya sa pag-alis!
Ang talagang gusto ko tungkol sa pamamaraang ito ay, maaari mo lamang gamitin ang iyong transmitter na may isang tunay na modelo, hal. gamit ang mga flight phase atbp.
Inirerekumendang:
LDR Batay Sensor / Detector ng Batay: 3 Mga Hakbang
LDR Batay Sensor / Detector ng ilaw: Ang mga ilaw sensor at detektor ay lubos na kapaki-pakinabang para sa mga microcontroller at naka-embed na mga system at pagmamanman ng kasidhian ay dapat ding gawin. Ang isa sa pinakasimpleng at pinakamurang mga naturang sensor ay LDR. Ang LDR o Light Dependent Resistors ay maaaring madaling gamitin wit
Pamamahala ng Tanim na Batay sa Batay sa Solar Na May ESP32: 7 Mga Hakbang (na may Mga Larawan)
Pamamahala ng Tanim na Batay sa Batay ng Solar Sa ESP32: Ang paglaki ng mga halaman ay masaya at pagtutubig at pag-aalaga sa kanila ay hindi talaga isang abala. Ang mga aplikasyon ng Microcontroller upang subaybayan ang kanilang kalusugan ay nasa buong internet at ang inspirasyon para sa kanilang disenyo ay nagmula sa static na katangian ng halaman at ang kadalian ng moni
Batay sa Autonomous na Batay ng Arduino Gamit ang Ultrasonic Sensor: 5 Mga Hakbang (na may Mga Larawan)
Batay ng Autonomous na Batay ng Arduino Paggamit ng Ultrasonic Sensor: Lumikha ng iyong sariling Arduino based Autonomous Bot gamit ang Ultrasonic Sensor. Ang bot na ito ay maaaring lumipat sa sarili nitong walang pag-crash ng anumang mga hadlang. Karaniwan kung ano ang ginagawa nito ay nakita nito ang anumang uri ng mga hadlang sa paraan nito at nagpapasya ang pinakamahusay na pa
BeanBot - isang Batay sa Autonomous na Robot ng Batay sa Arduino !: 8 Mga Hakbang (na may Mga Larawan)
BeanBot - isang Arduino Batay sa Autonomous Paper Robot !: Mayroon bang anumang mas nakasisigla kaysa sa isang blangko na papel? Kung ikaw ay isang masugid na tinkerer o tagabuo pagkatapos ay walang alinlangan na simulan mo ang iyong mga proyekto sa pamamagitan ng pag-sketch ng mga ito sa papel. Nagkaroon ako ng ideya upang makita kung posible na bumuo ng isang frame ng robot na wala sa papel
Dispenser ng Batay sa Batay ng Arduino: 5 Hakbang (na may Mga Larawan)
Dispenser ng Batay sa Batay ng Arduino: Ito ay napakadaling gawin at sobrang kapaki-pakinabang