Tartalomjegyzék:

Arduino alapú (JETI) PPM - USB joystick konverter FSX -hez: 5 lépés
Arduino alapú (JETI) PPM - USB joystick konverter FSX -hez: 5 lépés

Videó: Arduino alapú (JETI) PPM - USB joystick konverter FSX -hez: 5 lépés

Videó: Arduino alapú (JETI) PPM - USB joystick konverter FSX -hez: 5 lépés
Videó: Open lock with a RFID Reader using Arduino 🔐💳😲 #diy #arduino #arduinoproject #howto #how #electronic 2024, November
Anonim
Arduino alapú (JETI) PPM - USB joystick konverter az FSX számára
Arduino alapú (JETI) PPM - USB joystick konverter az FSX számára
Arduino alapú (JETI) PPM - USB joystick konverter az FSX számára
Arduino alapú (JETI) PPM - USB joystick konverter az FSX számára

Úgy döntöttem, hogy a JETI DC-16 távadómat a 2-es üzemmódból 1-es módba kapcsolom, amely alapvetően a fojtószelepet és a liftet balról jobbra kapcsolja, és fordítva. Mivel nem akartam összeomlani az egyik modellemet az agyamban lévő bal/jobb zűrzavar miatt, kíváncsi voltam, hogy lehet -e egy kicsit gyakorolni az FSX -ben.

Olvastam és teszteltem, hogy a JETI távadók valójában támogatják a Joystick módot a dobozból, de teljes rugalmasságot akartam a tengelyek és kapcsolók hozzárendeléséhez, és a TX -et úgy használom, mint egy igazi modellnél. A vevő kimenetének felhasználásával a DC-16 jelfeldolgozását is kihasználhatja, és keverőket, repülési fázisokat, kettős sebességeket használhat, bármit is programozhat ott.

Nemrég találtam egy szép oktatóanyagot arról, hogyan lehet USB HID bemeneti eszközt, nevezetesen joystickot készíteni egy olcsó Arduino -ból, mint egy Pro Micro:

www.instructables.com/id/Create-a-Joystick…

Ez lehetővé tenné mindent, ami egy repülőgép / helikopter / bármi irányításához szükséges az FSX -ben! Rengeteg tengely és gomb áll rendelkezésre.

Mivel most volt egy tartalék JETI RSAT2, úgy döntöttem, hogy összekötem az Arduino -val, és megpróbálok egy kis PPM -elemzőt megvalósítani a Joystick könyvtárral együtt.

Feltételezem, hogy bárki, aki ezeket a lépéseket követi, ismeri az Arduino csatlakoztatását és programozását. Nem vállalok garanciát a meghibásodásokért vagy károkért!

Kellékek

Szükséged lesz…

  • bármelyik Arduino -t, amelyet a Joystick könyvtár támogat, Sparkfun Pro Micro 5V / 16 MHz -et használtam
  • az Arduino IDE legújabb verziója
  • bármely RC vevő, amely PPM jelet ad ki, például a JETI RSAT2
  • néhány áthidaló vezeték (min. 3)
  • az Arduino IDE -ben telepített Joystick könyvtár
  • az arduino-timer könyvtár:

Lépés: Csatlakoztassa az RX -et és az Arduino -t

Csatlakoztassa az RX -et és az Arduino -t
Csatlakoztassa az RX -et és az Arduino -t
Csatlakoztassa az RX -et és az Arduino -t
Csatlakoztassa az RX -et és az Arduino -t

A huzalozás nagyjából egyszerű. Úgy döntöttem, hogy csak az USB -ről táplálom az Arduino -t, mivel ez Joystick eszközt fog emulálni. Ez biztosítja az Arduino 5 V -os tápellátását, amely az RC vevő tápellátására is használható.

A szabályozott kimenetet biztosító Pin VCC -t és a legközelebbi Gnd -tűt használtam - csak csatlakoztassa a PPM csatlakozójához + és - csapok. Amikor az Arduino bekapcsol, a vevő is bekapcsol.

A PPM jel esetében úgy döntöttem, hogy megszakításokkal elemzem őket. Megszakítások állnak rendelkezésre pl. a 3. tűnél, tehát csak csatlakoztassa oda - nincs "natív RC -tű" az arduino -n, de valószínűleg több és különböző módon olvasható be a vevőjel.

