Here’s how I made a custom replacement circuit board for a PS4 controller. I had been hanging onto a few broken controllers, hoping to turn them into something new. I thought that if I connected to all the switches, I could repurpose the controller.
Inside, there’s a circuit board that hosts the joysticks, a few switches, and the brains of the operation, but most of the buttons are wired up through a membrane keypad. The connector on the circuit board is a rectangular cutout with small pads that line up with the membrane’s contacts. So this is what makes a custom PCB necessary for this project– there just isn’t another way to connect to all those membrane keypad switches.
So I got to scheming a breakout board– a circuit that would have the required membrane interface, but then wire it to headers I can wire out to the rest of my circuit. I started by drawing a circuit diagram with the joysticks and the 19 membrane contacts each connected to its own header pin.
I designed the circuit board using Autodesk Fusion 360. I was able to pull in the shape of the board as a DXF, which I had traced from a scan of the original controller’s board, and easily translate it to a PCB outline. I created a custom device for the membrane keypad connection area, and also customized the footprint of the joysticks, using dimensions derived from the same scan as the board outline. Getting everything in the exact right spots to match up with the existing enclosure was probably the hardest part of this project.
Here are the tutorials I followed:
- Electronics Libraries Overview
- Making Schematic Symbol
- Making a footprint
- Making 3D Model
- Making the Device
The routing for something like this is pretty easy because it doesn’t really matter which pads connect to which breakout pins, so long as they’re each connected to their own. To make sure my board was manufacturable and was as likely as possible to work on the first run, I called on my ECAD Yoda, David Cranor, to double-check my work. Together we went through the DRC, making sure the board I designed met the criteria of my board manufacturer. I wish I could have, but I didn’t use DKRed, Digi-Key’s affordable board fab service, for this project because it doesn’t currently support interior routing and I needed a couple of oblong registration slots. Next time!
Since the board also exists in 3D in Fusion 360, I 3D printed a version to test if it would fit in the controller and if the holes fit my joysticks. This gave me some peace of mind that the boards I was planning to order would in fact fit. But I couldn’t really be sure if the membrane contact area would work until the boards came in the mail.
The original circuit board has some conductive material on each membrane pad, so I applied solder blobs to help the pads stick up a little from the surface of the board. I also attached the joysticks and header pins.
I cut out an area at the back of the controller to allow the wires connected to the headers to protrude straight out and connected everything to a solderless breadboard so I could figure out which pin did what. I used some 5V power and an LED to accomplish this. The LED was wired from power, then I’d plug it into an unknown pin, then press all the buttons on the controller to see if one lit up the LED. This process combined with some multimeter probing of the original board helped me reverse engineer the button to membrane wiring, and create meaningful labels for the membrane pads on my circuit board.
Now that I had figured out the pin mapping, I could wire them up to a microcontroller to actually do something. So I left my investigative circuit alone and started on another controller. Instead of headers, I soldered wires directly to the board, which meant they could protrude out the existing front opening on the controller instead of having to cut into it.
So here’s where I tell you where this project is going. I’m collaborating with Lightfoot Beats and House of Content to make a music controller. His style lends itself to this sort of noise toy, sample playground type of vibe so I knew this was the perfect project to work on together. I had been playing around with an audio mixer program on an RP2040 board, based on John Park’s breakbeat breadboard project, written in Circuit Python. I modified it to mute and unmute the loop tracks, and layer one-off sounds separately. I loaded up Lightfoot’s audio packs and this working prototype was born.
I added the three mechanical switches I omitted from the first board, and I’m planning to get all the components to fit inside the controller. That version won’t be ready for a little bit, but I do have a revised PS4 controller breakout board PCB available in my shop, in case you have a broken controller you’d like to turn into something new.
And of course, you can download all of the files for this open source design on github.
I also added pads for the speaker contacts and reclaimed the little metal bits from a broken controller. So this breakout also lets you use the onboard speaker to make sound!
You may be interested in some of my other work: