A fun project for my jump into the world of ergonomic keyboards
3d Files Available for download through gumroad (and hopefully soon, github)
Goals
- I’ve been getting more and more interested over the past few years in the interfacing of humans and computers. There’s a certain satisfaction in finding small improvements in controlling the physical and digital objects around us. Trimming repetitive tasks and making navigation more fluid and adaptable is a type of thought that is always in the back of my mind. I want to explore how bringing the keyboard into the third dimension and custom fitting it to my hands will hopefully improve or at least change my interaction with the device that I currently spend most of my waking time in front of.
- To begin, I searched many tutorials on building keyboards to get a sense of what I was getting into. Quite a few were found through Reddit
- I wanted the board to be quiet and slim, so I chose linear Kailh Choc silver switches, bought from mkultra.click along with clear keycaps. (For the next version, I’m going to try the browns for the tactileness and higher activation force)
- I went with a Pi Pico for the controller for cheapness and not sure if I was going to go with QMK or circuit python or something else for firmware. I saw that QMK was planning to add support for the ps/2 protocol. This gave me hope in adding a trackpoint mouse nub in the design at some point.
- I have no prior experience in alternate keyboard layouts but I’m excited to explore this realm.
Form Fitting Process
To custom fit the design to my hands, I used clay(plasticine) on an old helmet to explore a form that felt comfortable. I made my best guess at how many keys I wanted without really having a detailed idea about layouts. I mostly decided this by how many keys I felt I could comfortably reach. I used the caps from an old keyboard for this.
I tried to make the main form have a negative curvature (like a pringle) rather than curving upwards everywhere like most curved ergo boards I’ve seen. It felt more natural for my fingers to have a slight curve in height in relation to each other as if you’re typing on top of a ball rather than inside the bottom of one.
I felt that my thumb should be doing a lot more work, so I put 7 keys in the thumb cluster arranged in a concave hexagonal pattern.
For the front-to-back contour, instead of a smooth, curved, transition, I added a slight downward crease to the second row from the top as a sort of landing. My idea was that this gives your fingers something to help differentiate keys and know where you are on the board (Turns out, I don’t really like this. It pushes the top rows out a little too far so you need to stretch to reach the keys. A more consistent transition[probably still not super smooth] may be nicer than this idea, so I will try that in the next iteration).
3d Modeling
I 3d scanned the clay model using photogrammetry in Polycam. I tried lidar scanner on the Ipad Pro first but the resolution isn’t quite small enough to get an accurate scan. Using the front facing scanner mode in 3dScannerApp gets closer, but photogrammetry still gives better results. I took advantage of the 5 free scans in Polycam I could use for this.
I modeled switches and caps and laid them out on the clay scan to build the design around. I did all the main modeling in Rhino 5.
I made use of the snap-in lips on the switch to hopefully secure in place into the case without needing glue etc. This worked sorta well, but the switches can be pushes out very easily from behind.
Construction
- My original plan was to have it 3d printed at the local library but they had a relatively short time limit on how long a print can take. The project slowed at this point but then on a bit of a whim, I finally got my own 3d printer. An Ender 3 purchased at a nice discount from a local surplus store. I printed the left half of the board in PLA. Took almost 24 hrs to print.
- The switches fit in pretty well, but can be pushed out pretty easily if pushed from the back or often when trying to remove a keycap.
- one switch had an interference and needed a clearance hole drilled. Not a biggie, but it was pretty obvious looking at the 3d model, not sure how I missed it.
- Wiring
- I used these two tutorials the most when planning the build
- Handwiring is a lot more labor intensive than I initially thought. It took the better part of 2 days to complete the wiring for this one half board.
- 22 AWG wire. sliced off insulation where needed. sometimes accidentally cut through wire. should have used a leg of each diode as the wire to the neighbor.
- The first wire up I did was pretty willy-nilly and the rows & columns weren’t correct at all! I basically had some column/row positions tied to multiple keys. It was a bit of a mess and I didn’t even realize until I was trying to flash the firmware. Luckily after actually thinking about what columns and rows were needed, I fixed the wiring without a whole lot of hassle. Just needed to reroute a couple small sections.
I planned to use heat-set threaded inserts and bolts for the adjustable legs. Temporarily used random bolts and screws.
Used sugru for feet, but it was expired and never really set completely. I’m also thinking I need the feet to have larger flat surface area in order to grip the table better. The board does slide around a bit when typing, expecially when pressing shift & Mo(1) together.
There’s a very slight flex when pushing down on middle point (between thumb cluster and main keys). It’s not terrible and I don’t notice it when typing. Need to deal with sliding issue first.
Firmware
I know just a tiny amount of various aspects of coding to get me in trouble. Actually got this working with QMK using QMK MSYS and Sublime text for editing files.
Decided to not make the right hand side just yet since I knew there were multiple design changes that I wanted to do and that it would be a while before I get them completed. So, in the mean time, why not try to use just the one half? I wanted to try a new layout anyway and there were enough keys on my 4 digits to fit the alphabet. What the heckin shoot, it’ll be interesting at least.
Keymaps
I didn’t know how to find a layout for one handed typing in my specific switch layout, so I just looked up the alphabet ordered by most common letters and simply started at the home row and spiraled out, filling in the keys. I adjusted slightly after I started using it to take some responsibility away from the pinky. Other than that, not much thought went into it.
After a little usage and adjustments, I settled on the following layers so I have access to most of the keys that I commonly use. In addition to these, I have an upper layer that has the function keys and arrow keys, then another layer that is basically half a qwerty layout for the occasion where I don’t want to mess with the default control mapping for a video game.
I have two momentary modifier keys on the main layer pointing at the second layer in order to access it comfortably in either the main grid or the thumb cluster
I can easily press SHIFT & MO(1) with my thumb at the same time to get the special characters (though this does tend to make the board slide more since there’s twice the pushing force in that area)
The rotary encoder has music controls for now.
- Some issues and thoughts after using the board for a little while:
- See if I can move the rotary encoder into a better position to reach while pointer finger & thumb
- Remove step in vertical curve of columns
- Explore layout in clay where some keys on the “Pinky” columns are angled to be used by ring finger. I noticed I tend to use my ring finger on some of these keys anyway so might as well try to optimize that
- Rotate thumb cluster to better line up w/ thumb and maybe add more keys?
- Redesign feet for more grippage to avoid board sliding around as much. Maybe an optional connecting board to secure the two halves into whatever position?
- Can I make the layers in such a way to nicely get more combos of thumb keys for access to more keys? Like how I currently use Shift and MO(1) simultaneously.