← Back to Kevin's newslettersPublished: 2020 Oct 4

A brief keyboard update

The ergonomic travel keyboard I started back in April is finally finished. The two big lifts since we last discussed things in August were:

  1. Discovering and debugging intermittent hardware failure related to detecting key-presses via interrupts; Jack Ganssle was right that a real-time clock tick-based polling scheme is more reliable than wiring switches directly to interrupts.

  2. Developing firmware to support complex interactions like “regular key when tapped, modifier key when held”. I designed and prototyped the logic in Clojure, which was not only much more enjoyable, but also took less time than even porting that same logic over to Rust. While I’m glad to have learned much about embedded Rust over the course of this project, ultimately I’ve found the language to be too complex and bureaucratic for my needs. It certainly got the job done, but I always felt like I was fighting against rather than collaborating with the language. (For my next big embedded project, I’ll probably try the deliberately-much-smaller-and-simpler Zig language.)

As for the industrial design, the furthest I got was laser-cutting leather to sit underneath the exposed circuit board. My hope was that it’d provide sufficient grip, but unfortunately the keyboards are still so lightweight that they up slipping around as one types.

Ultimately, I’d say this first wireless keyboard was successful as a prototype: I learned a heck of a lot about PCB design, embedded programming in Rust and C, and bluetooth.

However, I’m not happy with the end result as a product. Not only is it ugly:

Two small keyboards on a macbook air

it’s also impossible to just pick up use: The keys are laid out differently (ortholinear rather than staggered), one must use layers to type regular characters, and all the keycaps are blank! (Not by choice — they’re the only kind available for Kailh’s PG1350 “low-profile” switches, so non-blank switches would require one to develop custom tooling and do a plastics manufacturing run).

So, for the next prototype I’ll be implementing the familiar Apple layout. (Well, split across two wireless halves — don’t worry, I’m not going entirely normie on y'all.)

I should be able to reuse most of my software and electrical design from the first prototype, hope to focus my efforts on industrial design. In particular, exploring materials besides injection molded plastic and CNC-machined aluminum.

That’ll come down to the manufacturing capabilities I can find here in Taiwan. As such, I’m hiring a part-time assistant to find and work with suppliers — if you know any hungry, Mandarin + English-speaking industrial design or architecture students in Taipei, please send them my way!

Misc. stuff