Hand-wiring a Modified Ergodox

After gathering inspiration from /r/mk and geekhack, I decided that it would be worthwhile to build my own custom hand-wired ErgoDox keyboard. Purchasing an ErgoDox was also an option, but that just wouldn’t have been as good of a hardware/software learning experience!

I did a bunch of research on DIY split ortholinear keyboards, and was extremely impressed with Adereth’s Dactyl keyboard, but the idea of spending $200 on the case alone (before I got a 3D printer) didn’t seem worth it, especially if it turned out that I didn’t like typing on a curved keyboard. After looking at the standard ErgoDox design and a bunch of custom versions, I decided to create my own custom design. Alon Swartz’s Blackhawk is pretty close to what I wanted, but I really liked the idea of a full thumb cluster. At the same time, I was reading that a bunch of people weren’t completely happy with the distance/layout of the standard ErgoDox design. After creating a keyboard layout mockup, I settled on a Cherry MX Brown 76 key layout with 1x1 keys on the sides and center columns. Having 1x1 keys on the center columns freed up some space and let me bring the thumb cluster in closer to the rest of the keys. I also wanted it to have bluetooth so I wouldn’t have to worry about another USB cable.

It should work, in theory…

The first step was to work out the wiring diagram. If you have never used Fritzing before, check it out. It is amazing! I suggest reading PJRC’s Teensy page on using external power to get a sense of the power options for the Teensy, and also Dave Dribin’s post on how keyboard matrices work. Overall the wiring is pretty straight forward. If you wire the diodes to the rows instead of the columns, don’t worry too much because you can correct that in the firmware mapping. Technically I should use a step-up converter to convert the Lipo’s 3.7v output to 5v, but I haven’t yet integrated the bluetooth module into the firmware, so it is not a huge deal until I start running it off of the battery.

Lasers are awesome.

The case designs were based off of Litster’s full-hand ErgoDox Acrylic Case. I laser cut the case at Techshop using dark charcoal acrylic for the first four layers and frosted clear for the bottom two. The idea was to be able to see the hand-wiring through the bottom without taking the case apart. Since everything was hand-wired, I also had to build a custom paracord TTRS cable to connect the two sides. Overall, I was pleased with the results of the case and cable, and all of the components fit perfectly! The case files are on Github here.

Honey, have you seen the lens cleaner?

The keyboard uses the QMK firmware with a customized version of the ErgoDox EZ keyboard files to map to my matrix/layout. I also borrowed code from Cubanic’s TMK ErgoDox port to support displaying the current layer on the three LEDs wired to the MCP23018 on the right hand. The RN42 bluetooth code that I’m planning to use is from Hasu’s HHKB bluetooth mod firmware, but the integration is still a work in progress. For now it’s my daily driver, and I’m loving it! You can find the code on Github here.

Power wiring… Can’t decide if this is messy or elegant…

This project was a ton of learning and a ton of fun to work on. I’ve been using the keyboard for a while now, and while there was a bit of a learning curve to retrain muscle memory (especially on the c, v, and b keys), I’m finding it extremely comfortable to use. If I were to do things again, I probably would have designed a 3D case to CNC out of a nice piece of walnut, and etched a custom PCB. It would have taken more time designing, but less time wiring everything together. The end product would also have a nicer artisan polished look and feel rather than the DIY look. Perhaps for another build in the future!

Under the hood of the final product