Post

MDCtrl

The Development Process for Creating MDCtrl, Powered by Raspberry Pi Pico and GP2040-CE

DIY Simple and Portable Stickless Controller

Check Out The Github For The Files HERE, and quicker write up HERE

Note: I categorize this project as an early prototype of MDCtrl, and in the future, I hope to revisit this project and make Version 2 with a smaller board, a cleaner PCB design, and a better case. I’m open to any criticism and suggestions, feel free to start a discussion in the repo.

Introduction


What is MDCtrl?

MDCtrl MDCtrl DIY Controller

MDCtrl is an Do It Yourself (DIY) portable controller that is made with the help of KiCad and Raspberry Pi Pico powered by GP2040-CE.

Reasons For This Project

I really want to try a stickless controller to play my games, but when I saw the price, I’m suprised by how expensive they are. So I thought “why not just make it myself, and make it open source so people can make it their own?. it should be cheaper and not that hard right?” (Oh, how wrong I was about this thought)

Bill of Materials (BOM)

The materials you need to make MDCtrl:

  • MDCtrl PCB
  • Raspberry Pi Pico
  • 12 Hotswap Socket (Optional for hotswappable keyboard switches)
  • 12 Keycaps
  • 1 Stabilizer
  • 5 6x6x5 Tactile Switches
  • Soldering Components

Development Process

Development process includes several phases, from the initial concept to part assembly, here’s the list of phases in development process:

  1. Concept
  2. Layout
  3. PCB Design
  4. Part Assembly

1. Concept

In the realm of all button controller or some called it stickless controllers, price, availability, and repairability are common drawbacks compared to traditional stick controller. Even the budget-friendly stickless controller can be quite expensive, which discourages people who are simply curious about trying them out. With this in mind, MDCtrl aims to be more user-friendly, affordable, and open-source making it easier for people to experience stickless controller. If they enjoy the experience, they can then consider investing in a flagship stickless controller.

  • Key Features:
    • Affordable & DIY-Friendly
      • MDCtrl is made to be cheaper than mainstream stickless controller and easier for people to make their own MDCtrl with just basic soldering and flashing knowledge
    • Hotswappable Keyboard Switches
      • MDCtrl uses hotswappable keyboard switches, so users can easily replace without soldering each keyboard switches.
    • Portable & Space-Efficient
      • MDCtrl compact size makes an ideal gaming on the go. It uses less space making it easy to carry on a trip or store it when not in use.
    • Open-Source
      • MDCtrl open-source design makes it easy for people to contribute, modified, and share their customized design and adapt the controller to fit personal taste.

2. Layout

After the initial concept is done, now we need to determined how the layout of the buttons and component will be placed, I’ll be using jfedor flatbox and Hitbox Controller as a base and modify them.

I started by drawing the layout in paint 😁 and then asked around the community about their thoughts on the initial design.

First MDCtrl Layout Design First MDCtrl Layout Design

After getting their feedback, and confirming the layout by actually printing it out and testing the button placement, the initial MDCtrl layout felt cramped and uncomfortable. However after adjusting the button placement based on the community’s feedback, the resulting layout feels more natural, and comfortable to useAfter getting their feedback, and confirming the layout by actually printing it out and testing the button placement, the initial MDCtrl layout feels cramped and uncomfortable, after changing the button placement according to the feedback given by the community, the resulting layout feels more natural, and comfortable to press.

Final MDCtrl Layout Design Final MDCtrl Layout Design


3. PCB Design

Before starting the PCB design phase, I would like to give a massive thank you to Noah Kiser for providing an excellent guide that I used to make this controller. You can check him out HERE or watch the spesific video I followed HERE

PCB Design Uses Firmware GP2040-CE Wiring, Raspberry Pi Pico Footprint by Nicolò Carandini, and Keyboard Switches Footprint

Creating a PCB Design involves two parts:

  • Schematic Design
  • PCB Layout Design

Schematic

Schematic begins with placing down symbols that are needed to start building the controller. Early schematic design uses two symbols.

First Schematic Design First Schematic Design

After several feedbacks and revision to accommodate the number of buttons needed for general use (beyond just arcade and fighting games), the final Schematic Design includes Raspberry Pi Pico Schematic by Nicolò Carandini, tactile switches, wiring, and mounting holes.

Final Schematic Design Final Schematic Design

PCB Board Design

PCB Board Design begins after placing down symbols in the schematic and accessing Board Editor that you can find in KiCad with this icon.

Board Editor Board Editor

After pressing Board Editor and updating the PCB from the schematic, the component will get imported and their connections. With the imported component, you can start designing the PCB by dragging them into place and defining board outline using Edge.Cuts layer to draw the outline of your PCB.

First PCB Design First PCB Design

Now we need to route the traces to connect the components, this can be done manually by clicking on Route Tracks or automaticly using KiCad Interactive Router. With KiCad you can also see the 3D View of the PCB using 3D Viewer.

Traced First PCB Design Traced First PCB Design

3D View of Traced First PCB Design 3D View Traced First PCB Design

With the initial layout in mind, I moved some component to match the layout and added new elements based on community feedback such as customized silkscreen and tactile switches. The included image shows the front copper layer (colored red) and back copper layer(colored blue).

Final PCB Design Front Copper Final PCB Design Front Copper

Final PCB Design Back Copper Final PCB Design Back Copper

3D View PCB Design 3D View PCB Design

3D View MDCtrl PCB Design


4. Part Assembly

Part Assembly begins by ordering the PCB in a PCB manufacture by using Gerber that can be accessed by going to File -> Plot and make sure the file format is set to Gerber.

MDCtrl PCB1 MDCtrl PCB1 MDCtrl PCB2 MDCtrl PCB2

After the PCB arrived, we can begin soldering the component into the PCB board, the first component that I soldered is the Raspberry Pi Pico, begins by preparing the pad for the solder.

PCB Pad Prepare PCB Pad Prepare

With the pad tinned, soldering the Raspberry Pi into the PCB becomes easier, just make sure after soldering, try to wiggle the Raspberry Pi to make sure you have a firm connection.

Soldered Raspberry Pi Soldered Raspberry Pi

Now we can move into the other component, like hotswap socket and the tactile switches.

Soldered Hotswap Socket Soldered Hotswap Socket

Soldered Tactile Switches Soldered Tactile Switches

And that's it, the PCB for MDCtrl is done!, all we have to do now is flash the Raspberry Pi Pico with GP2040-CE.


Implementation

You can Check out the Firmware Installation for GP2040-CE from the official site HERE

Testing

After flashing the GP2040-CE firmware onto the Raspberry Pi Pico, you can verify if the MDCtrl is recognized as a controller by using Gamepad Tester

MDCtrl Testing

Challenges

This project is not as smooth sailing as it initially seemed. There are various challenges that arise while working on it:

  1. Difficulty in finding the right footprint for the keyboard key, hotswap socket, and Raspberry Pi Pico.
  2. Learning the PCB manufacturing process from schematic design to PCB layout.
  3. Limited specifications for PCB manufacturing due to constraints of local PCB fabrication tools.
  4. Navigating various communities to gain additional insights for the controller.

But thankfully I’ve learned a lot by working around and overcoming those challenges.

Future Improvements

There are a lot of things that can be improved on this MDCtrl project, from the use of other type of Raspberry Pi to make MDCtrl have even an smaller footprint, better PCB layout

Conclusion

Creating MDCtrl has been a wonderful journey, from learning the basics of PCB design to navigating various communities to gain more input for the controller. I hope to revisit this project in the near future and create a better version with newer parts.

Thank you for reading this write up! 👍

This post is licensed under CC BY 4.0 by the author.