Innehållsförteckning:
- Tillbehör
- Steg 1: Koppla upp RX och Arduino
- Steg 2: Få några PPM -signaler
- Steg 3: Konfigurera sändaren
- Steg 4: Kör joysticken
- Steg 5: Kodning av Arduino
Video: Arduino -baserad (JETI) PPM till USB -joystick -omvandlare för FSX: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:39
Jag bestämde mig för att byta min JETI DC-16-sändare från läge 2 till läge 1, som i princip växlar gas och hiss från vänster till höger och vice versa. Eftersom jag inte ville krascha en av mina modeller på grund av viss vänster/höger förvirring i min hjärna undrade jag om det är möjligt att träna lite i FSX.
Jag läste och testade att JETI -sändarna faktiskt stöder ett joystick -läge ur lådan, men jag ville ha full flexibilitet för axlarna och omkopplarna och använda TX som med en riktig modell. Genom att använda mottagarens utgång är det också möjligt att utnyttja signalbehandlingen i DC-16 och använda mixers, flygfaser, dubbla hastigheter, vad du än kan programmera där.
Nyligen hittade jag en trevlig handledning om hur man gör en USB HID -ingångsenhet, nämligen en joystick, från en billig Arduino som en Pro Micro:
www.instructables.com/id/Create-a-Joystick…
Detta skulle möjliggöra allt som behövs för att styra ett plan / helikopter / vad som helst i FSX! Massor av axlar och knappar tillgängliga.
Eftersom jag precis hade en extra JETI RSAT2 bestämde jag mig för att koppla ihop den med Arduino och försöka implementera en liten PPM -parser tillsammans med joystickbiblioteket.
Jag antar att någon som följer dessa steg är bekant med att ansluta och programmera en Arduino. Jag tar inga garantier för fel eller skador!
Tillbehör
Du kommer behöva…
- vilken Arduino som helst som stöds av joystickbiblioteket använde jag en Sparkfun Pro Micro 5V / 16 MHz
- en ny version av Arduino IDE
- alla RC -mottagare som matar ut en PPM -signal, som JETI RSAT2
- några bygelkablar (min. 3)
- joystick -biblioteket installerat i Arduino IDE
- arduino-timer-biblioteket:
Steg 1: Koppla upp RX och Arduino
Ledningarna är ganska enkla. Jag bestämde mig för att bara driva Arduino från USB, eftersom den ska emulera en joystick -enhet. Detta kommer att förse Arduino med 5V, som också kan användas för att driva RC -mottagaren.
Jag använde Pin VCC, som ger reglerad utgång, och närmaste Gnd -stift - anslut bara den till PPM: s kontakt + och - stift. När Arduino får ström startar mottagaren nu också.
För PPM -signalen bestämde jag mig för att använda avbrott för att analysera dem. Avbrott finns t.ex. vid Pin 3, så det är bara att ansluta det där - det finns ingen "native RC -pin" på arduino, men möjligen fler och olika sätt att läsa in mottagarsignalen.
Jag var tvungen att inaktivera RX -spänningslarmet, eftersom VCC -spänningen med USB -matning bara kommer att vara runt 4,5V - men ganska stabil, så inga problem alls.
Steg 2: Få några PPM -signaler
När mottagaren OCH TX är strömförande fick jag PPM -signaler som visas på bilden. 16 kanaler, upprepade för alltid. Om Failsafe på RSAT är inaktiverad och sändaren är avstängd kommer PPM -utdata att inaktiveras.
Mer information om PPM finns här:
- https://en.wikipedia.org/wiki/Pulse-position_modul…
- https://wiki.rc-network.de/index.php/PPM
Eftersom jag inte flyger riktiga grejer i det här fallet brydde jag mig inte om de teoretiska tiderna och tänkte bara på oscilloskopet vad min mottagare utmatade akut när jag flyttade pinnarna från helt vänster till helt höger (standardinställningar i TX). Det verkade -100% motsvarar pulser med en längd av 600µs och +100% till 1600µs. Jag brydde mig inte heller om längden på pauspulserna (400 µs) i min Arduino -kod, men jag antog ett ramavstånd på min. 3000 µs.
Steg 3: Konfigurera sändaren
Eftersom endast kontrollytornas faktiska läge behöver vara känt, räcker det med en kanal / "servo" per RC -funktion. Följaktligen kan en ganska enkel sändarinställning göras - liknande en vanlig RC -modell. Huvudfunktionerna aileron, hiss, roder och gasreglage kräver var och en endast en servo respektive sändarkanal. Jag har också lagt till klaffar, bromsar och växlar, så att 9 kanaler är lediga hittills. Observera att klaffar sattes i en flygfas och inte styrs direkt via en pinne, reglage eller knapp.
Steg 4: Kör joysticken
Joystick -biblioteket är ganska enkelt att använda och ger några exempel och tester. Det bör vara till hjälp att först kontrollera om Arduino upptäcks som korrekt joystick, instruktionerna som länkas i inmatningsavsnittet och biblioteket i sig ger bra vägledning.
På kontrollpanelen Enheter och skrivare visade sig Arduino som "Sparkfun Pro Micro" och joystick -testfönstret visade 7 axlar och massor av knappar som stöds. Även en hattbrytare kan användas när den är programmerad i Arduino.
Steg 5: Kodning av Arduino
Det som fortfarande saknas är den faktiska analysen av PPM -signalen och tilldelning till joystickaxlar och knappar. Jag bestämde mig för följande kartläggning:
Kanal / funktion / joystick -tilldelning:
- Gasreglage -> Gasreglageaxel
- Aileron -> X -axel
- Hiss -> Y -axel
- Rod -> X rotationsaxel
- Flikar -> Y -rotationsaxel
- Broms -> Z -axel
- Kugghjul -> Knapp 0
När växeln är nere ska den första knappen på joysticken trycks in och släppas när växeln höjs. Detta kommer dock att kräva FSUIPC för FSX, utanför lådan, FSX accepterar bara en knapp för att växla växeln, vilket inte är exakt vad som händer med mina modeller.
Jag gav min nuvarande version av koden många kommentarer, vilket fungerar ganska bra för mig - ändra gärna ditt uppdrag eller lägg till nya funktioner. De senaste 9 RC -kanalerna används för närvarande inte.
För installationen måste joystick -klassen initialiseras, i princip genom att definiera de numeriska axelområdena:
/ * Ställ in axelområdet (definierat i rubriken, 0 - 1000) */
Joystick.setXAxisRange (CHANNEL_MIN, CHANNEL_MAX); Joystick.setYAxisRange (CHANNEL_MIN, CHANNEL_MAX); …
Genom att använda värden från 0 till 1000 är det möjligt att direkt mappa pulslängden (600 - 1600µs) till joystickvärdena utan att skala om.
DIN 3 initieras som digital ingång, pullups aktiverad och ett avbrott bifogat:
pinMode (PPM_PIN, INPUT_PULLUP);
attachInterrupt (digitalPinToInterrupt (PPM_PIN), PPM_Pin_Changed, CHANGE);
För felsökningsändamål lade jag till några utskrifter via det seriella gränssnittet med jämna mellanrum med hjälp av arduino-timer-biblioteket:
om (SERIAL_PRINT_INTERVAL> 0) {
scheduler.every (SERIAL_PRINT_INTERVAL, (void*) -> bool {SerialPrintChannels (); return true;}); }
Stiftets avbrott kommer att anropas när stiftets logiska värde har ändrats, så för varje kant i PPM -signalen. Utvärdera pulslängden bara genom enkel timing med hjälp av mikros ():
uint32_t curTime = micros ();
uint32_t pulseLength = curTime - edgeTime; uint8_t curState = digitalRead (PPM_PIN);
Genom att utvärdera det aktuella stiftets tillstånd och kombinera det med pulslängden och tidigare pulser kan de nya pulserna klassificeras. Följande villkorlig kommer att upptäcka mellanramens gap:
if (lastState == 0 && pulslängd> 3000 && pulslängd <6000)
För efterföljande pulser kommer pulslängden att mappas till ett axeltillstånd genom att klippa och förspänna pulslängden för att matcha joystickaxelområdet:
uint16_t rxLength = pulsLängd;
rxLength = (rxLength> 1600)? 1600: rxLängd; rxLängd = (rxLängd <600)? 600: rxLängd; rxChannels [curChannel] = rxLength - 600;
RxChannels -gruppen innehåller så småningom 16 värden från 0 - 1000, vilket indikerar stick / skjutreglage och knapplägen.
Efter att ha mottagit 16 kanaler utförs mappningen till joysticken:
/ * axlar */
Joystick.setThrottle (kanaler [0]); Joystick.setXAxis (kanaler [1]); Joystick.setYAxis (1000 - kanaler [2]); Joystick.setRxAxis (kanaler [3]); Joystick.setRyAxis (kanaler [4]); Joystick.setZAxis (1000 - kanaler [5]); / * knappar */ Joystick.setButton (0, (kanaler [6] <500? 1: 0)); / * uppdatera data via USB */ Joystick.sendState ();
Jag inverterade några axlar i koden, vilket inte är absolut nödvändigt, eftersom axeln också kan inverteras genom att vända servoriktning eller tilldelningen i FSX. Jag bestämde mig dock för att behålla servoriktningarna och även det ursprungliga FSX -uppdraget.
Knappen slås på eller av med tröskelvärde för kanal 7.
Och glöm inte att kryssa i schemaläggaren … annars kommer inga felsökningsutskrifter att synas.
void loop () {
scheduler.tick (); }
På skärmdumpen jag bifogade kan du se, kanal 1 flyttades från 1000 (full gas) till 0 (inaktiv).
FSX kommer att upptäcka Arduino precis som alla andra joystick, så tilldela bara knappen och axlarna och ha kul att ta fart!
Det jag verkligen gillar med detta tillvägagångssätt är att du bara kan använda din sändare som med en riktig modell, t.ex. använda flygfaser etc.
Rekommenderad:
Övertyga dig själv om att bara använda en 12V-till-AC-omriktare för LED-ljussträngar istället för att koppla om dem för 12V: 3 steg
Övertyga dig själv om att bara använda en 12V-till-AC-linjeomvandlare för LED-ljussträngar istället för att koppla om dem för 12V: Min plan var enkel. Jag ville klippa upp en väggdriven LED-ljussträng i bitar och sedan dra om den för att gå av 12 volt. Alternativet var att använda en kraftomvandlare, men vi vet alla att de är fruktansvärt ineffektiva, eller hur? Höger? Eller är de det?
Lägga till en direkt line-in till din bilstereo för en iPod/mp3-spelare: 5 steg
Lägga till en direkt line-in till din bilstereo för en iPod/mp3-spelare: Denna instruktion visar hur du lägger till en extra ingång, som ett hörlursuttag, till din bil så att du kan lyssna på en iPod/mp3-spelare/GPS eller allt som har en line-out genom din bils stereo. Medan jag kommer att lägga till den på min '99 Chevy Subu
Lägg till en PC-synkroniseringskontakt till en Nikon Sc-28 Ttl-kabel (använd Autoinställningar för en på kamerablixt och avaktivera kamerans blixtar!): 4 steg
Lägg till en PC-synkroniseringskontakt till en Nikon Sc-28 Ttl-kabel (använd Autoinställningar för en på blixt på kameran och avaktivera kamerans blixtar!): I den här instruktören kommer jag att visa dig hur du tar bort en av dessa irriterande 3-stifts TTL-kontakter på sidan av en Nikon SC-28 avstängd kamera TTL-kabel och ersätt den med en vanlig PC-synkroniseringskontakt. detta låter dig använda en dedikerad blixt,
Lägga till obegränsat minne till en EVO T20 med NT4e för att göra en användbar dator: 7 steg
Lägga till obegränsat minne till en EVO T20 Med NT4e för att göra en användbar dator: Compaq EVO T20 tunna klienter kan hämtas för mindre än $ 50 och är i princip begränsade minidatorer, som med lite fritt tillgänglig programvara och viss installation kan göras till en användbar tyst lågspännings stationär dator. Huvudfrågan
12v till USB -adapter 12v till 5v transformator (perfekt för bilar): 6 steg
12v till USB -adapter 12v till 5v transformator (bra för bilar): Detta visar hur du gör en 12v till USB (5v) adapter. Den mest uppenbara användningen av detta är för 12v biladaptrar, men var som helst du har 12v kan du använda det! Om du behöver 5v för något annat än USB, hoppa bara över stegen om att lägga till USB -portarna