Kerbal Space Program Controller:




This Kerbal Space Program controller is one that I built in my free time freshman year of college as a personal project. After its popular success on the Kerbal Space Program sub-Reddit (Complete Album)I attempted to form a small company called Mission Controllers to design and mass produce a similar controller. With a halfway finished second prototype me and my team attended the World Maker Faire in NYC in 2016. Now that those efforts have ultimately fallen short I am trying to publish a how to guide for people who were initially excited by my controller and would like to try to build their own.

For those who don't know Kerbal Space Program is a relatively realistic yet fun space ship simulation game. This controller is designed to be an optimized and aesthetically appealing user interface for the game.

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Brainstorm Layouts & Features:

Before really getting started it is very helpful to sketch some of your ideas on paper. The layout that you finally finish with might change a lot because of aesthetics or ergonomics so it helps to get them out of you head and on paper so you can have a point of reference to continue your designs form. Here are some of the sketches I did in the early planning phases of my controller design. Not all of these ideas made it to the final product but this process helped me narrow my options down.

Step 2: Select a Microcontroller:

There are many options for your microcontroller and many ways that you could choose to communicate with your computer/game. Here are the main 3 I considered as a result of my research:

(1)UnoJoy is this firmware for the Arduino that makes it behave like a generic USB joystick. The main advantage of this is that it allows for easy analog input and buttons can be reassigned in the game setting. This will only allow for 1 way communication but is it very easy to setup. If you do this I suggest using an Arduino Mega for the additional inputs. You will run out of input on an UNO fast. The documentation for UnoJoy is very good so to install and use it simply follow the steps in the README included in the download. This is the method I used for my second controller.

(2)Arduino DUE has support of native USB which can act like a keyboard using the keyboard library that comes in the Arduino IDE. It also has interrupts on every pin so that makes it especially nice for this application. This option will require a lot more programming (example code) and I would not recommend it if you do not have atlease some experience wit C or the Arduino IDE. This is the method I used for my first controller.

(3) For two way communication there is this mod that allows you do do this and comes wit a lot of example code. When I made my controller the mod was not compatible with the current versions of KSP or windows 10 so I ultimately chose against using it. However the creator (zitronen of the KSP forums) has recently updated the mod. To do some of the best stuff with KSP controllers two way communication is required. For example you can do numerical readouts for altitude, truly accurate SAS/RCS states, and handle incorrect toggle switch states(When using toggle switches without game data a switch state can become inverted if you load a ship in flight and the SAS in not in the same position as the toggle switch. With that game date and the switch state you can choose weather or not to send the signal to change the state of SAS instead of changing it with every switch state change).

TLDR: 1 is best for simple and quick functionality for people who don't want to code a lot. 3 is best if you want idea functionality but you have to depend on the MOD continuing to be sported. 2 is best if you want to write a lot of code and want the most personal control over the software you are using(no dependency on other code other people wrote except Arduino supported libraries).

Step 3: Create a Bill of Materials (BOM) and Do Research:

For all of my larger projects I like to create a BOM of all the components I will need including those that I already have. Then it is easy to see what the total cost of thing will approximately be minus components I have. For the BOM in all my BOMs I include hyperlinks to the parts so I can find them to buy easily when I am ready. In the BOM for this project I also include a large number of links that I used when researching how to do the project and for helping with the aesthetic style I wanted my controller to have. The most important component for this style of building a KSP controller will be a sheet of 1/8th thickness light gray acrylic. This will be laser cut and etched later to for the main surface of the controller.

Here is a link to my BOM for an example: BOM

Being an electronics hobbyist I had many of the components I used already for example I salvaged a 3X5 button matrix from an old educational computer. The case was also salvage from the same computer. The exact computer I used for my case was a HEATHKIT / ZENITH ET-3400. It is a bit of an antique and hard to find so you may want to look into alternative cases. Many old electronics with simple flat panels can be repurposed like I did with my Heathkit.

Step 4: CAD Your Panel:

In your CAD program of choice CAD your design. At this point having a digital caliper will be extremely useful because you can use it to measure the size of mounting point of any salvaged or purchased hardware. Some new components may have data sheets available which will specify mounting sizes and tolerances. My CAD program of choice is Autodesk Inventor. I will not cover how to CAD here because that is a huge topic. If you are completely new to CAD the tutorials built into Inventor are not bad. Also a non commercial licence of Inventor is available to anyone who claims to be a student. It is important to use the digital caliper to accurately design mounting points for the case you use if you are using a recycled case like I did.

Step 5: Laser Cut the Panel:

If using Inventor to CAD you will need to make sure to export it as a AutoCAD .dwg not an Inventor .dwg. Inventor .dwg files are still technically 3 dimensional and will not be able to be read by the CAM software of the laser cutter. Almost all laser cutters will read AutoCAD .dwg files. The following will depend of your laser cutter but you will need to edit the .dwg in AutoCAD so that all lines have zero thickness. All cut lines will need to be red. Any etchings or raster images used for labels will need to be blue or black depending on you laser cuttrer's CAM software. If you do not have access to a laser cutter universities and makerspaces will often have one you can access. Be sure to follow any instructions specific to your laser cutter. Make sure to set the laser intensity appropriately for the material you are cutting into.

Step 6: Assemble the Controller:

Once the panel is cut I use an acrylic based paint to add extra contrast by painting in the etchings that the laser cutter made. Then I use a scrap piece of acrylic to scrape off the excess paint. this method proved extremely effective. The second picture shows all my components and the panel before final assembly. Simply put you components into the mounting features you designed.

Step 7: Complete Wiring:

