Custom Controllers

It all began with Flight Simulators. I was browsing on YouTube and at the top of the recommended sidebar there was a video entitled $50 overhead panel. After watching and some search engine queries I had found it out was relatively easily done with some low cost (and as it turned out, occasionally high cost) hardware and software.

Skill building

I wasn’t starting out completely blind thankfully.

In terms of woodworking, my Dad is a carpenter so I have most of the tools I need to hand already, and I did both Junior Certificate Technical Graphics and Woodwork for 3 years and Leaving Certificate Construction Studies for 2 years in secondary school, getting a C, A and B3 respectively, all Higher Level. Needless to say I know how to  calculate & draw up the designs beforehand, operate the tools, and put everything together.

Electronics is a different story. Metalwork wasn’t offered in my school so I didn’t really have much practical knowledge and I had few of the tools and materials I needed. I had only done some basic electronics work maintaining my electric guitar’s internals and building a custom one, though admittedly it was minor work and my soldering jobs were still eye-wateringly bad by the end.

Early “repair” work circa April 2015, one of the very first things I soldered. Desoldering was easy enough, but soldering things together was much more of a challenge as at the time all I had access to was an inaccurate, heavy duty soldering gun, rather than an iron.

First steps: Custom Guitar

As part of the Woodworking and Construction Studies examinations, there was a practical project to be made according to a design brief. For Woodwork I seem to remember it being something along the lines of “make an artistic display piece”, so I decided to make a model Electric guitar, albeit with no features whatsoever because 15 year old me didn’t even know what the inside of a guitar looked like, let alone how it worked. (For those interested my Construction Studies project was a bedside locker which I’m still using every day 6 years later)

The project ended up just being a piece of ash in a guitar shape, a walnut veneered-hardboard pickguard, and a carved mahogany neck, and once finished and examined was left just collecting dust on top of my wardrobe for years. Until I opted to completely replace the electronics in my guitar (which, as an aside, was also collecting dust for years because I couldn’t learn to play until I got Rocksmith in 2014, after buying the guitar off a classmate back in 2007). I bought a pre-wired pickguard that had all the electronics installed, leaving all the old ones spare. Rather than throw them out I noticed my old project one day, took it down, dusted it off and started planning.


After deciding on a much more practical design that would actually fit a real neck, I sketched it out, recut to the new shape,

routed out the space for the electronics

and put the all hardware in/together.

The neck I had made had actually turned out quite nice, but sadly wasn’t the right dimensions to be able to be used, so I discarded it and got a neck from a proper guitar.


Breakin’ 2: Electronic Boogaloo

The next time my soldering equipment was fired up, and my introduction to PCBs, was after I got a Xbox One. I found the provided headset was quite uncomfortable, and my dedicated gaming headset at the time didn’t work with it because it used a 2.5mm jack for voice and I wasn’t willing to pay for the Stereo headset adapter if there was a cheaper way.

Which there was.

I read a guide online about how to attach a cable with a 2.5mm jack to the puck of the Xbox One headset, followed it and deconstructed the puck, was happy when it worked initially, angry when it failed eventually a week later, and grumpy when I had to ultimately pay for the adapter.

At this stage the soldering gun was no longer working properly, so I was using a cheap shit 15w soldering iron which never got hot enough to easily melt the solder, and had a habit of giving me an electric shock every time I touched an exposed screw on the plastic handle. I was thrilled when I got a great replacement one from Lidl which was 20x better and about €5 cheaper than the bad one, which I threw it out with gusto.

Back to where this post begins.

The tutorials I was looking at all mentioned one of either 2 things: A dedicated joystick board made by a guy called Leo Bodnar, or Arduino.

I had a rough understanding of what an Arduino was because one of the groups doing their final year computing project at the same time as me were making a arduino-controlled quadcopter. I had gathered that it was a circuit board that we could program relatively easily because we were taught C# for 3 years at that stage, but other than that I didn’t look into it too much and focused on our own project and the fact my laptop of 7 years had failed meaning I couldn’t work on it.

At the time I was looking at the tutorials I was enjoying FSX quite a lot, and the Aerosoft A320 was my plane of choice. However, because:

  • flying a plane is a complicated task (who knew) that involves a lot of dials and switches than need to be used at particular times
  • my laptop was only moderate spec
  • Flight Simulator X is a decade old piece of software written with DirectX 9
  • It has difficulty taking advantage of modern GPUs and instead relying mostly on single core processor clock speed

