Modular Gamepad: swappable controls, any console

A video game controller that allows you to swap control modules (analog sticks, buttons, D-pads, knobs, etc.) and works with any console

Similar projects worth following
This project will develop a video game controller system that will be configurable as the user desires, with hardware modules and a software configuration tool that will enable controls not supported by the host to be mapped to controls the host does support. With it you will be able to emulate a PlayStation controller, and Xbox controller, a GameCube controller, or just about any other gamepad-style controller. You will also be able to create controller configurations never seen before. Maybe you think a particular game would be better with a knob instead of an analog stick, or a trackpad instead of a D-pad. With this system, you can make those ideas a reality, with minimal configuration effort.

System block diagram


I've written no code yet. Once I do it will be in the GitHub repository linked on the left.


At this point I'm not planning to use any libraries, because I haven't been able to find any that would fulfill roles I expect to need code for in this project. If I do find and decide to use any libraries, I will make sure they're available under appropriate open-source licenses.


This project has some obvious connectednesses: the controller connects to a console and the modules connect to the controller. Also, there will be a configuration app which will probably run on a smartphone, tablet, or computer and will connect to the controller via USB or Bluetooth. This project's products will also be freely available for others to build upon in their own projects.

  • Sharing of configurations

    PointyOintment08/24/2014 at 08:01 0 comments

    I just had another idea (though I think it was somewhere in my mind a week or two ago). Users should be able to share their configurations via the Internet somehow. The shares should, I think, include the mapping of control inputs to signals sent to the game as well as a diagram of how to set up the hardware modules. Users who use shared configurations will, of course, be able to adjust them to their liking. The obvious ways are a central database of configurations, somewhat like what Thingiverse does for makeable things, and direct person-to-person or postable sharing via text (e.g. JSON) import/export. Thoughts?

  • Project video

    PointyOintment08/21/2014 at 06:05 0 comments

    This was the first video I made for one of my three two THP entries, and it’s definitely the nicest-looking one. I made it primarily with Keynote, and then added in the video clip at the beginning using iMovie. I used Keynote’s “Record Presentation” function to record the timings and voiceover, and then just exported the recorded presentation as a video to import into iMovie. This was my first time using iMovie in a few years, and it’s changed a lot. I had to look up how to do basic things because they weren’t where I was used to seeing them. Also, it seems that iMovie only allows one and a half video tracks. I guess this isn’t a reduction from how it was earlier, but I was expecting to be able to do multi-track editing for some reason. Apart from that it was pretty easy; it just took a while to find the photos, make the slides, set up animations, and edit the video. Enjoy!

  • Development hardware

    PointyOintment08/21/2014 at 03:52 0 comments

    I plan to start with a Cypress PSoC4 Pioneer Kit, because I think it’s a good fit for the project, and most importantly, I already have one. I may switch to a different platform later because I don’t like how the PSoC toolchain is very closed and Windows-only, or if I find I need capabilities the PSoC doesn’t have. I will probably look into STM32 or other ARM parts as the primary candidates for a new microcontroller at that point.

    I intend to first get the PSoC4 to send PlayStation controller signals, which will be received by an older version of the Mindsensors PSP-Nx (a PlayStation 2 controller-to-NXT adapter), which will be connected by I2C to either an Arduino or my Mindstorms NXT Programmable Brick (if I can find it). Once I have that working, I will get it to read sensors typical of those in gamepads (probably taken from the one in the video or other ones lying around) and send signals appropriately. Of course, I must first look up the PlayStation controller protocol.

  • Patents

    PointyOintment08/21/2014 at 03:42 0 comments

    Patents relevant to this project are:

    • Valve: US8241126 (gamepad with swappable analog sticks, trackballs, and trackpad)
    • Act Labs: US6279906/CA2293347 A1 (game controller with swappable hardware interface modules to work with different consoles)

    Luckily for me, I live in Canada and Valve only has a US patent, so I don't have to worry about that one. Theirs also has some limitations on placement of modules that I don't expect mine will have. The Act Labs patent is a bit more worrisome, but I think I can work around it because its claims are quite specific to the system architecture they chose. As long as I don't have an active adapter module between the controller base unit and the console that is connected to the controller using metal contacts, I should be fine. That rules out the middle option in the diagram, but the radio option should still be fine, and passive adapters with the protocol handled by the controller's processor should also be fine.

  • Inspiration

    PointyOintment08/21/2014 at 03:35 0 comments

    Years ago I had a Logitech PlayStation 2 controller that looked like this, though, of course, it was a PS2 controller, not a PC controller. It felt great and was really nice to play with. Unfortunately, its cord frayed and broke inside the plug. I thought I'd like to convert it to wireless, but at the time I had no idea how to do that. I also thought, if I ever did convert it to wireless, it would be nice to make it work with other consoles. Now, I'm less interested in making a wireless controller (though it would be nice) than I am in making a controller that works with any console and, more importantly, has reconfigurable control hardware.

View all 5 project logs

Enjoy this project?



Paul_Beaudet wrote 10/21/2014 at 16:32 point
Neat idea, if you decide to use the ATMEGA32u4 (unfamiliar with the PSoC4), I would be okay with helping out with some of the code. Have spent a lot of time debouncing buttons in my own project. Might help to start with debouncing code that has aready built depending on where you are at in this process. Exsiting libraries seem so so, unless one already understands it.

  Are you sure? yes | no

PointyOintment wrote 11/03/2014 at 00:32 point
I don't know yet whether or not a 32u4 would be powerful enough, but thanks for the offer, and I'll keep it in mind.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

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