Le kellett tiltanom az RX feszültségriasztást, mivel a VCC feszültség USB tápellátással csak 4,5 V körül lesz - de elég stabil, tehát semmi probléma.

2. lépés: Néhány PPM -jel lekérése

Néhány PPM jel lekérése
Néhány PPM jel lekérése
Néhány PPM jel lekérése
Néhány PPM jel lekérése

Amikor a vevő és a TX be van kapcsolva, a képen látható PPM jeleket kaptam. 16 csatorna, örökké ismételve. Ha az RSAT hibatűrése le van tiltva, és az adó ki van kapcsolva, a PPM kimenet le lesz tiltva.

További információ a PPM -ről itt található:

  • https://en.wikipedia.org/wiki/Pulse-position_modul…
  • https://wiki.rc-network.de/index.php/PPM

Mivel ebben az esetben nem valódi dolgokkal repülök, nem törődtem az elméleti időzítéssel, és csak az oszcilloszkópon találtam ki, hogy a vevőm pontosan mit ad ki, amikor a botokat teljesen balról teljesen jobbra mozgatja (a TX szabványos beállításai). Úgy tűnt, hogy -100% 600 µs impulzusoknak felel meg, és +100% -tól 1600 µs -ig. Nem törődtem a szünetimpulzusok hosszával (400µs) az Arduino kódomban, de min. 3000µs.

3. lépés: Az adó konfigurálása

Az adó beállítása
Az adó beállítása
Az adó beállítása
Az adó beállítása
Az adó beállítása
Az adó beállítása

Mivel csak a vezérlőfelületek tényleges helyzetét kell tudni, RC funkciónként elegendő egy csatorna / "szervo". Következésképpen meglehetősen egyszerű távadót lehet beállítani - hasonlóan a normál RC modellhez. A csűrő, a lift, a kormány és a fojtószelep fő funkciói csak egy szervót vagy adó csatornát igényelnek. Hozzáadtam a szárnyakat, a fékeket és a fogaskerekeket is, így 9 csatorna maradt szabadon. Kérjük, vegye figyelembe, hogy a szárnyak repülési fázisba kerültek, és nem közvetlenül bot, csúszka vagy gomb segítségével vezérelhetők.

4. lépés: A joystick futtatása

A joystick futtatása
A joystick futtatása
A joystick futtatása
A joystick futtatása

A Joystick könyvtár használata nagyon egyszerű, és néhány példát és tesztet tartalmaz. Hasznos lehet először ellenőrizni, hogy az Arduino -t megfelelő joysticknak találták -e, a belépési részben linkelt utasítások és maga a könyvtár jó útmutatást nyújtanak.

Az Eszközök és nyomtatók vezérlőpulton az Arduino "Sparkfun Pro Micro" néven jelent meg, a joystick tesztablakában pedig 7 tengely és rengeteg támogatott gomb látható. Az Arduino programozásakor akár kalapos kapcsoló is használható.

5. lépés: Az Arduino kódolása

Az Arduino kódolása
Az Arduino kódolása
Az Arduino kódolása
Az Arduino kódolása

Ami még hiányzik, az a PPM jel tényleges elemzése és a joystick tengelyekhez és gombokhoz való hozzárendelés. A következő térképezés mellett döntöttem:

Csatorna / funkció / joystick hozzárendelés:

  1. Fojtószelep -> Gáztengely
  2. Csűrő -> X tengely
  3. Lift -> Y tengely
  4. Kormány -> X forgástengely
  5. Lapok -> Y forgástengely
  6. Fék -> Z tengely
  7. Fogaskerék -> Gomb 0

Amikor a sebességváltó le van kapcsolva, a joystick első gombját kell megnyomni, és elengedik a sebességfokozat felemelésekor. Ehhez azonban szükség lesz az FSUIPC -re az FSX -hez, a dobozból, az FSX csak egy gombot fogad el a sebességváltáshoz, ami nem pontosan az én modelljeimmel történik.

Sok megjegyzést fűztem a kód jelenlegi verziójához, ami számomra elég jól működik - nyugodtan módosítsa a hozzárendelést, vagy adjon hozzá új funkciókat. Az utolsó 9 RC csatorna jelenleg nincs használatban.

