Picture of kb

kb

Published August 20, 2015

At what might have been the start of my quest for ever-increasing efficiency and productivity with digital technology, I began learning the Colemak keyboard layout in high school. It was noticeably more comfortable to type on than QWERTY, but I also had to use school computers occasionally and having to configure and switch their layouts every time was frustrating. I was also studying Mandarin at the time, and there was no such thing as a Colemak-translated Pinyin layout, so I still had to struggle between two different layouts.

Around this time, I learned about the DIY mechanical keyboard scene and was inspired to build my own. Having a Colemak layout in keyboard firmware would solve my QWERTY problems. It would also give me an opportunity to try customize the physical positions of keys. I'd seen a few ortholinear keyboards and split spacebars and it all made sense to me, but I wanted to make sure the thumb keys were exactly where my thumbs fell during normal typing. I could tell pretty easily based on the shiny spots on my previous keyboard's spacebar.

designing

I had very little experience with designing circuits at the time, but I wanted to make a PCB. Something about using a handwired keyboard made me uncomfortable. Luckily the KiCad community is great at producing tutorial videos, and I found a couple of guides describing what a keyboard matrix is, how you should use diodes, and so on. I'd played around with Arduino boards before, so I was fairly confident I'd be able to work with a Teensy board once all the GPIO pins were wired up.

I ordered custom carbon fiber plates and PCBs for manufacturing along with some switches and diodes, and did a bunch of soldering. I discovered the LUFA USB framework, and adapted some examples into working firmware. Suddenly I had a keyboard I could use to type!

Except that it would type random letters when I waved my hand above it. Kind of a cool feature, but not very practical. I found out that I needed pull-down resistors on my GPIO pins, so I found some and had to manually solder them directly onto the Teensy pins. So much for not having a handwired keyboard. In retrospect, I probably could have enabled built-in pull-down resistors on the Teensy itself.

Once I'd gotten all that working and was fairly confident everything worked together, I designed an enclosure in SolidWorks and had it 3D printed in resin. When designing the PCB, I didn't account for the positions of some of the screw holes, so I had to remove some FR-4 with a dremel tool. Luckily there wasn't anything important there! Otherwise, the case fit well and I spray-painted it with a metallic finish.

By that point, I stopped using other keyboards altogether. I continued to iterate on the firmware, adding in advanced features like 14-key HID reports, multiple function layers, a QWERTY mode for others to use when trying it out, a mouse implementation, and even a MIDI keyboard mode with 4 full octaves of notes. It very well may have been the first MIDI + HID mechanical keyboard implementation, although Jack Humbert posted online about his Planck with the feature before I did.

Eventually I ported the mechanical designs to OpenSCAD, which was much more suitable for an open source project than SolidWorks.

I also ended up creating a layout manager for the keyboard, allowing me to more easily experiment with different key mappings.

The full source code and all design files for the keyboard can be found on Gitlab.

legacy

Having a custom keyboard and bringing it around everywhere has been an excellent conversation starter, and the keyboard has otherwise served me extremely well over the years.

I had a moment of Internet celebrity status when somebody in my introductory CS class at Northeastern University took a photo of me with the keyboard and posted it to the r/mechanicalkeyboards subreddit, earning 7.3k upvotes! There was a lot of interest in my work, and this was the factor that pushed me to finally clean the page-long if-else chains out of my code and share the designs and firmware with the world. I posted a followup to r/mechanicalkeyboards with the new repository, although it only earned me 482 upvotes. ¯\_(ツ)_/¯

After about 6 years of exclusive use, the spray paint is worn in a few places, the mini USB port is a bit battered and requires some jiggling to connect correctly, and there's a part of the enclosure that's cracked from a time that I dropped it by accident. It's still very usable, but I've since begun on some even more ambitious designs. Stay tuned...