Dactyl Flatpacked
My own take on an open source ergonomic keyboard, adapted to 2D for laser cutting and a better result than I could expect from my available 3D printer at the time.
The inspiration for this project is the Dactyl Keyboard by Matthew Adereth, a 3D-printable ergonomic keyboard designed in Clojure.
When I first came across this project I had access to an older 3D printer that didn’t appear up to the task, and the included guide suggested that having a 3D printing service produce the needed parts could be quite costly.
This project was largely an exploration in an alternative approach: using 2D pieces slotted together to create the same 3D structure.
TL;DR
It’s a wildly different physical keyboard layout, but only because we’ve become accustomed to keyboard layouts that designed for constraints that no longer exist. It took some time to get used to this one, but I use a variation of this layout on a daily basis and would recommend it to anyone.
Materials
Throughout most of the development I expected to work with wood, at least as a prototype. I could get sheets of balsa or basswood from craft stores and use a coping saw to cut along the lines of a simple printed template. That went badly so I went back to the success of my Star Projector laser cutting and had a local service use the template to laser cut a sheet of acrylic.
Designing in OpenSCAD
This is a “scripted CAD” tool for generating models using code. I dislike a lot of it, frankly, as a programming language, but I really like the model-as-code concept and the parametric design process.
The author of the original project used scad-clj
, Clojure bindings for
OpenSCAD, which makes a number of improvements on the basic API as well as
enabling a functional programming paradigm, complicates the iteration process
by involving a Java-based pipeline for transpiling to native OpenSCAD code.
There was a lot of the original model I wouldn’t be using anyway, so I opted to re-write it in native OpenSCAD.
The challenges of this project come from thinking about different parts in terms of how they’ll be transformed into 3D space and relating parts in different transformations so that I can avoid interference in tight spaces while staying true to the original layout.
I’ve written more in my dactyl-flatpacked GitHub repository.