Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Konwertuje sygnały PPM z odbiornika radiowego na pozycje joysticka
Użyj go, aby grać w swoje ulubione gry i symulatory lotu za pomocą nadajnika radiowego R/C. Ten Instructable używa Arduino firmy littleBits i odbiornika DSMX oraz prostego fragmentu kodu, aby dokonać tej konwersji.
Będziesz potrzebować
- Moc
- Arduino
- Kable USB
- nagłówki pinów
- przewód połączeniowy
- odbiornik radiowy z wyjściem PPM.
Krok 1: Przylutuj nagłówki pinów do dodatkowych portów we/wy Arduino
Aby zasilić odbiornik (RX), należy dodać do Arduino listwy pinowe. Ułatwi to również okablowanie między Bitem a RX. Aby uzyskać więcej informacji, zobacz
Krok 2: Dodaj bibliotekę Arduino Joystick do swojego IDE
Bibliotekę można znaleźć na GitHub, https://github.com/MHeironimus/ArduinoJoystickLib… Dziękuję, Matthew Heironimus, za napisanie jej.
Tylko niektóre Arduino mogą emulować HID jak joystick. Ponieważ mikrokontroler littleBits jest Arduino Leonardo w sercu, jesteś gotowy do pracy.
Krok 3: Flashuj kod na Arduino
#include #define inputPin 16#definiuj kanały 4 #define lo 800 //dostosuj do wyjścia RX#define hi 1600 //dostosuj do wyjścia RX#define filter 10int channel[channels]; int poprzedniaWartość[kanały]; int counter = 0;Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_MULTI_AXIS, 0, 0, true, true, false, false, false, true, true, true, false, false;void setup(){ Joystick.setXAxisRange(lo, Cześć); Joystick.setYAxisRange(lo, hi); Joystick.setThrottleRange(lo, hi); Joystick.setRudderRange(lo, hi); Joystick.początek(); Serial.początek(9600); pinMode(inputPin, INPUT); }void loop(){ if(pulseIn(inputPin, HIGH) > 3000) { for(int i = 0; i <= kanały-1; i++) { kanał=pulseIn(inputPin, HIGH); } for(int i = 0; i <= kanały-1; i++) { if((kanał > 2000) || (kanał <500)) { kanał = poprzedniaWartość; } else { kanał = (poprzedniaWartość+kanał)/2; licznik++; } } Joystick.setXAxis(kanał[0]); Joystick.setYAxis(kanał[1]); Joystick.setThrottle(kanał[2]); Joystick.setRudder(kanał[3]); } if(licznik > filtr) { for(int i = 0; i <= kanały-1; i++) { Serial.print("kanał"); druk.seryjny(i+1); Serial.print(": "); Serial.println(kanał); poprzedniaWartość=kanał; } licznik=0; } }
Należy pamiętać, że kod, który łączy sygnał R/C z emulowanym USB HID, ma najprostszą formę. Użyta tutaj funkcja – pulseIn – jest funkcją blokującą. Przeczytaj tutaj i tutaj, jak zaimplementować podejście nieblokujące przy użyciu przerwań.
Krok 4: Wykonaj okablowanie
Podłącz przewód połączeniowy / kable DuPont między Bit i RX. Złącza na końcach tych kabli muszą być żeńskie. Podłączamy GND (niebieski), VCC (brązowy) i sygnał (pomarańczowy) z portu PPM RX do GND, VCC i d16 na Arduino.
Krok 5: Powiąż odbiornik
Odłącz Arduino od zasilania. Umieść wiązkę wiązania w miejscu złącza oznaczonym BIND na RX. Włącz nadajnik radiowy i przełącz go w tryb wiązania. Następnie podłącz zasilanie do Arduino. Proces wiązania zakończył się pomyślnie, gdy zaświeciła się dioda LED w odbiorniku.
Krok 6: Dostosuj kod do swoich okoliczności
Stałe hi i lo w szkicu Arduino należy zmienić, aby odzwierciedlić rzeczywistą moc odbiornika, którego używasz.
#zdefiniuj lo 800
#definiuj cześć 1600
Sygnały wewnątrz impulsu PPM idealnie mieszczą się w zakresie od 1000 μs do 2000 μs. RX używane w tym instruktażowym wyjściu ma wartości z grubsza od 800 do 1600 i jest nieco inne na każdym kanale. Aby dowiedzieć się, jaki zasięg ma twój odbiornik, otwórz Monitor szeregowy w Arduino IDE, aby zobaczyć wyjście swojego RX. Będzie wyglądać podobnie do tego:
kanał 1: 728
kanał 2: 729 kanał 3: 703 kanał 4: 726 kanał 1: 1681 kanał 2: 1639 kanał 3: 1613 kanał 4: 1676
Kiedy już masz jaśniejsze pojęcie o zakresie, jaki wyprowadza twój RX, wybierz dobre przybliżenia dla hi i lo i odpowiednio zmień stałe. Następnie ponownie prześlij szkic do Arduino.
Krok 7: Skalibruj emulowany joystick
Podłącz urządzenie do komputera i użyj funkcji kalibracji systemu operacyjnego, aby skalibrować emulowany joystick. Dobrym narzędziem dla Linuksa jest jstest-gtk.
Dalsze ulepszenia
- Napisz kod nieblokujący (patrz Krok 3)
- Ustaw zakresy na kanał, a nie globalnie (patrz krok 6)
Dalsza lektura
- Redcon CM703
- PPM