Spisu treści:
- Kieszonkowe dzieci
- Krok 1: Podłącz RX i Arduino
- Krok 2: Uzyskiwanie sygnałów PPM
- Krok 3: Konfiguracja nadajnika
- Krok 4: Uruchamianie joysticka
- Krok 5: Kodowanie Arduino
Wideo: Konwerter joysticka PPM na USB oparty na Arduino (JETI) dla FSX: 5 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:28
Zdecydowałem się przełączyć nadajnik JETI DC-16 z trybu 2 na tryb 1, który zasadniczo przełącza przepustnicę i windę z lewej strony na prawą i odwrotnie. Ponieważ nie chciałem zepsuć jednego z moich modeli z powodu pomieszania lewej/prawej strony mózgu, zastanawiałem się, czy da się trochę poćwiczyć w FSX.
Przeczytałem i przetestowałem nadajniki JETI, które faktycznie obsługują tryb Joystick po wyjęciu z pudełka, jednak chciałem pełnej elastyczności przypisania osi i przełączników i używać TX jak z prawdziwym modelem. Korzystając z wyjścia odbiornika, można również wykorzystać przetwarzanie sygnału w DC-16 i używać mikserów, faz lotu, podwójnych prędkości, cokolwiek można tam zaprogramować.
Niedawno znalazłem fajny samouczek, jak zrobić urządzenie wejściowe USB HID, a mianowicie Joystick, z taniego Arduino, takiego jak Pro Micro:
www.instructables.com/id/Create-a-Joystick…
Umożliwiłoby to wszystko, co potrzebne do sterowania samolotem / helikopterem / czymkolwiek w FSX! Dostępnych jest wiele osi i przycisków.
Ponieważ miałem tylko zapasowy JETI RSAT2, postanowiłem połączyć go z Arduino i spróbować zaimplementować mały parser PPM wraz z biblioteką Joystick.
Zakładam, że każdy, kto wykonuje te kroki, jest zaznajomiony z podłączaniem i programowaniem Arduino. Nie przyjmę żadnych gwarancji za nieprawidłowe działanie lub uszkodzenia!
Kieszonkowe dzieci
Będziesz potrzebować…
- dowolne Arduino obsługiwane przez bibliotekę Joystick, użyłem Sparkfun Pro Micro 5V/16 MHz
- najnowsza wersja Arduino IDE
- dowolny odbiornik RC wysyłający sygnał PPM, taki jak JETI RSAT2
- kilka zworek (min. 3)
- biblioteka Joystick zainstalowana w Arduino IDE
- biblioteka arduino-timer:
Krok 1: Podłącz RX i Arduino
Okablowanie jest dość proste. Postanowiłem zasilać Arduino tylko z USB, ponieważ ma emulować urządzenie Joystick. Zasili to Arduino napięciem 5V, które może być wykorzystane również do zasilania odbiornika RC.
Użyłem Pin VCC, który zapewnia regulowane wyjście, a najbliższy pin Gnd - wystarczy podłączyć do pinów + i - złącza PPM. Kiedy Arduino jest zasilany, odbiornik również się włącza.
W przypadku sygnału PPM zdecydowałem się użyć przerwań do ich parsowania. Przerwania dostępne są m.in. na Pin 3, więc po prostu podłącz go tam - nie ma "natywnego pinu RC" na arduino, ale prawdopodobnie więcej i inne sposoby odczytywania sygnału odbiornika.
Musiałem wyłączyć alarm napięcia RX, ponieważ napięcie VCC z zasilaniem USB będzie tylko około 4,5V - ale dość stabilne, więc nie ma problemu.
Krok 2: Uzyskiwanie sygnałów PPM
Kiedy odbiornik ORAZ TX jest zasilany, otrzymywałem sygnały PPM, jak pokazano na obrazku. 16 kanałów, powtarzanych w nieskończoność. Jeśli Failsafe na RSAT jest wyłączony, a nadajnik wyłączony, wyjście PPM będzie wyłączone.
Więcej informacji na temat PPM można znaleźć tutaj:
- https://en.wikipedia.org/wiki/Pulse-position_modul…
- https://wiki.rc-network.de/index.php/PPM
Ponieważ w tym przypadku nie latam prawdziwymi rzeczami, nie dbałem o teoretyczne czasy i właśnie zorientowałem się na oscyloskopie, co mój odbiornik faktycznie wysyła podczas przesuwania drążków z całkowicie w lewo do maksymalnie w prawo (standardowe ustawienia w TX). Wydawało się, że -100% odpowiada impulsom o długości 600µs, a +100% do 1600µs. Nie zależało mi również na długości impulsów pauzy (400µs) w moim kodzie Arduino, ale założyłem odstępy między ramkami min. 3000µs.
Krok 3: Konfiguracja nadajnika
Ponieważ znane jest tylko rzeczywiste położenie powierzchni sterujących, wystarczy jeden kanał / „serwo” na funkcję RC. W związku z tym można wykonać dość prostą konfigurację nadajnika - podobną do normalnego modelu RC. Główne funkcje lotki, steru wysokości, steru kierunku i przepustnicy wymagają tylko jednego serwomechanizmu lub kanału nadajnika. Dodałem również klapy, hamulce i biegi, pozostawiając na razie 9 kanałów wolnych. Należy pamiętać, że klapy zostały wprowadzone w fazie lotu i nie są sterowane bezpośrednio za pomocą drążka, suwaka lub przycisku.
Krok 4: Uruchamianie joysticka
Biblioteka Joystick jest dość łatwa w użyciu i zawiera kilka przykładów i testów. Powinno być pomocne, aby najpierw sprawdzić, czy Arduino jest wykrywany jako właściwy Joystick, instrukcje połączone w sekcji wejściowej i sama biblioteka zapewniają dobre wskazówki.
W panelu sterowania Devices and Printers Arduino wyświetlało się jako „Sparkfun Pro Micro”, a okno testowe joysticka pokazywało 7 osi i wiele obsługiwanych przycisków. Nawet przełącznik kapeluszowy może być używany, gdy jest zaprogramowany w Arduino.
Krok 5: Kodowanie Arduino
To, czego wciąż brakuje, to faktyczne parsowanie sygnału PPM i przypisanie do osi i przycisków joysticka. Zdecydowałem się na następujące mapowanie:
Kanał / funkcja / przypisanie joysticka:
- Przepustnica -> Oś przepustnicy
- Lotka -> oś X
- Winda -> oś Y
- Ster -> Oś obrotu X
- Klapy -> oś obrotu Y
- Hamulec -> oś Z
- Koło zębate -> Przycisk 0
Gdy bieg jest opuszczony, pierwszy przycisk joysticka powinien być wciśnięty i zostanie zwolniony podczas podnoszenia biegu. Będzie to jednak wymagało FSUIPC dla FSX, po wyjęciu z pudełka, FSX zaakceptuje tylko przycisk do przełączania biegów, co nie jest dokładnie tym, co dzieje się z moimi modelami.
Podałem moją obecną wersję kodu z dużą ilością komentarzy, co dla mnie działa całkiem nieźle - możesz zmienić swoje przypisanie lub dodać nowe funkcje. Ostatnie 9 kanałów RC nie jest obecnie używanych.
W celu konfiguracji należy zainicjować klasę Joystick, zasadniczo poprzez zdefiniowanie zakresów osi liczbowych:
/* Ustaw zakres osi (zdefiniowany w nagłówku, 0 - 1000) */
Joystick.setXAxisRange(KANAŁ_MIN, KANAŁ_MAX); Joystick.setYAxisRange(CHANNEL_MIN, CHANNEL_MAX); …
Używając wartości od 0 do 1000, możliwe jest bezpośrednie mapowanie długości impulsu (600 - 1600µs) na wartości joysticka bez przeskalowania.
DIN 3 jest inicjowane jako wejście cyfrowe, włączone podciąganie i dołączone przerwanie:
pinMode(PPM_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(PPM_PIN), PPM_Pin_Changed, CHANGE);
W celach debugowania dodałem kilka wydruków przez interfejs Serial w regularnych odstępach czasu, korzystając z biblioteki arduino-timer:
jeśli (SERIAL_PRINT_INTERVAL > 0) {
scheduler.every(SERIAL_PRINT_INTERVAL, (void*) -> bool { SerialPrintChannels(); return true; }); }
Przerwanie pinu zostanie wywołane za każdym razem, gdy zmieni się wartość logiczna pinu, a więc dla każdej krawędzi w sygnale PPM. Oceń długość impulsu po prostu za pomocą prostego pomiaru czasu za pomocą micros():
uint32_t curTime = micros();
uint32_t pulseLength = curTime - edgeTime; uint8_t curState = digitalRead(PPM_PIN);
Oceniając stan obecnego pinu i łącząc go z długością impulsu i przeszłymi impulsami, można sklasyfikować nowe impulsy. Następujące warunki warunkowe wykryją przerwę międzyramkową:
if(lastState == 0 && długość impulsu > 3000 && długość impulsu < 6000)
W przypadku kolejnych impulsów długość impulsu zostanie odwzorowana na stan osi poprzez obcięcie i ustawienie długości impulsu w celu dopasowania do zakresu osi joysticka:
uint16_t rxLength = długość impulsu;
rxDługość = (rxDługość > 1600) ? 1600: rxDługość; rxDługość = (rxDługość < 600) ? 600: rxDługość; rxChannels[curChannel] = rxLength - 600;
Tablica rxChannels ostatecznie zawiera 16 wartości od 0 do 1000, wskazujących pozycje drążka / suwaka i przycisku.
Po odebraniu 16 kanałów następuje mapowanie do Joysticka:
/* osie */
Joystick.setThrottle(channels[0]); Joystick.setXAxis(kanały[1]); Joystick.setYAxis(1000 - kanały[2]); Joystick.setRxAxis(kanały[3]); Joystick.setRyAxis(kanały[4]); Joystick.setZAxis(1000 - kanały[5]); /* przyciski */ Joystick.setButton(0, (kanały[6] < 500 ? 1: 0)); /* aktualizacja danych przez USB */ Joystick.sendState();
Odwróciłem niektóre osie w kodzie, co nie jest absolutnie konieczne, ponieważ oś można również odwrócić, odwracając kierunek serwomechanizmu lub przypisanie w FSX. Postanowiłem jednak zachować kierunki serwomechanizmu, a także oryginalne przypisanie FSX.
Przycisk jest włączany lub wyłączany przez progowanie kanału 7.
I nie zapomnij zaznaczyć harmonogramu… w przeciwnym razie żadne wydruki debugowania nie będą widoczne.
pusta pętla () {
harmonogram.tick(); }
Na załączonym zrzucie ekranu widać, że kanał 1 został przeniesiony z 1000 (pełna przepustnica) do 0 (bezczynność).
FSX wykryje Arduino tak jak każdy inny joystick, więc po prostu przypisz przycisk i osie i baw się dobrze!
To, co naprawdę podoba mi się w tym podejściu, to to, że możesz po prostu używać swojego nadajnika tak, jak w przypadku prawdziwego modelu, np. z wykorzystaniem faz lotu itp.
Zalecana:
Konwerter doładowania oparty na Esp8266 z niesamowitym interfejsem użytkownika Blynk z regulatorem sprzężenia zwrotnego: 6 kroków
Przetwornik doładowania oparty na Esp8266 z niesamowitym interfejsem użytkownika Blynk z regulatorem sprzężenia zwrotnego: W tym projekcie pokażę Ci wydajny i powszechny sposób zwiększania napięcia DC. Pokażę Ci, jak łatwo można zbudować konwerter doładowania za pomocą Nodemcu. Zbudujmy to. Zawiera również woltomierz ekranowy i informację zwrotną
Konwerter doładowania dla małych turbin wiatrowych: 6 kroków
Boost Converter dla małych turbin wiatrowych: W moim ostatnim artykule o sterownikach śledzenia maksymalnego punktu mocy (MPPT) pokazałem standardową metodę wykorzystania energii pochodzącej ze zmiennego źródła, takiego jak turbina wiatrowa i ładowania akumulatora. Generator, którego użyłem to silnik krokowy Nema
Prosty konwerter logiczny DIY dla urządzeń 3.3V: 4 kroki
Prosty konwerter logiki DIY dla urządzeń 3,3 V: W tym poście pokażę, jak możesz zrobić własny konwerter logiczny 5 V na 3,3 V do podłączenia czujników 5 V do nowych płyt Arduino i Raspberry Pi. Dlaczego potrzebujemy konwertera poziomów logicznych IC ?Większość z Was uwielbia bawić się Arduino i Raspberry Pi podczas
Generator muzyki oparty na pogodzie (generator Midi oparty na ESP8266): 4 kroki (ze zdjęciami)
Generator muzyki oparty na pogodzie (Generator Midi oparty na ESP8266): Cześć, dzisiaj wyjaśnię, jak zrobić własny mały generator muzyki oparty na pogodzie. Jest oparty na ESP8266, który jest trochę jak Arduino i reaguje na temperaturę, deszcz i intensywność światła.Nie oczekuj, że sprawi, że całe utwory lub akordy będą pro
Zasilacz impulsowy wysokiego napięcia (SMPS) / konwerter Boost dla lamp Nixie: 6 kroków
Zasilacz impulsowy wysokiego napięcia (SMPS)/konwerter wzmacniający dla lamp Nixie: Ten zasilacz impulsowy zwiększa niskie napięcie (5-20 woltów) do wysokiego napięcia potrzebnego do zasilania lamp Nixie (170-200 woltów). Uwaga: nawet jeśli ten mały obwód może być zasilany bateriami/niskimi napięciami, moc wyjściowa wystarczy, aby cię zabić! Pr