Obsah:
- Zásoby
- Krok 1: Zapojte RX a Arduino
- Krok 2: Získání signálů PPM
- Krok 3: Konfigurace vysílače
- Krok 4: Spuštění joysticku
- Krok 5: Kódování Arduina
Video: Převodník Joystick PPM na USB založený na Arduino (JETI) pro FSX: 5 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:20
Rozhodl jsem se přepnout svůj vysílač JETI DC-16 z režimu 2 do režimu 1, který v podstatě přepíná škrticí klapku a elevátor zleva doprava a naopak. Vzhledem k tomu, že jsem kvůli nějakému zmatku vlevo/vpravo v mozku nechtěl jeden ze svých modelů rozbít, přemýšlel jsem, zda je možné ve FSX trochu cvičit.
Přečetl jsem a otestoval, zda vysílače JETI skutečně podporují režim joysticku, ale chtěl jsem plnou flexibilitu pro přiřazení os a přepínačů a používat TX jako u skutečného modelu. Pomocí výstupu přijímače je také možné využít zpracování signálu v DC-16 a použít mixéry, letové fáze, duální sazby, cokoli, co tam můžete naprogramovat.
Nedávno jsem našel pěkný návod, jak z levného Arduina, jako je Pro Micro, vyrobit USB HID vstupní zařízení, konkrétně Joystick:
www.instructables.com/id/Create-a-Joystick…
To by umožnilo vše potřebné k ovládání letadla / helikoptéry / čehokoli v FSX! K dispozici je spousta seker a tlačítek.
Protože jsem právě měl náhradní JETI RSAT2, rozhodl jsem se jej propojit s Arduinem a zkusit implementovat malý PPM parser společně s knihovnou Joystick.
Předpokládám, že někdo po těchto krocích je obeznámen s připojením a programováním Arduina. Nepřijímám žádné záruky za poruchy nebo poškození!
Zásoby
Budete potřebovat…
- jakékoli Arduino podporované knihovnou Joystick, použil jsem Sparkfun Pro Micro 5V / 16 MHz
- nedávná verze Arduino IDE
- jakýkoli RC přijímač s výstupem signálu PPM, jako JETI RSAT2
- několik propojovacích vodičů (min. 3)
- knihovna Joystick nainstalovaná v Arduino IDE
- knihovna arduino-timer:
Krok 1: Zapojte RX a Arduino
Zapojení je celkem jednoduché. Rozhodl jsem se napájet Arduino pouze z USB, protože bude emulovat zařízení Joystick. To dodá Arduinu 5V, které lze použít také pro napájení RC přijímače.
Použil jsem Pin VCC, který poskytuje regulovaný výstup, a nejbližší pin Gnd - stačí jej připojit ke konektorům + a - pinů PPM. Když se Arduino začne napájet, přijímač se nyní také zapne.
U signálu PPM jsem se rozhodl použít přerušení k jejich analýze. Přerušení jsou k dispozici např. na Pin 3, tak to tam prostě připojte - na arduinu není žádný „nativní RC pin“, ale možná více a různých způsobů čtení signálu přijímače.
Musel jsem deaktivovat alarm napětí RX, protože napětí VCC s napájením USB bude pouze kolem 4,5 V - ale docela stabilní, takže vůbec žádný problém.
Krok 2: Získání signálů PPM
Když je přijímač AND TX napájen, přijímal jsem signály PPM, jak je znázorněno na obrázku. 16 kanálů, stále se opakujících. Pokud je Failsafe na RSAT deaktivováno a vysílač je vypnutý, výstup PPM bude deaktivován.
Více informací o PPM je k dispozici zde:
- https://en.wikipedia.org/wiki/Pulse-position_modul…
- https://wiki.rc-network.de/index.php/PPM
Vzhledem k tomu, že v tomto případě nelétám skutečné věci, nestaral jsem se o teoretická načasování a jen jsem na osciloskopu zjistil, co můj přijímač akutně vydával při pohybu páček z úplně doleva zcela doprava (standardní nastavení v TX). Zdálo se, že -100% odpovídá pulsům o délce 600 µs a +100% až 1600 µs. Také jsem se nestaral o délku pauzových impulzů (400 µs) v mém kódu Arduino, ale předpokládal jsem rozestup snímků min. 3000 µs.
Krok 3: Konfigurace vysílače
Protože je třeba znát pouze skutečnou polohu ovládacích ploch, stačí jeden kanál / „servo“na RC funkci. V důsledku toho lze provést poměrně jednoduché nastavení vysílače - podobné běžnému RC modelu. Hlavní funkce křidélek, výškovky, směrovky a škrticí klapky vyžadují pouze jedno servo, respektive kanál vysílače. Také jsem přidal klapky, brzdy a rychlostní stupeň, takže zatím bylo 9 kanálů volných. Vezměte prosím na vědomí, že klapky byly použity ve fázi letu a nejsou ovládány přímo páčkou, posuvníkem nebo tlačítkem.
Krok 4: Spuštění joysticku
Knihovna Joystick se velmi snadno používá a poskytuje několik příkladů a testů. Mělo by být užitečné nejprve zkontrolovat, zda je Arduino detekován jako správný joystick, pokyny propojené v vstupní části a samotná knihovna poskytují dobré vodítko.
Na ovládacím panelu Zařízení a tiskárny se Arduino zobrazovalo jako „Sparkfun Pro Micro“a testovací okno joysticku ukazovalo 7 os a spoustu podporovaných tlačítek. Při programování v Arduinu lze použít i kloboukový spínač.
Krok 5: Kódování Arduina
Co stále chybí, je skutečná analýza signálu PPM a přiřazení os a tlačítek joysticku. Rozhodl jsem se pro následující mapování:
Přiřazení kanálu / funkce / joysticku:
- Plyn -> Osa plynu
- Křidélka -> osa X
- Výtah -> osa Y
- Kormidlo -> osa rotace X
- Klapky -> osa rotace Y
- Brzda -> osa Z.
- Gear -> Tlačítko 0
Když je zařazený rychlostní stupeň, musí být stisknuto první tlačítko joysticku, které se uvolní při zvednutí rychlostního stupně. To však bude vyžadovat FSUIPC pro FSX, po vybalení bude FSX akceptovat pouze tlačítko pro přepínání rychlostního stupně, což se u mých modelů zrovna neděje.
Poskytl jsem své aktuální verzi kódu spoustu komentářů, což mi funguje docela dobře - můžete změnit své přiřazení nebo přidat nové funkce. Posledních 9 RC kanálů se aktuálně nepoužívá.
Pro nastavení je třeba inicializovat třídu Joystick, v zásadě definováním rozsahů číselné osy:
/ * Nastavit rozsah os (definováno v záhlaví, 0 - 1000) */
Joystick.setXAxisRange (CHANNEL_MIN, CHANNEL_MAX); Joystick.setYAxisRange (CHANNEL_MIN, CHANNEL_MAX); …
Použitím hodnot od 0 do 1000 je možné přímo mapovat délku pulsu (600 - 1600 µs) na hodnoty joysticku bez změny měřítka.
DIN 3 je inicializována jako digitální vstup, povoleny pullupy a připojeno přerušení:
pinMode (PPM_PIN, INPUT_PULLUP);
attachInterrupt (digitalPinToInterrupt (PPM_PIN), PPM_Pin_Changed, CHANGE);
Pro účely ladění jsem přidal několik výtisků přes sériové rozhraní v pravidelných intervalech pomocí knihovny arduino-timer:
if (SERIAL_PRINT_INTERVAL> 0) {
scheduler.every (SERIAL_PRINT_INTERVAL, (void*) -> bool {SerialPrintChannels (); return true;}); }
Přerušení pinu bude vyvoláno vždy, když se změní logická hodnota pinu, tedy pro každou hranu v signálu PPM. Vyhodnoťte délku impulsu jednoduchým načasováním pomocí micro ():
uint32_t curTime = micros ();
uint32_t pulseLength = curTime - edgeTime; uint8_t curState = digitalRead (PPM_PIN);
Vyhodnocením aktuálního stavu kolíku a jeho kombinací s délkou pulsu a minulými impulsy lze klasifikovat nové impulsy. Následující podmíněné zjistí mezeru mezi snímky:
if (lastState == 0 && pulseLength> 3000 && pulseLength <6000)
U následujících impulsů bude délka pulsu mapována do stavu osy oříznutím a posunutím délky pulsu tak, aby odpovídala rozsahu osy joysticku:
uint16_t rxLength = pulseLength;
rxLength = (rxLength> 1600)? 1600: rxLength; rxLength = (rxLength <600)? 600: rxLength; rxChannels [curChannel] = rxLength - 600;
Pole rxChannels nakonec obsahuje 16 hodnot od 0 do 1000, které označují polohy páčky / posuvníku a tlačítka.
Po přijetí 16 kanálů se provede mapování na joystick:
/* sekery */
Joystick.setThrottle (kanály [0]); Joystick.setXAxis (kanály [1]); Joystick.setYAxis (1000 kanálů [2]); Joystick.setRxAxis (kanály [3]); Joystick.setRyAxis (kanály [4]); Joystick.setZAxis (1000 kanálů [5]); / * tlačítka */ Joystick.setButton (0, (kanály [6] <500? 1: 0)); / * aktualizace dat přes USB */ Joystick.sendState ();
Obrátil jsem některé osy v kódu, což není absolutně nutné, protože osu lze také převrátit překlopením směru serva nebo přiřazením v FSX. Rozhodl jsem se však zachovat směry serv a také původní přiřazení FSX.
Tlačítko se zapíná nebo vypíná prahem kanálu 7.
A nezapomeňte zaškrtnout plánovač … v opačném případě nebudou vidět žádné výtisky ladění.
prázdná smyčka () {
scheduler.tick (); }
Na obrázku, který jsem připojil, vidíte, že kanál 1 byl přesunut z 1000 (plný plyn) na 0 (nečinný).
FSX detekuje Arduino stejně jako jakýkoli jiný joystick, takže stačí přiřadit tlačítko a osy a užít si start!
To, co se mi na tomto přístupu opravdu líbí, je, že svůj vysílač můžete používat jako u skutečného modelu, např. pomocí letových fází atd.
Doporučuje:
Převodník založený na Esp8266 s úžasným uživatelským rozhraním Blynk s regulátorem zpětné vazby: 6 kroků
Převodník založený na Esp8266 s úžasným uživatelským rozhraním Blynk s regulátorem zpětné vazby: V tomto projektu vám ukážu účinný a běžný způsob, jak zvýšit stejnosměrné napětí. Ukážu vám, jak snadné může být sestavení boost převodníku pomocí Nodemcu. Pojďme to postavit. Obsahuje také voltmetr na obrazovce a zpětnou vazbu
Robot pro sledování barev založený na všesměrovém kolečku a OpenCV: 6 kroků
Robot pro sledování barev založený na všesměrovém kolečku a OpenCV: K implementaci sledování barev používám všesměrový podvozek kol a používám mobilní software s názvem OpenCVBot. Díky vývojářům softwaru zde, děkuji. OpenCV Bot ve skutečnosti detekuje nebo sleduje jakýkoli objekt v reálném čase prostřednictvím zpracování obrazu
Robot pro manipulaci s materiálem založený na GSM a Bluetooth: 7 kroků
Robot pro manipulaci s materiálem založený na GSM a Bluetooth: “ GSM (SMS) a Bluetooth ovládaný bezdrátový robot ” je robot, který je schopen přijímat sadu příkazů/ pokynů ve formě služby krátkých zpráv a provádí nezbytné akce. Budeme používat vyhrazený modem/mobilní
Převodník textu na řeč Arduino pomocí LM386 - Mluvící projekt Arduino - Knihovna Talkie Arduino: 5 kroků
Převodník textu na řeč Arduino pomocí LM386 | Mluvící projekt Arduino | Knihovna Talkie Arduino: Ahoj kluci, v mnoha projektech požadujeme, aby arduino mluvilo něco jako mluvící hodiny nebo sdělování některých dat, takže v tomto návodu převádíme text na řeč pomocí Arduina
Převodník vysokého napětí (SMPS)/Boost Converter pro Nixie Tubes: 6 kroků
Převodník vysokého napětí (SMPS)/Boost Converter pro Nixie Tubes: Tento SMPS zvyšuje nízké napětí (5-20 voltů) na vysoké napětí potřebné pro pohon nixie elektronek (170-200 voltů). Buďte varováni: přestože tento malý obvod lze provozovat na baterie/nízkonapěťové nástěnné mladiny, výstup je více než dost, aby vás zabil! Pr