my framerate was crap. That made turning the camera to view the switches on the overhead panel a slow process at time where focusing on flying and the instruments is important, coupled with the fact I’d have to take my hands off the joystick to move the mouse.

Most of the light switches, which are turned on at various stages while taxiing to the runway, turned off after taking off, turned on during approach and turned off  after landing during taxi to the gate, are on the bottom of the overhead panel, so I decided that my first physical panel was going to be of the bottom 2 rows of the overhead of the A320

By chance, when I was in an electronics shop in Galway while passing through one, I was pricing up toggle switches and found an arduino Uno for sale (at a massive markup as I later found out when getting a different arduino) and opted to buy a few of the components there and then.

In retrospect it was foolish to just buy the Arduino with no jumpers or breadboard, but to be fair I only found out about them later. Still doesn’t excuse not getting any wire, a mistake that would keep costing me quite dearly throughout the project until I eventually invested in some towards the very end.

So at that stage I had the parts, but had no idea how they’d ultimately operate controls in game, until eventually coming across a program called UnoJoy, which in essence turned the Arduino into a HID game controller. Just connect a pin to ground and it acted as a button press, great, simple!

Still didn’t have a breadboard at this stage but salvaged some wires from an ancient PC power supply. Sticking stranded wire into a header is a nightmare and absolutely not a viable option I quickly learned

UnoJoy was a great solution but not without its problems, mostly that it was UnoJoy or custom programming on the Arduino, but not both at the same time.

I also realised that the Uno simply didn’t have enough headers for all the connections I needed to make, so ordered an Arduino Mega and thankfully, a breadboard and some jumper wires.

After getting the rest of the toggle switches and the new hardware I planned out on a spare hardboard panel I had lying around and put the switches into it.

I was faced with more problems though. I had the jumpers sure, and they fit neatly into the headers on the arduino and stayed unless you pulled them out, but they were nowhere near long enough to reach all the switches, and they were male-male so I couldn’t connect the wires to them, so this is where things started to get ugly. I would crimp a connecter onto the end of wire thick enough to use in a household plug, let alone electronics, that crimped connector would fit perfectly on to the toggle switches, but the other end would be put into a terminal block connector, again meant for household AC electrics, in order to connect to the jumper wire.

It gets worse. Much worse.

I kept going this way but was running out of suitable lengths of (unsuitable) wire, and jumpers. I took the breadboard out of the equation altgether and started merging ground wires together until they all went to a single jumper to free up some jumpers, then put in the rest. I attempted some “cable management” with non-shrunken heatshrink tubes, but the result is still horrifying enough to make the average PC build snob’s head explode:

I warned you.

The software was a different story. One would think that a flight simulator, a program designed by people who know that some users would ultimately try to interface custom hardware with it, would have loads of options in the controller configuration page. And if I was using X-Plane at the time you’d be right, as it has a nice, comprehensive list of controls, and should you need to take even more control than minding a joystick button it exposes basically every single variable to the users to read and write as they see fit, either over UDP or Serial.

But we’re not talking about X-Plane (yet). We’re talking about FSX. Which has a medium length list of controls that you can either bind to a key, button, key release or button release.

None of the major 3rd party add-on developers use these bindings. They make their own scripting systems meaning some controls can only be manipulated using the in-game 3D knobs and controls.

To get access to these scripting offsets, you need to pay €30 for a program called FSUIPC, which exposes them but with the problem that every developer uses different offsets so what works to control one plane won’t work for another. The costs were starting to spiral out of control for a simulator with terrible performance and stability that had only cost €7.50 on Steam, the reason why becoming more obvious with time. But despite all that, after getting FSUIPC and a program called LINDA (Lua Integrated Non-complex Device Assigning), it worked. LINDA uses the FSUIPC paid version but is free itself, and basically lets you bind functions to button press, hold and release events separately.

I was using MegaJoy rather than UnoJoy but one by one, the indicators in the control panel joystick page lit up as I flipped the switches, so I was willing to call the wiring done and dusted at that stage. All that was left was to cut the excess wood off and give it a stand

Onwards and Upwards: Panel MkII

