Close
0%
0%

Hybrid Sim Yoke

A 3-Axis Yoke for Space Simmers with RSI

Similar projects worth following
As a gamer with RSI, sometimes traditional controllers can be outright painful to use. Most control schemes eventually cause my tendons to flare up, which can take me out of commission for a while.

HOTAS systems are particularly bad, which is a shame, because I love space sims. Replacing the twist axis of the joystick with pedals helped, but joysticks are still hard on my wrists and I can't use them for long sessions. Flight yokes seemed like a good solution, but they tend to be seriously overpriced, and no good for racing, which I also enjoy.

That's why I built this abomination. By mounting a steering wheel on a pair of drawer sliders (each with a potentiometer to record the position), I was able to add pitch and yaw axes, making it a capable of both sim racing and space flight control.

In addition to the traditional pitch axis bound to pushing the wheel in and out, I added a yaw axis by allowing the wheel to pull differentially on the two drawer sliders. The math is very simple; the pitch is simply the average of the two potentiometer inputs. The yaw is the difference between the two potentiometer inputs. Finally, the roll is just bound to the main steering wheel axis. Throttle is bound to the pedals, making this a true space bus. Rather than calibrating ranges on the Arduino, I opted to use the built in windows controller calibration so that I could tweak it on the fly.

This device is insanely simple. There are two drawer sliders screwed to a piece of scrap wood. I left the back screws sticking out enough to block the second stage from moving, as the travel ended up being a lot longer than I needed. I also taped a few neodymium magnets to the back, which lock the wheel in place when not in use or for racing games that don't take advantage of the extra axes.

Electronically, everything is just wired into an Arduino Pro Micro, which poses as a game controller.

I've done a few trade runs in my Type 7 (with manual landing, because those extra four cargo slots are everything). The lack of any thruster control reduces the margin for error, but the overall system works astonishingly well. The extra axes are intuitive because they match cleanly with ship motion, and it wasn't long at all before it felt automatic.

View all 6 components

  • 1
    Mount Sliders

    Mount the drawer sliders to the table 7.75 inches apart as shown. Make sure you screw the small side into the table, as the wheel can only clip onto the large side. For the back screws, allow them to stick up enough to prevent the second stage of the slider from moving.

    Secure the potentiometers to the drawer sliders like in the image above. A 3D-printed component would probably be better here, but the command strips worked fine for me (there isn't much force trying to separate them from the table). This is where you can also attach the magnets if you want a back detent. I just used tape. Open the brackets on the steering wheel and clip it to the large sides of the drawer sliders as shown. This should secure it to the sliders, while still allowing it to yaw.

  • 2
    Wire

    Wire as follows: 

     Both potentiometers Pin 1: 5v 

    Both potentiometers Pin 3: ground 

    Left potentiometer Pin 2: A0 

    Right potentiometer Pin 2: A3.

    Note that they have two channels, and all three wires have to connect to the same channel in order for them to register properly.

  • 3
    Program

    Add the library https://github.com/MHeironimus/ArduinoJoystickLibrary to your Arduino environment. Load the following code onto the Arduino (adapted from the excellent article at https://giovannimedici.wordpress.com/2020/10/11/ch-pro-pedals-gameport-to-usb-adapter/ ):

    #include "Joystick.h"
    
    Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,
                       JOYSTICK_TYPE_JOYSTICK, 0, 0,
                       false, false, false, true, true, false,
                       false, false, false, false, false );
    
    void setup() {
      pinMode(A0, INPUT);
      pinMode(A3, INPUT);
      Joystick.begin(false);
    
    }
    
    void loop() {
      int leftPot = analogRead(A0);
      int rightPot = analogRead(A3);
    
      Joystick.setRxAxis(leftPot - rightPot + 512);
      Joystick.setRyAxis(leftPot/2 + rightPot / 2);
      Joystick.sendState();
      delay(20);
    }

    Once the code is loaded, you should see a new game controller. Open game controller settings, right-click on Sparkfun Pro Micro (or whatever yours is called), and then Properties->Settings->Calibrate. Follow the onscreen instructions to calibrate the new axes. You're done! Any game that supports controllers should allow you to use the new axes. 

View all 3 instructions

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates