The trusty old Thrustmaster Hotas X is great starter joystick for flight simulation enthusiasts, but it has only 12 buttons… Here’s how you can upgrade it.
This joystick is easy to disassemble and quite serviceable. It has plenty of room inside for upgrades and the plastic is thick and easy to work with. I have put inside all the spare buttons I had left over from other projects. Four of them were really nice DT6 tact switches intended for board mounting, one on the edge of the throttle is a cut off button pushing a spring tack switch, and two on the joystick base were really ugly high current switches. I’ve also added an analog thumbstick (from PSP).
Note 1: As you can see, when mounting the analog stick I burned the plastic and it is visible on the outside. Also when drilling holes make sure to not overheat the plastic, it will bulge on the edges.
Note 2: You can add a lot more buttons. There’s space for it.
To drive all that I have used an Arduino Leonardo clone board (Pro Micro). To have it all on one USB cable I have put a passive USB hub inside the joystick base. Throttle base with the Arduino inside is connected with the joystick through an USB 3.0 connector. This allows for an easy disconnection of the two bases and easy extension should I ever decide to use them separately (I never do now). Arduino uses only two USB data wires, remaining four of the USB 3.0 cable are used for additional joystick buttons.
Note 1: Both original joystick and the Arduino share a common ground. This allows you to connect one end of the switch to the closest ground you have, so only one wire needs to get to Arduino.
Note 2: Initially I wanted to have the USB 3.0 socket neatly on the edge of the joystick, but that has made assembly impossible. Had to move the connection inside to allow flexibility.
Note 3: Turns out all that shielding on USB cables is there for a reason. Once I’ve made a tangled mess of the wires on the USB hub and the devices became unstable.
Pro Micro boards have a built in USB HID interface which is recognized by the OS without any drivers. I have written a simple sketch using the Arduino Joystick library and modified the HID descriptor to remove all the unnecessary joystick buttons, axes, etc. The code is available on GitHub.