Since the completion of the first panel, X-Plane 11 was released and I’ve stopped using FSX completely. As I mentioned earlier, X-Plane is MUCH more configurable than FSX and plays nicely with hardware. For example, I was able to repurpose my first panel over to X-Plane seamlessly (although a few of the switches on the panel weren’t working as connections had come loose over time)

Another nice thing is that even if I get add-on aircraft in the future X-Plane will expose all their parameters to me even if they opt not to use the simulator’s control binding system, so I’ll never need to pay for something like FSUIPC again.

But it’s the extent by how many more parameters you can access that set my mind going again. After experimenting with X-Plane and a program called ArdSimX, I realised just by how much I could step up my hardware usage now that UnoJoy and MegaJoy were no longer needed thanks to X-Plane’s serial communications use:

So with that in mind, I decided I needed another panel, this time for the Cessna 172 which I was using to complete online flying tours. There’s no complicated overhead on it, just 11 main switches behind the yoke. This time round I opted for a much cheaper approach, choosing to use mini switches from AliExpress. I bought enough of them that I could make the full 737 overhead panel with the Cessna ones to spare and started designing the layout.

Admittedly, my woodworking was quite sloppy this time around, with many of the holes not being in a straight line and the piece being badly cut and not square due to careless, poor handsaw tachnique

I cleaned up the cut as soon as I get a replacement jigsaw when I realised my own one had gone missing, then set to work wiring up the 22 terminals on the switches. At this stage my soldering technique was much improved, and with enough of the same wire, cut to the same length this time, it looked much cleaner as well.

At this stage almost a year after getting the first parts for the first panel, I had a decent collection of tools at my disposal. My 4th and likely final set of wire cutters, a nice soldering iron (which I’ll be replacing this week as there’s a new model coming into Lidl) and a toolbox and an organiser, I would only just learn about something that could have saved me such a headache if I had just found out about them sooner: DuPont pins.

DuPont pins are the kind of connectors you see inside the ends of jumpers with square black casings at the end. You can crimp them on to the ends of wires directly and the wires can then be inserted straight into headers such as on the Arduino. My current wire stripper have the teeth needed to crimp them on to the ends of wires, so I ordered a roll and gave them a go. Needless to say the wiring only took 2 hours to be finished after the pins arrived in the post that morning.

The roll that the pins come on is just behind the switches

No jumpers needed, they plug straight in to the headers. I couldn’t afford to order the black plastic housings they come in so I just put heatshrink on them

My big mistake this time around was opting to paint the panel. I had some spray primer and black paint I had intended for my guitar so I used some of that to give the panel a better look.

BIG mistake.

Prime Time. Also, yet another panel I’m working on but one that’s not finished. I’ll write about more it when it is.


I sprayed the primer on outside and let it dry, all fine and well. I did the same with the paint but messed up the coat thickness, badly. It was taking quite a long time to dry, and had been blown into ridges by the wind. Then it began to rain slightly, so I brought them inside, and, thinking they were dry enough because the rain had stayed as droplets rather than spreading all over, put a bit of kitchen roll on the top of it to absorb the water. And forgot to take it off again for 30 minutes. The result is that the paint had dried into the paper, and when I peeled it off it took loads of the paint with it.


It ended up taking a whole day to dry enough for me to sand it off and re-prime it. This time round, I put on another coat of primer that had cracked in spots when it was dry because the paint it was on was glossy, so it didn’t adhere fully.

Then I re-sprayed the paint inside this time and pretty much made the same mistake with coat thickness again. I let it dry for much longer before handling it again, 2 days, but when I was screwing the switches back in it became clear that the paint was very soft, as holding it for too long would imprint a fingerprint, and the torsion on the washers twisted the paint with it. Still, I said it was good enough, so tested it in X-Plane, saw that everything worked and glued on a frame to let it sit on my desk.

The final product, labels and all. Some of the cracks in the primer are visible below and around the Pitot heat switch, ad the paint twisting is most visible around the BCN and STRB switches


The future

As soon as I get enough money together for the rest of the parts, I’m working on my most ambitious panel yet, the Mode Control Panel (MCP) of a 737, basically the autopilot control panel. It’s going to be much more of a challenge than the other 2 panels because it features 5 rotary encoders. They need custom programming to correctly interpret the movement, which I couldn’t use on the others because they used UnoJoy. It also features 2 8 digit 7-segment displays which are proving to be the hardest part so far.

I’ll update this post if and when I get the MCP finished