In my last post I talked about a MS Natural 4K replacement. I eventually decided I was going to build one from “scratch”. And here it is in all its glory. I call it “DerBard” and I’m typing this post with it now.
It’s an ergonomic split 65 key keyboard with inbuilt palmrests, backwards tilt and per-key RGB lighting. It’s a dream for typing text. Probably because it was designed to match the raised MS Natural 4K that I already love. The left thumb cluster is plain bad and needs redesigning. The redesign is on the right.
It’s fully programmable with an Arduino ATmega32u4 (Elite-C V4 board), runs QMK, has a 128x32 pixel display, buzzer and animated indicator LEDs that I use to show what layer is active. I’m recycling switches and keycaps from an off-the-shelf board with some clickeys for the modifiers on the thumb clusters.
It took 150 hours to design, 3D print, assemble and program… just the left half. The right half took another 80 hours for a project total of 230 hours. Nearly 6 working weeks but spread out from July 2022 to April 2023. The majority of the time by far was design in Fusion360. The following is the story, mistakes and lots of learning along the way.
I’d like to showcase the work, because it took ages. Maybe it helps someone else out there doing something similar. A few things set this apart from other designs I’ve seen:
I attempted to match the shape of the MS Natural 4K by scanning it.
The board is not flat and I used 1x1 PCBs mounted in a 3D printed plate to do it.
- The right hand half uses a GPIO extender instead of a second microcontroller.
- Per-key RGB. Not practical, but it was fun.
Table of contents
Custom Keyboard Background
This is my quick summary and background of custom mechanical keyboards before talking keyboard details. It was so quick I had to split it out to a separate page:
These were my broad stroke starting points: - How do I mount the keys? - What shape will the keyboard have? - What shape will the keyboard have?
Mounting the switches
By now I’d been browsing r/MechanicalKeyboards/ for some time and could see I had some options. It seemed like most people were buying PCBs and plates from keeb.io. PCBs didn’t work for me as the whole point of this project was not to make a non-flat MS Natural 4K replacement. Actually there is one caveat here — keycaps come in different heights (e.g. you’ll find function keys at the top are often taller) and a coleague at work showed me you can get a good curve even by gluing on some Lego shims.
I was rather inspired by Dactyl in how a whole board could be 3D printed minus wiring the switches to a microcontroller. I highly recommend the talk. Many people don’t even bother with a flexible PCB and solder diodes and wires directly to the switches. One rather eye-catching project was a Dactyl Manuform with hot-swappable sockets. This is where I thought I’d start.
I recently bought a CR-10 printer and started learning Fusion360. My plan was to design a keyboard just like dactyl in that the shape could be quite organic. The starting point for designing a switch mount was this video by Bastard Keyboards. The reminder to print test pieces along the way is a great tip!
RGB lighting is just a gimmick and doesn’t really make you type faster. I’m kidding, of course my eyes got the better of me. I’ll have some of that! I eventually stumbled upon 1x1 NeoKey PCBs.
Pre-assembled socket + diode + RGB LED PCBs with convenient connections to adjacent ones. Not super cheap mind you, but convenient enough for what I’m getting. I found you can buy them in 5x5 snap-apart grids. Three sets for $90 + postage and that’s just the start. Fair warning: you don’t want to run the LEDs at full power unless you have a 20% size keyboard.
I spent quite some time figuring out the design for the individual key holders. I’ll probably write a separate post just for those. There’s actually two parts. The top is thick, simple and does the job of actually holding the key. The PCBs sit just underneath. There’s space for the wiring between them. The tricky bit is the only space between the PCBs is at their corners. I designed some posts that:
- Are only loosely connected at the tip so the whole holder can be printed in one go and snapped apart
- Hold the PCBs in place with a friction fit while I solder them — the primary purpose
- Align the bottom of the key holders
- Keep the top in rigid contact with the bottom and transfers force — the PCBs are actually floating
- Are replaced by a few screws in key locations to stop the top falling off
After trying them out I’m pretty happy with the result. That said, there probably isn’t any other way to work with the PCBs. After printing both sides a few posts did break at the wrong place, but they were easy enough to glue back.
Again, I’m making a MS Natural 4K replacement, so I need to hammer down the shape of the keys.
Naturally I took my years of keyboard design and human physiology experience and… lol, I don’t have any of that. So I found this photogrammetry software, Meshroom. Just with my phone I took some photos of my old natural 4k and used Meshroom to create a 3D model of it. The ease of use of this software out of the box is just incredible. Drag in the images, click go and wait. It’s even textured so you can see where I’ve worn through the palmrests. Actually this was quite helpful later.
Getting this into Fusion360 was a story in itself. See Matching complex shapes for a custom keyboard in Fusion360.
Finally I had the main board layout designed. I did manually tweak the orientation of the key holders, smoothing the transitions between each one. It was quite important to create some fake switch and keycap geometry to verify they had clearance.
Joining the individual key holders wasn’t so straight forward. I tried two ways:
- I made each holder over-sized and then boolean unioned them together. Some geometry did interfere, so I went back in the timeline to before the union and subtraced extrusions from the top faces of each key holder from the neighboring keys. The mesh geometry looked a little messy but it wasn’t really a problem after printing.
- For the right half I tried under-sizing the key holders and lofting them together. Don’t do this. Fusion360 can’t take it and would freeze for 10s of seconds if you sneezed or looked at it funny. Lofts also fail if the start/end doesn’t face each other perfectly and it’s much more fiddly.
(Enough writing for the day. To be continued…)