This is a fork of the Tom Short's ManuForm keyboard, which itself is a fork of the Dactyl, a parameterized, split-hand, concave, columnar, ergonomic keyboard. This work builds off of the ideas of the ManuForm by Jeff Gran with discussions on (geekhack).
For additional background information about mechanical keyboard history and various parts and consideration check out the Keyboard Information Doc.
- Can have different row curvature for home columns vs. extra "reach" columns.
- Any column can have the last row keys (previously only middle and ring finger had them).
- Can utilize an optimization setting if column gap is too tight on last row keys.
- Additional thumb cluster options (see below).
- Parameters for how the thumb cluster attaches to main, useful if designing new thumb cluster.
- Can create more rows and more columns compared to previous versions.
- Allow for Cherry MX or more generic key switch hole.
- Expanded what settings are computed instead of hard-coded options requiring multiple edits.
- Overall improved parameterization, fewer setting assumptions & leveraging computed settings.
- Added more documentation on mechanical keyboards and key map layout.
For ergonomic keyboards of this design there is a desire to make better use of the thumb, giving it multiple keys to press instead of how a traditional keyboard only has a single space bar button to be used by one or both thumbs. This fork introduced a new design for the keys pressed by the thumbs. This collection of extra keys for the thumbs has come to be referred to as the "Thumb Cluster" within the mechanical keyboard community.
Here we are introducing the Thumb Bowl design for the thumb cluster. This code also has an option for the Manuform thumb cluster design.
The keyboard is parameterized to allow adjusting the following:
- Rows: 4 - 6 (or more, or less)
- Columns: 4 and up
- Row curvature - Home columns
- Row curvature - Reach columns
- Column curvature
- Row tilt (tenting)
- Column tilt
- Column offsets
- Depth (raised off the table)
- Thumb cluster design style:
- Manuform
- Thumb-bowl
- Thumb cluster positioning & attachment points
- useful if creating additional thumb cluster designs
For any given number of "rows" defined for any keyboard size only some of the columns in the main keys section will have that number of rows, so it better to think of the row number as the maximum number of keys a column could have. Frequently the "lastrow" (the row closest to the user) won't actually have a key for every column. For example if a keyboard is defined as having 4 rows, looking at it may seem more like a "keyboard with three rows, but an extra key at the bottom on some columns". Likewise some columns may be set to not have a first row key (at the top, furthest from the user). When describing a board size, the short hand should be in the format of RxC where R is the setting for the number or rows, and C is the setting for the number of columns (eg 4x6 is set to 4 rows and 6 columns, plus the thumb cluster keys, but depending on other settings it may appear to typically be 3 rows with a few bonus keys).
There are two primary row curvature parameter settings. The curve of the keyboard for the home row keys are set by the "β" parameter. The "γ" is the curvature setting for any of the reach columns, which are when the pinkie or pointer finger has to travel to the side for that column. It is also possible to decide to only use the main first parameter for all columns if desired.
Currently the author is using heavily curved main board and heavily curved thumb clusters with the thumb-bowl design with 6 thumb buttons. On a 4x6 layout, all columns have a first row key, while only three columns (middle finger, ring finger, and home column pinkie) have a last row key. For the 5x6 layout, the settings are the same except there is no first-row-key for the non-home pinkie column (when the pinkie finger has to reach sideways for keys in that column).
Previously the 40% size (set as 4x5) and the 60% size (set as 5x6) models by Tom Short implement the Manuform thumb cluster design. The 40% version has a bit more tenting than the Dactyl. The Heavy Curve model (set as 5x5) is for those who want a deep bowl design for the See the following model files for configurations that may be most common:
- Run
lein repl
- Load the file
(load-file "src/dactyl_keyboard/dactyl.clj")
- This will regenerate the
things/*.scad
files - Use OpenSCAD to open a
.scad
file. - Make changes to design, repeat the above
load-file
command, OpenSCAD will watch for changes and rerender. - When done, use OpenSCAD to export STL files
Pre-generated STL files are available in the things/ directory.
When a model is generated, it also generates a .scad
model for a bottom plate.
This can be exported to a DXF file in OpenSCAD.
The things/ directory also has DXF files for the bottom plate.
When laser cut, some of the inside cuts will need to be removed.
This model can be tricky to print, depending on your 3D printer.
Printing with PLA on a Makerbot: It's wide, so there were problems with edges warping. This can cause the printer to think its head is jammed. Even if it successfully prints, warping can cause problems. On one print, the RJ-9 holder was squished, requiring cutting down the connector to fit.
Printing with Shapeways or other professional shops: They probably won't have such difficulties.
Printing with PLA on a larger more robust 3D-printer: Higher quality PLA helps with fewer tangles or print errors. Larger print area means the print head doesn't have to go all the way to the edge.
For guidance from previous versions, see the instructions for wiring and general build for the original Dactyl and for Tom Short's Manuform.
Here are materials I expect to use for wiring.
- Two Arduino Pro Micros
- Heat-set inserts
- M3 wafer-head screws, 5mm
- #30 wire
- 3-mm cast acrylic
- 1N4148 diodes
- Female RJ-9 connectors
Following the traditional approach, the row connections can be made soldering the legs of the diodes. The columns can be wired with a bare wire, or insulated wire stripped at the connection points.
The 3D printed part is the main keyboard. You can attach a bottom plate with screws. The case has holes for heat-set inserts designed to hold 3- to 6-mm long M3 screws. Then use wafer-head screws to connect a bottom plate. A bottom plate is technically optional, but can help clean things up and protect any dangling wires. You need something on the bottom to keep the keyboard from sliding around such as a rubber pad (or PlastiDip the bottom).
This is how the rows/columns wire to the keys and the ProMicro
NOTE: you also make sure the firmware is set up correctly (ex: change row pins with col pins)
Firmware goes hand in hand with how you wire the circuit. Some firmware options include:
- Tom Short's adaptation of QMK firmware here. This allows each side to work separately or together, and shows connections for the Arduino Pro Micro controllers.
- Keyboard firmware in Python here
Keyboard Layout Editor is useful for designing how you want to map your keys.
Copyright © 2015-2020 Matthew Adereth, Tom Short, Chris L Chapman
The source code for generating the models (everything excluding the things/ and resources/ directories is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3. The generated models and PCB designs are distributed under the Creative Commons Attribution-NonCommercial-ShareAlike License Version 3.0.