Over the last two years, [benkster] has been perfecting their ideal flight controller. Like many people, they started out with a keyboard and mouse and eventually moved on to a joystick. While a HOTAS (hands on throttle-and-stick — e.g. a yoke controller with inputs right there on the sides) might have been the next logical step, those things cost too much. Naturally, the answer is to build one, ideally for less money. Hey, it could happen.
The design went from just an idea to a cardboard prototype, and then to a wooden enclosure and later, a 3D-printed case. Since [benkster] learned a great deal along the way, they want to give back to the community with a comprehensive joystick design/build guide so that others don’t have to start from zero, overwhelmed with information.
[benkster] wanted three joysticks, a bunch of big buttons, a throttle, a display to show component status (as in, is joystick #3 a joystick right now or a WASD keyboard?), and immersive details everywhere — you know, a million buttons and switches to give it that cockpit feel. [benkster] is using a Teensy 4 to control two 3-axis joysticks and one 2-axis stick. Since this adds up to too many axes for Windows/DirectX to read in, the 2-axis stick is used as a WASD keyboard.
This guide is a great place to start, especially for folks who may be newer to electronics. There are nice introductions to many types of components and tidbits that are relevant outside the world of joysticks.
You want immersive flight simulation away from the PC? Here’s a printable flexure-based ‘stick that snaps right on your Xbox controller and pushes the buttons.
If anyone thinks that a 600 Mhz micro is overkill, he could have used a Raspi 4.
i usually use 3.3v atmega32u4 micros for control mods, usually in the form of knockoff pro micros. the arduino ide has had pluggable usb support for some time. its not hard to roll a library with your own usb hid device descriptor. i presume if you wanted to really push the limits of resolution, latency and refresh, run at a higher usb speed, a high end dev board might give you better performance. but i usually save those for bigger and better projects. at the end of the day you are just sending a few bytes of control data.
i was curious about the way the sticks themselves were built. they’re an off-the-shelf module JH-D4008-M4, you can buy them on ebay for about $20. neat. i wonder how good they are, how reliably they center as they wear and things like that…
been curious about it too. then there is the can of worms of industrial controls, where you can spend north of $100 on a hall effect thumbstick module. some years ago i found a bunch of cast aluminum milspec joystick modules from like the 50s-60s and refurbished a couple of them with custom hall sensors. they are solid but the friction seems a tad uneven. id love to find a set of gimbals that lets me toggle between recentered and frictioned modes and do it without introducing additional play in the controller.
hotas units are really overpriced for what they are. and many of them, even top tier ones are inferior to the ms joysticks that came out 20 years ago. the bigger issue is current generations of game devs have forgotten how to implement joysticks correctly. not to mention microsoft has done a lot to derp up the various joystick apis they have pushed out since direct input was deprecated.
building your own is not only significantly cheaper, you can get more resolution, more functions, employ cutting edge sensor tech and you can design them specifically for the type of game you play employing proper control theory.
having monkeyed around with VJOY, those 8 total axes are exactly few enough to fit into DX –
X/Y/Z, Rx/Ry/Rz, S (slider), D (dial)
I believe the Arduino Joystick library by MHeironymous supports all 8 in one device, although it becomes a Widget-level problem at that point, not a Software or firmware one – the Pro Micro only has 6 Analog Inputs
Is that 8 per HID descriptor/device ? It should be possible to use the HID descriptor to set up 2 or more devices off the one connection, right ? I have no idea how this would be done in Arduino, probably a little constrained, but I’ve done it before using the Pi PICO. Requires futzing around a bit with the descriptors and digging into the details of TinyUSB a bit. Caveat: I had something simultaneously described as a separate mouse, keyboard, and serial device, not as multiple controller devices.
you should be able to use the MHeironymous library and define all 8 axes with no extra legwork, but sourcing the extra two axes hardware input is a different exercise – you could daisy chain two arduinos together for more I/O, or use a dedicated I/O expander chip; what’s really fun is when you’re modding an old joystick from the gameport era and have to use an analog input for the Hat Switch because of how it’s wired (resistor ladder-like)
and yeah, I think the MH library can declare multiple HID Joystick devices up to mmmmmmm four? I’d have to check to be sure
People who use a 3d printer to build rectangular boxes are clearly missing something…
a woodworking class in high school?
enough room in their home for a well-equipped woodshop? a hackerspace within easy reach?
a dust extraction system?