A beállításhoz a Joystick osztályt inicializálni kell, alapvetően a numerikus tengelytartományok meghatározásával:

/ * Tengelytartomány beállítása (a fejlécben van megadva, 0 - 1000) */

Joystick.setXAxisRange (CHANNEL_MIN, CHANNEL_MAX); Joystick.setYAxisRange (CHANNEL_MIN, CHANNEL_MAX); …

A 0 és 1000 közötti értékek használatával az impulzushossz (600 - 1600µs) közvetlenül hozzárendelhető a joystick értékeihez, átméretezés nélkül.

A DIN 3 digitális bemenetként van inicializálva, lehúzások engedélyezve és megszakítás csatolva:

pinMode (PPM_PIN, INPUT_PULLUP);

attachInterrupt (digitalPinToInterrupt (PPM_PIN), PPM_Pin_Changed, CHANGE);

Hibakeresés céljából rendszeres időközönként hozzáadtam néhány nyomtatást a soros felületen keresztül, az arduino-timer könyvtár használatával:

ha (SERIAL_PRINT_INTERVAL> 0) {

Scheduler.every (SERIAL_PRINT_INTERVAL, (void*) -> bool {SerialPrintChannels (); return true;}); }

A csap megszakítása meg lesz hívva, amikor a csap logikai értéke megváltozik, tehát a PPM jel minden élére. Értékelje az impulzus hosszát egyszerű időzítéssel a micros () használatával:

uint32_t curTime = micros ();

uint32_t pulseLength = curTime - edgeTime; uint8_t curState = digitalRead (PPM_PIN);

Az aktuális tüskés állapot kiértékelésével és az impulzus hosszával és a korábbi impulzusokkal való kombinálásával az új impulzusok osztályozhatók. A következő feltétel észleli a keretek közötti rést:

if (lastState == 0 && pulseLength> 3000 && pulseLength <6000)

A következő impulzusok esetében az impulzushossz egy tengelyállapothoz lesz hozzárendelve úgy, hogy az impulzus hosszát levágja és előfeszíti, hogy megfeleljen a joystick tengely tartományának:

uint16_t rxLength = pulseLength;

rxLength = (rxLength> 1600)? 1600: rxHossz; rxLength = (rxLength <600)? 600: rxHossz; rxChannels [curChannel] = rxLength - 600;

Az rxChannels tömb végül 16 értéket tartalmaz 0 - 1000 között, jelezve a bot / csúszka és a gomb helyzetét.

16 csatorna vétele után a joystick leképezése történik:

/ * tengelyek */

Joystick.setThrottle (csatornák [0]); Joystick.setXAxis (csatornák [1]); Joystick.setYAxis (1000 - csatornák [2]); Joystick.setRxAxis (csatornák [3]); Joystick.setRyAxis (csatornák [4]); Joystick.setZAxis (1000 - csatorna [5]); / * gombok */ Joystick.setButton (0, (csatornák [6] <500? 1: 0)); / * adatok frissítése USB -n keresztül */ Joystick.sendState ();

Megfordítottam néhány tengelyt a kódban, ami nem feltétlenül szükséges, mivel a tengely megfordítható a szervo irányának elfordításával vagy az FSX -ben való hozzárendeléssel is. Azonban úgy döntöttem, hogy megtartom a szervo irányokat és az eredeti FSX hozzárendelést.

A gomb be- vagy kikapcsolása a 7. csatorna küszöbértékével történik.

És ne felejtse el bejelölni az ütemezőt … különben nem jelennek meg hibakeresési nyomatok.

void loop () {

ütemező.pipa (); }

A csatolt képernyőképen láthatja, hogy az 1. csatorna 1000 -ről (teljes gázzal) 0 -ra (tétlen) került.

Az FSX ugyanúgy észleli az Arduino -t, mint bármelyik joystick, ezért csak hozzá kell rendelni a gombot és a tengelyeket, és jó szórakozást a felszálláshoz!

Ami nagyon tetszik ebben a megközelítésben, az az, hogy az adót csak úgy használhatja, mint egy valódi modellnél, pl. repülési fázisok használata stb.

Ajánlott: