Yet Another Modular Split Ergonomic Keyboard

a custom 40-60% keyboard with a columnar+curved keyboard layout and an attached thumb-cluster

Similar projects worth following
similar to the Ergodox, with an ergonomic curvature akin to the Dactyl keyboard and other borrowed design elements from the various ergonomic/mechanical keyboards out there :-D

the firmware is build upon/using the QMK firmware [TODO cleanup&publish code]

the wiring borrows from the Ergodox and Ergodox-EZ [TODO: test the pcbs and publish schematics/layout]

the design goals are:
- create a small split keyboard that is light enough to move around the desk
- get a truly ergonomic layout (by as accurately as possible 3d-modeling my hand and adjusting the key/column/row position to be as comfortable as possible/feasible)
- keep the design modular (for the case and electronics) to ease future updates and modifications
- integrate a hand-rest

Log Entries:

1. prototyping part 1 and part 2

2. blender-ing a digital prototype

3. an overview of them modules

4. some pictures documenting how the key-matrix is (hand-)wired with two pcb-modules used

    STL exports from "ergonomic_keyboard_MK3_C.blend" Note: all but the top shell are desktop-FFF-3d printable, the top-shell itself comes out best in laser-sintered nylon

    Zip Archive - 384.16 kB - 06/11/2017 at 14:37



    overview of all the modules

    svg+xml - 53.87 kB - 04/21/2017 at 19:30


    blender file with the armature for the keyboard matrix, hand-model and 3printable mesh of the current prototype

    Zip Archive - 4.07 MB - 04/14/2017 at 07:41


    • 48 × Cherry Mx Switches (brown) scavanged from a "Cherry MX-Board 3.0 mechanical keyboard" - switches already come with a diode installed, and low-profile keycaps
    • 1 × MCP23017 I2C io-expander + custom breakout board
    • 1 × Atmega32U4 board (Pololu A-Star Micro)
    • 16 × Lego Technic Pins (connecting Top+Bottom + thumb-cluster)
    • 6 × Lego Technic Liftarms (for the hand-rest) (optional)

    View all 6 components

    • handwiring the Matrix

      JohSchneider05/01/2017 at 18:35 0 comments

      since the switches, scavenged from a cherry keyboard already had diodes installed, all that was needed was a small wire bridge - made with a small bending jig from solid-core wire

      ... the same wire which is used to connect the rows...

      ... and columns.

      this picture shows two modules in action: an I2C_secondary_bridge in the bottom-shell, and a matrix_mcp23017 connecting to the key-matrix, with the red expansion header going to the thumb-cluster layer on

      the thumb cluster is basically one row, which is run from switch to switch, and six columns, run to each switch separately

    • Them Modules...

      JohSchneider05/01/2017 at 17:36 0 comments

      a quick overview of the modules used (so far), which contribute to the 'M' in the projects name and are designed to support/simplify the (hand) wiring of the keyboard matrix

      the I2C_bridge_primary
      sits on the microcontroller side (which runs the firmware and does the USB stuff)

      it's main features are
      - I2C buffering (for long/unshielded wires)
      - ESD protection
      - current limiting

      Order from OSH Park

      - TRRS phone-socket SJ-43514-SMT
      - current-lim. IC: AP2553W6
      - I2C Buffer P82B715
      - ESD diodes VESD05a1
      - 0805 resistors and capacitors

      the I2C_bridge_secondary
      sits on any of the slave devices (usually one/another keyboard half, but could be multiple other devices)

      it's main duties are:
      - I2C buffering
      - ESD protection

      Order from OSH Park

      - TRRS phone-socket SJ-43514-SMT
      - I2C Buffer P82B715
      - ESD diodes VESD05a1
      - schottky diode SS14
      - 0805 resistors and capacitors
      the matrix_Attiny861a
      mostly an breakout board for an attiny, with pads on the front to directly solder a ribbon-cable which spreads out to the handwired keyboard matrix
      - ICSP contacts for reprogramming
      - pads to solder a 4-wire ribbon cable to the device-internal i2c-bus (with the attiny running an i2c-slave firmware)
      - an expansion header which can be fitted with an 2x6 micro-match connector to add more keys or use the ADC for an analog joystick

      Order from OSH Park

      - micro-match socket 1-215460-2
      - attiny 861a
      - 0805 resistors and capacitors
      the matrix_MCP23017
      - a breakout board for the I2C port-expander
      - with pads to directly solder a ribbon cable which spreads out to the keyboard matrix
      - as well as a ribbon cable to the internal i2c bus
      - 2x6 micro-match expansion header for additions to the keyboard-matrix

      Order from OSH Park

      - micro-match socket 1-215460-2
      - MCP23017
      - 0805 resistors and capacitors

    • blender-ing a digital prototype

      JohSchneider04/14/2017 at 07:35 0 comments

      Step 0

      starting point is a collection of 3-d models for some basic components and real-world parts:

      - a cherry-mx switch

      - the switch body itself

      - sculpted keycaps (each row on a standard keyboard has a slightly different shape)

      - a basic frame to hold the switch (adapted from the dactyl keyboard mesh)

      - some lego technic parts:

      - pins and meshes for cutouts with boolean operations
      - partial meshes to generate beams and long bricks with array modifiers

      and as reference the minimal meshes of the ergodox and dactyl-keyboard matrices

      (the flat ergodox part was an SVG import, and for the dactyl keyboard mesh all but the vertices/faces that form the mounting plate where removed)

      Step 1: the hand model

      to get a digital hand model like this

      some research is in order:

      turns out that even though there is no one-size-fits-all 3d model - creating a model based on ones own hand isn't too difficult:

      - getting to know the different parts from The Anatomy and Mechanics of the Human Hand helps in further web-searches

      - next step is to get a digital model of the human skeleton from the inter-webs - which can be taken as a base model, but has to be adapted to reflect the proportions of ones own appendages...

      - at this point Proportions of Hand Segments was very helpful - seems that there is an average amount of tissue surrounding our digits and the bones of each digit follow a somewhat predictable ratio pattern

      - there are also some interesting papers on the ranges of motion of the human hand, and how to properly animate one; like Handrix: Animating the Human Hand

      with all that, and some measuring tool a hand model can be modeled and rigged, to be posed in a relaxed position or touching various keys of the digital model later on

      Step 2: rigging the mounting plate

      the next step is to build a mounting plate for the keyboard matrix, that is rigged in a way to ease rapid prototyping:

      the mesh itself is an armature, with the cherry-mx bodies as bones which in turn follow the keycaps world-positions, stretching the mesh for the mounting-plate in turn

      Step 4: rapid prototyping

      with the hand and mounting-plate models one can start pushing around the key-caps, starting of at a position somewhere between the ergodox and dactyl references.

      these two pictures also shows some of the circles which where used as guides for the curvature, as well as the lego-grid for the hard-points added later on

      adding lego compatible blocks at the edges of the mounting-plate the size of the 3d printed part can be kept at a minimum while still allowing height and tilt adjustments

      from here its a few iterations of "adjust&reprint", to get a custom (and hopefully comfortable!) key arrangement

      Step 5: cleanup for production

      to get a 3d model that is closer to the finished some more cleanup is necessary:

      - resolving intersecting edges and thin parts, due to armature deform

      - straightening the outline, based on a lego grid (8x8mm)

      - adding "hardpoints" (e.g. lego-technic pin holes) to later mount the backplate and other attachements

      similar steps for the back-plate:

      the highlighted part shows how far the switches extend from the front plate - this is used to position the electronics and cutouts/support for the cables.

    • rekindled interests

      JohSchneider04/13/2017 at 17:52 0 comments

      but thanks to a recent post on the hackaday blog, which led me to an even older article titled "One man’s adventures in custom keyboard development"

      the old project just begged to be given another chance - so it was unearthed, the remaining (and rather dusty) parts reexamined, disassembled, recycled/disposed and soon new prototypes followed:

      ... but going back to the monolithic parts was a bad motivation wise...

      stripping the parts to an absolute minimum helped, but they still took too long to build

      turned out that using everyones favorite construction toy helped a lot!

      it now became relatively easy and fast to print a minimal keyboard matrix making (slightly) changes to the curvature or the column/row layout, change the amount of tilt (or more exotic stuff like "tenting", ...)

      as a bonus it became a breeze to add attachments to the prototypes to see how well the various combinations would work out :-D

    • humble beginnings - ages past....

      JohSchneider04/13/2017 at 17:36 0 comments

      like many projects, this too spent way to much time in a 'shelved' state...

      the initial motivation was to do another spin of the popular ergodox keyboard, hence the first prototypes where little more than a minimalistic 3d-printed grid to see how much the ergodox layout was to my liking:

      it soon became clear that a flat layout wasn't what I was looking for - so began the quest to figure out what makes a good and comfortable curvature...

      ... but printing out curved and monolithic parts to test the "feel" wasn't very fast and rather wasteful - taking all the fun out of rapid prototyping :-\

      splitting and modularizing the key-matrix came to mind...

      ... but this was way to wobbly and the modules plus supporting parts did take up to much space in the overall construction....

      this was a point where the project was shelved and came close to being abandoned :'-(

    View all 5 project logs

    Enjoy this project?



    techanic wrote 10/31/2017 at 20:17 point

    I like your project! Planning on building my own version of it... waiting for parts.

    Do you plan on releasing the model source files?
    Would you like some help? Documentation, build instructions, ...
    I plan on adding a trackpoint for mouse replacemant. A trackball like the 32xe looks interesting as well, but I'm not sure how it would work out usability-wise.

      Are you sure? yes | no

    Similar Projects

    Does this project spark your interest?

    Become a member to follow this project and never miss any updates