Remote Software Engineer at Stripe and cellist based out of Ontario. Previously at GitLab. Fascinated with building usable, delightful software.
June 26, 2023 | 13 minutes to read
I spent most of my free time over the last 10 months building this bizarre keyboard from scratch. It’s a Dactyl Manuform - a split keyboard with a highly sculpted design that is somehow simulataneously the ugliest and most eye-catching object I’ve ever seen.
The goal of this keyboard design is to place keys exactly along each finger’s natural axis of motion. The consequences of this approach are downward-sloping (A.K.A “tented”) rows to match the natural angle of the wrists, a deeper middle finger column to compensate for this finger’s relative length, an offset pinky column to minimize stretching, and a thumb cluster with multiple keys to take advantage of its opposable nature.
There’s a reason most keyboards don’t look like this. It’s difficult to mass-produce curved keyboards since they can’t use the stiff, flat PCBs that most keyboards use to wire the keys to the microcontroller. Every Dactyl Manuform is a unique piece of art, painstakingly hand-wired by a human being. Here’s how I built mine:
The first step was to design and 3D print the case. There are a number of Dactyl Manuform model generators out there; I ended up using this one since it had a few extra features I wanted (e.g. wide pinky keys). Some things I was looking for in my design:
I gave up on the hot-swap sockets after failing to coax the generator script to produce valid hot-swap socket holders. I’m glad I did - in the end I don’t think they would have worked anyway.
Once I had a model that looked good on the screen, I printed a draft version to see it in real life.
Overall, I was really happy with this first draft. I only made a few tweaks to the model before printing the real thing:
To mount the base plates to the body of the keyboard, I used these heat set inserts. It’s a neat system; the threaded inserts are melted into the 3D print using a soldering gun, producing threaded screw holes much stronger and smaller than anything that would be possible using only 3D printing.
To determine the ideal hole size for these inserts, I made a test print.
I’m glad I tested this; all of the hole options were too small! A second print with bigger holes was more successful.
With this last detail resolved, I began printing the real halves. I used my favorite material - wood PLA - which looks (and even smells!) quite similar to real wood, once properly post-processed.
I melted the inserts into the holes, which was nerve-wracking; one bad insert would have likely ruined the whole print. It was awkward to try and hold the keyboard and the insert in place while pressing the insert into the plastic with the soldering gun. Somehow I managed to install all ten without issue!
I ordered the transparent acrylic base plates from ponoko.com and was quite happy with the result.
Next up was post-processing. I sanded each half with 80-grit sandpaper, which was a ton of work - there are a lot of nooks and crannies that make this a tedious job.
In order to sand the inside of the key holes, I printed a little attachment that I could wrap with sandpaper and fit on my screwdriver.
Normally this would be an unnecessary step - no one sees the inside of the key holes - but the fit was a bit too tight; most of the holes required some sanding before the switch would fit properly. (This is why I’m glad I didn’t bother with hot-swap sockets - the fit is so tight, I’d never be able to get the switches out anyway.)
The next step was to stain and clear coat the prints. I used this gel stain and glossy polyurethane to give the prints a rich, polished wood color.
This was a time consuming step, as each half required three coats of stain (minimum 24 hours to dry per coat) and at least 3 coats of polyurethane (a few hours to dry per coat). I did this in the dead of winter which made drying these in the outdoors challenging (a space heater may have been involved).
The hard work paid off, though - I’m really happy with how these look! The layer lines even give the illusion of a wood grain.
The next decision was which key switches to use. I’m a clicky switch guy; the noisier the better. I bought a Kailh switch tester so I could make an informed decision and decided on Kailh Box Whites.
Compared to other clicky switches (e.g. Cherry MX Blues), Box Whites are extra clicky (they click twice per key press). Perfect for working remotely! If I ever make a silent/office-friendly version of this board, I’ll go with Boba U4 Silents.
At this point, I was able to set the switches and keycaps in place and get a feel for what it would be like to type on this monstrosity. I’ll admit it felt about as weird as it looks.
There was one last detail to work out before I could begin wiring up the halves. I wanted to install a rotary encoder (“volume knob”) on each half, but these don’t click into a standard keyboard hole out of the box. I had to 3D print a special adapter for each.
I printed these with PETG and learned the hard way to always use glue stick when printing with PETG. The adapters adhesed to the bed so strongly they took chunks out of my glass bed when I finally pried them off. I was able to salvage the adapters with some sanding, but the printer bed was unfortunately beyond repair.
Despite their rather violent effects on my printer, the adapters did their job quite nicely!
Finally, it was time to start wiring it up! First, I wrapped diodes around one pin on each switch.
I soldered the diodes into place and snipped the extra leg.
I soldered the remaining diode legs together to form the rows of the key matrix.
I used small, individual pieces of insulated wire to form the columns.
I installed DuPont connectors so I didn’t have to solder directly to the microcontroller. This saved me a lot of headache since it took quite a bit of trial and error to get all pins in the right spot.
I flashed a basic QMK firmware to the microcontroller and had the incredibly satisfying experience of seeing a letter appear on the screen when I pressed a key. I also got the LED strip working!
I was getting really close at this point. I designed a custom holder for the microcontroller since the one that was supposed to be compatible with my case didn’t fit for some reason.
I spliced some wires together since a few of the microcontroller pins had to be shared by more than one connection.
After assembling all the pieces, a bit of software configuration, and a lot of trial and error… I had a working keyboard!
Weird, but good! I’ve only been typing on it for a few work days, so my muscle memory hasn’t fully adjusted. I keep reaching for keys in the wrong places; in particular, my fingers naturally stretch too far when reaching for the bottom row. I also made a few modifications to my QMK layout to take advantage of the more accessible thumb clusters compared to my ErgoDox EZ. I think I’ll really like it once I’m used to it.
Umm… I think so? The end result was fantastic, but it was an insane amount of work. I don’t recommend this project to anyone who isn’t interested in the process itself. If you’re just looking for a great ergonomic keyboard, I’d recommend buying an ErgoDox EZ, a Moonlander, a Kinesis Advantage360 or a prebuilt Dactyl Manuform, all of which will cost about the same as this project (see below).
Cost of all items, including tax and shipping.
Description | Cost (CAD) | Link |
---|---|---|
Wood PLA filament for 3D printed case | $40.44 | amazon.ca |
Kailh switch tester | $21.46 | aliexpress.com |
Kailh low-profile switch tester | $9.68 | aliexpress.com |
Pro Micro controller (x2) | $44.98 | amazon.ca |
Kailh BOX White switches (x90) | $51.26 | aliexpress.com |
M3 heat-seated inserts (x100) | $12.42 | amazon.ca |
M3 screws (x100) | $12.02 | amazon.ca |
EC11 rotary encoder (x4) | $15.80 | amazon.ca |
LED strip (1m) | $16.37 | aliexpress.com |
1N4148 Diode (x100) | $8.80 | digikey.ca |
Reset button (x3) | $10.82 | digikey.ca |
22AWG Wire (25’) | $7.24 | digikey.ca |
TRRS jack, female (x3) | $12.65 | digikey.ca |
Jumper wire (x60) | $11.74 | digikey.ca |
Soldering iron | $59.87 | homedepot.ca |
Solder | $28.23 | homedepot.ca |
Wire stripper | $11.29 | canadiantire.ca |
Acrylic base plate (x4) | $54.88 | ponoko.com |
Gel wood stain | $19.93 | homedepot.ca |
Glossy polyurethane | $27.11 | amazon.ca |
Keycap set (x2) | $57.32 | amazon.ca |
Electrical tape | $5.37 | amazon.ca |
Rubber feet | $13.55 | amazon.ca |
Only keyboard materials | $450.93 | ≈ $340 USD |
All items (including tools, testers, etc.) | $553.23 | ≈ $417 USD |
As you can see, building your own keyboard is not a good way to save money 💸
.stl
and .svg
files: https://www.thingiverse.com/thing:6099418Other posts you may enjoy:
October 14, 2024 | 3 minutes to read
May 31, 2024 | 6 minutes to read
January 25, 2022 | 7 minutes to read
August 26, 2021 | 2 minutes to read
May 7, 2021 | 1 minute to read