hardware / software / wetware

Atreus ergonomic keyboard

I've been interested in keyboards (and other input devices) lately, and wanted to try a small, ergonomic, mechanical design. After some research, I chose the Atreus: it's a reasonable compromise across size, portability, ergonomics, and cost. The only fully custom part is the lasercut plate and case. After using it for a while, I added bluetooth, resulting in an extremely effective portable keyboard.

my atreus keyboard


Ponoko offers reasonable prices and has an automated quote system, which made design tweaks easy and convenient. The problem I ran into is that Ponoko provides templates which your designs must fit into; if your design is too large, you get knocked up to the next price bracket. To make the Atreus case fit into the P2 size template, I had to split the spacer layers of the case into smaller pieces. You can grab the exact file I submitted, or you can generate the pieces using the OpenSCAD case files in the Atreus repository, which has included my changes as an optional feature. Have the files cut in 3mm thickness of the material of your choice; I used matte black acrylic. Cost (including shipping) came to $45, which could be cut down by perhaps $10 through more careful part alignment, skipping the third spacer layer, and choosing clear acrylic as the material.


The firmware should work on any ATMega32U4-based device (I used a Chinese Pro Micro knockoff from eBay). As I was lazy in my wiring, I needed to modify the pin settings in the firmware. However, the code made a few assumptions about pins numbers and ports, so I rewrote the scanning code to be a bit more general and easily modified (changes accepted into the atreus-firmware repository). Sadly, this version of the firmware doesn't play nicely with the bluetooth controller I used, so I've switched to the TMK version.


My greatest problem with the default layout is the absence of arrow keys on layers 0 and 1; layer 2 is ridiculously inconvenient for important keys. My first attempted solution was to replace the page up and page down keys on layer 1 with up and down, and this solved most of my irritation. Currently, my second layer has the number keys across the top and arrow keys under the right hand, which means a few characters need both Fn and shift. I feel this is a reasonable tradeoff, as using two modifiers is much easier when they're thumb keys instead of pinky keys. Feel free to play with my layout.h file.


For a compact keyboard, bluetooth is naturally desirable. I stripped down a Handheld Scientific adapter and 3D printed a layer to mount it nicely inside. The layer-based design of the Atreus makes it very amenable to modifications of this sort. The OpenSCAD code and instructions for implementation of my design are available on Github.


Due to the multiple fuctions and layers involved, I decided to have custom keycaps printed by WASD. You can grab my design SVG. One concern I had was the sculpting on their keycaps; I decided on placement experimentally, and am satisfied with my choices. The top row is entirely R4, the second is R3, the third R1, and the bottom is somewhat more complicated:

R4 R4 R4 R2* R2* R3** R3** R2* R2* R4 R4 R4 R4

The R2 keys on the bottom row are flipped, and the R3 keys in the middle are 1.5 units long (and rotated).


I chose Cherry MX brown switches, and also added o-rings to the keycaps, which shortens the travel and makes switches easier on the ears/fingers. I used black nylon screws to complete the look, and also because they were easy to trim to the exact length needed.