I’ve spend a lot of time over the past few years going down the very deep rabbit hole that is custom mechanical keyboards. About a year ago, I landed on the 34 key Sweep. Beautiful keyboard, but the more I used it, the more I discovered a few annoyances. You can do a lot with 34 keys, but I couldn’t find a way to do everything I wanted with these keys without also employing combo keys. They work well enough, but I still have some issues with consistency. 36 keys would let me drop combo keys entirely.

Additionally, understandably, the keyboard is not designed by me, so naturally, it will not perfectly fit my hands. In order to fix this, the only solution is a custom PCB.

Design goals

In short, my design goals for this project are as follows:

  • 36 keys - see above.
  • Personalized ergonomics - it should be perfectly comfortable and natural for me.
  • Clean design - few visible traces, branding or images on the silkscreen or otherwise.
  • Hotswappable connector - TRRS/TRS cables are common for this, but they’re not hotswappable. They’re also difficult to make compact versions on your own.

Schematic

The first step was to create a schematic for the board, and I ended up with this:

MuKB Schematic

I named it Mu_SplitKB, sticking to the concept of minimalism. Mu (無) means nothing, so I thought that sounded cool and was somewhat fitting.

Though I’ve created hand-wired keyboards in the past, and have spent plenty of time tinkering with breadboards, I’ve never designed a PCB. It seemed like deep magic to me. I leaned heavily on ruiqimao’s Keyboard PCB Guide, and I also used the Sweep’s schematic and design as a reference point.

I decided to go with an RJ9/10/22 (4P4C) connector for the power and communication between the boards. This fulfills my design goals regarding the hotswappable connector. There were a few unexpected hurdles here. Unsurprisingly, not many people have analog phones anymore. This connector type, AFAIK, is only really used for telephone handset to base connections. It was easy enough to find a jack for this, but when I received it in the mail, I noticed how far it would stick out above the keys.

I was able to find one RJ9 jack that you could mount sideways. It’s apparently slated to be discontinued, so I bought some extras. If the time comes where I’m still iterating and the jack is no longer available, I suppose I’ll need to pick another jack type.

PCB design v1

With the schematic created, the actual design of the PCB was next. This first iteration, while it worked perfectly fine from an electrical standpoint, had some design issues.

PCB Design V1, before adding traces

Routing traces was interesting, and it taught me a lot about PCB design, including why they often had those little holes. Those “little holes”, vias, are there so that traces do not cross paths. It lets a trace go to the other side of the board, so it can continue on its way without creating a connection that isn’t supposed to be there.

Physical PCB

Once the PCB arrived, I soldered everything up. It all went fairly smoothly:

Assembled PCB

Next, I configured the firmware, QMK. QMK is the entire reason that I’m able to get away with a few keys as I did on this. 36 keys, believe it or not, is perfectly functional for just about everything except PC gaming. Its actually more capable than a traditional 101-key keyboard. I have shortcuts, mouse control, media keys, and even F13-F24. In general, the philosophy with these tiny boards is that you should bring the keys to your fingers, not the other way around.

Anyway, now it was time to connect it and power it up. It worked, barely.

Common practice in these designs is to have the microcontroller be placed face down. It was at this time I found out the PCB was mounted right-side up. That wouldn’t be a problem, except the common practice is to mount them upside down. Luckily, no physical damage happened due to this. So I re-soldered the mill-max pins.

I also tried to make a RJ9 cable before the proper crimper arrived, that didn’t help either. This caused power and communication between both sides of the board to be shaky at best. This was easy enough to solve as well. With these out of the way, I had my first working PCB keyboard fully functional!

It works!

PCB design issues

The thumb keys were too uncomfortable to reach, and I hadn’t realized that I had been using the outermost key as a homing key of sorts. In this design, the outermost key was the one meant to be hit least often. This resulted in a lot of frustration once it came time to use the finished product. So that tertiary key will need to be moved inwards. Hopefully that won’t be too uncomfortable.

This actually kind of turned into a happy accident, though. I designed this board to have a physical reset button, as that was one minor annoyance I had found with the Sweep. Having the board mounted face up exposed the on-board reset button, so that will be removed in the next iteration.

There is no way to disable the LED through software on the Elite-C microcontroller, and flipping it upside down kind of hid that problem enough to have it not bug me too much. However, having it face up would be too annoying. Fortunately, this is easily solved by simply desoldering it from the MCU.

The pinky row flare was nice, but I think it could use another 2 or 3 degrees of tilt.

Next iteration

Design is underway on the next iteration, I’m looking to complete this and have a new PCB in my hands within a month. I’ll try to document my process a bit better for that part.

Oh yeah, and I’m definitely choosing bigger diodes. These are obnoxiously small to hand solder:

Frustratingly small diodes