Fore wiring projects like this my preferred method is to use primarily female ended multi strand wires. The Arduino also has female connectors. To connect the Arduino to the wires I used double ended male headers. This way I could easily make ribbon cables of specific sizes which helped greatly with wire management.

An important concept to understand for the wiring is the idea of pull up resistors. The Arduino has software enabled pullup resistors available on all digital pins. What this means is that in software you can define a specific digital input to have a pull up resistor. This prevents pins from floating by causing them to default high though a resistor. to activate the pin you simply connect it to ground by closing a switch and the current will take the path of least resistance and go through the button changing the pin state from high to low.

By using internal pull ups wiring becomes extremely simple. Each end of a button or switch simply needs to go to ground and a digital pin on the Arduino. If you plan to use any analog inputs you simply need to setup a voltage divider.

More complex inputs like a button matrix will need additional software. Briefly the 3X5 button matrix works by rapidly cycling which row is high and reading the columns. Using the reading from the columns pins and which row is currently high the button that is pressed can be deduced.

Step 8: Code Your Kerbal Space Program Controller:

How involved your coding will be will depend on which method for communicating to the came and which microcontroller you chose. Here is example code from my first controller (the blue one) which uses the Arduino DUEs Keyboard Library to send signals to the game. Additionally Here is example code for my second controller which used the UnoJoy Firmware to act like a game controller. If you use the UnoJoy firmware any coding will be minimal and inputs only should work out of the firmware install. However remember that you will need to assigns the 'joystick' buttons to functions in the games settings.

Microcontroller Contest 2017

Participated in the
Microcontroller Contest 2017



    • Indoor Lighting Contest

      Indoor Lighting Contest
    • Make It Fly Challenge

      Make It Fly Challenge
    • Growing Beyond Earth Maker Contest

      Growing Beyond Earth Maker Contest

    11 Discussions


    7 days ago

    First off, I think this is a great and wonderful looking project - I don't play the game (wish I had more time for it - maybe someday), but such a controller looks like it'd be fun and useful, and it could be repurposed (or the idea) for such things as a UAV groundstation or such.

    My heart sank though on seeing that the case and such was made from that trainer, which is actually somewhat of a collectible for retro-computing enthusiasts. I mean, if you had just the parts but not the complete system, that's one thing to repurpose, but I couldn't bear to cannibalize the ET-3400 I own for this kind of project. While prices on ebay shouldn't be considered the "last word" on value, they do give an idea - type in "Heathkit ET-3400" and while the prices are all over the map, an assessment does put the unit at around $100.00 in value, and that's probably climbing. I got mine from a hamfest for $25.00, but I intend to keep it in as-is working condition, too.

    I guess I worry on seeing this that others might be encouraged or educated that if they find a "cool old enclosure" that they should discard or repurpose the innards - not realizing they could be destroying history, or something actually valuable on the collector's market - imagine someone doing this with an old Altair 8800, or a KENBAK-1 - or ripping the keypad off a KIM-1 single board computer!

    Some might write me off as fussing about stuff - but they may not realize that, if they did get a deal on one of those machines because the seller either didn't know what they had, or thought it was going to another collector (it happens; several years back I picked up an Altair for $150 and was offered $900 for it later that same day on a collectors mailing list) - that they just destroyed a lot of money. This kind of thing happens in the regular antiques world quite often - people refinish a piece of old furniture not realizing that low-cost barn find that was valued at $50,000 before their work now is only appraises at a few hundred dollars due to the damage caused by the "restoration".

    I guess all I can do is to warn people about this kind of thing - if you find something like this that seems like a cool piece of old electronics to tear apart and repurpose, stop and think before you do. Consider and research whether it has any value on the collector's market in the condition it is in. If you find it does have value, but that you'd have to put some work into restoring it - assess what that would would entail, and decided whether it would be worth it to do that work, or pass it on to another collector who might want to. Otherwise, if the items was mass produced in such quantity that it probably won't ultimately matter, then have at it for your projects.

    I know in my past I have made such mistakes; I once destroyed a non-working, but probably could have been fixed, transistorized-logic desktop calculator with a nixie-tube display, and a memory function based on a wire-delay-line system - I regret doing that every time I think about it. I don't know if it was a collectible or not, but the technology was very unique, and I wish I hadn't been a stupid 18 year-old kid at the time.


    1 year ago

    I tried this project with a slightly modified code that was copied from A Kerbal Player's Guide and I made this project. This is what happens:

    1. I load the vessel onto launchpad

    2. When it is loading, The handshake LED lights up for 2 seconds, then fades out

    3. Not a bit a signal after that

    4. The second launch, absolutely no lights

    5. Same with all the launches that follow

    6. After I reset the Arduino and bring the vessel to the pad, steps 1-5 repeat.

    Why does this happen? Any comments and suggestions will be welcome!

    1 reply

    2 years ago

    I will buy one if you can make me one for the ps4.


    2 years ago

    Amazing. I don't even play the game and I want one, just love the aesthetics and ingenuity

    Maty VE

    2 years ago

    Elon musk needs this for his birthday.


    2 years ago

    Forget game usage, that would make for a wicked MIDI controller! Nice work!


    2 years ago

    Wow, neat. This would be a great "bridge" project to for the kids in our local maker group. Great project and docs. Thanks for sharing


    2 years ago

    I do the same type designs for so many businesses locally using different software but a large bed LASER engraver as well. I actually have taken the manufacturer's dimensional designs of their parts and recreate them into my own library on my software programs so I can call them up and install them on my panels quickly. So I totally understand what you created here and It is nice. Bravo sir bravo!


    2 years ago

    omg it's amazing ! i have to do it ! thank you very much for the instrucatble


    2 years ago

    That;s neat :)