Ergonomic QWERTY keyboard with Trackball

Similar projects worth following
Reduced key-set with per finger keys alignment for comfortable fast typing.
It has well-known QWERTY layout, familiar numeric keypad and standard arrow keys arrangement.
Palm-rests and overall geometry addressing the CTS.
Built-in pointing device.
Whole 105+ keyboard emulation including the numeric keypad and F-keys.
Game-pad mode.
Keyboard body and palm-rests have a lot of space for laptop grade hardware. This keyboard can be easily converted into a portable computer to be used with home TV, office monitors or wearable displays glasses.

The main ideas I formulated for myself:

  1. Key set is divided in two planes - for left and right hands.
  2. Planes are mounted at angle to address the tunnel syndrome.
  3. Keys are not inclined, they are pressed straight vertically.
  4. A Space key cut in two and moved to the position under thumbs.
  5. All keys are grouped by actuating fingers and moved to match the middle key with each finger relaxed position "asdf" "jkl;".
  6. Keys are aligned in groups to reduce finger movements. Key caps also tailored to this goal. Finger blocks are not parallel, they aligned in the direction of each finger movement.
  7. The number of keys is reduced to let finger remain in its basic position all the time.
  8. Each index finger has one additional 3-key group (as in common qwerty keyboards). These additional groups ("TGB" for left finger and "YHN" for right one) are slightly raised above all other keys.
  9. Trackball is mounted in the right palm rest. It acts as a mouse and as a mouse wheel. This eliminates the necessity of movement between keyboard and mouse.
  10. All removed keys are placed in additional plane, activated by holding the thumb keys.
  11. Left additional plane contains numeric keys. Right plane holds arrow and navigation keys. Thus there is no hand movement between text typing position and arrows.
  12. The group of "shift-alt-gui-ctrl" keys is also eliminated. Holding key "A" acts as shift for right part of the keyboard. And the key ";" do the same for left part.

  • Finale

    Andrey Kalmatskiy12/20/2017 at 16:24 0 comments

    I used this keyboard for almost a year. It works good, but its exploitation revealed a number of fields that need improvement.

    What I like about 32xe keyboard:
    • Layout.
    • Solid single-part body.
    • Built-in pointing device.
    • Mechanical switches.
    What needs improvement:
    • Noisy Blue Cherry-MX switches.
    • Long key travel (yes, I'm used to laptop keyboards). I'll try using ML switches.
    • Keystrokes are detected (sent to computer) on release not on press, this is unusual and not comfortable. 32xe keys act both as shift-keys and as ordinary keys. I'll try moving shift keys to a separate row.
    • Wireless (BT) interface needed.
    What needs researh:
    • Replace trackball (that works good) with touch-pad. This makes mouse mode detection more intuitive.
    • Split the uni-body design into separate units (left-right-thumbs-tracker) attached to the rigid chassis. This helps to experiment with different designs (ergonomic, compact, back-typer, with built-in laptop etc).

    The accumulated improvements demands the complete redesign.
    So it'l be the completely different new keyboard and the new project.

  • Flat key caps

    Andrey Kalmatskiy12/20/2017 at 15:27 0 comments

    Key caps made flat

    New keyboard look

    I tested flat key caps for two months. For me it works pretty good. So it is the final look.

    New STLs are uploaded to github.

  • Tray and Sensor Window

    Andrey Kalmatskiy03/29/2017 at 21:57 0 comments

    It turns out that ADNS-9800 sensor has much wider view angle than I expected, so it didn't work well till I expanded the window from this:

    to this size

    Modified STLs were uploaded to github.

    And finally I attached the bottom tray, so the keyboard body is considered finished.

    Tray is just a flat plate glued to the main body.

    Also the new STL can be found here:

  • 3D-Printed parts postprocessing

    Andrey Kalmatskiy03/20/2017 at 18:47 0 comments

    First I tried to refine PLA printed parts:

    • printed on slower speed
    • sanded
    • painted with XTC-3D coating.

    And the same keycap using ABS and acetone bath

    I tried many techniques, it turned out that the best one is the simplest one:

    • Take a food box.
    • Put the paper towel slightly wetened with acetone to the bottom of the box.
    • Put a piece of aluminium foil atop of towel in its center.
    • Put ABS parts on the foil.
    • Close the box with hermetically fit cover.
    • Wait 15 minutes.
    • Profit.

    Despite some curling, I chose ABS parts for their slick ivory look and feel:

    So now my keyboard looks like this:

  • How Keyboard Works

    Andrey Kalmatskiy02/13/2017 at 17:25 0 comments

    Keyboard part is almost ready, though mouse one still needs some work.

    Main Layout


    Numeric Layout

    Esc7&8*9(0)Print ScreenMLBMRBMMB?
    `~1!2@3#-_(hold)Mouse lock?????


    Num LockF7F8F9F10HomePg UpUpPg DnBSpace
    Caps LockF4F5F6F11EndLeftDownRight'"
    Scroll lockF1F2F3F12Pause(hold)InsDel[{]}\|



  • Firmware

    Andrey Kalmatskiy02/06/2017 at 16:05 0 comments



    • key matrix scan
    • USB HID connectivity
    • trackball sensor reports x-y-deltas
    • logic for shift-control-alt-win modifiers
    • thumbs shift to numeric an navigation mode.


    • mouse mode
    • wheel
    • repeat
    • num-lock mode
    • game mode

  • Key caps

    Andrey Kalmatskiy01/30/2017 at 17:42 2 comments

    Printed key caps (using keycaps.pk2):

    If a 3D printer does not support multiple materials, the final model can be painted by permanent markers. I found that the Sharpie felt-tip pens are durable and well-adhesive to PLA.

    The model texture is formed by parallel lines (at side surfaces) or cross-hatched pattern on top and bottom ones, and the ink flows in those micro cracks, thus spoiling the painted regions. So I performed a trick:

    1. Made a model as if it is two-material.
    2. Setup a slicer for two headed printer having zero offsets.
    3. Removed all Tn commands in resulting G-Code text file.

    Resulting model texture is having etched contours of inter-color borders, and the ink of different color don't intermix.

    Keys "TGBYHN" are raised by 2 millimeters:

    Thumb caps are too long and unsteady, so I'm going to redesign them.

    Here is the assembled keyboard from top (this time having full wiring):

    Now I've started coding the firmware. This code looks useable for mouse sensor Dwergmuis

  • Wires

    Andrey Kalmatskiy01/23/2017 at 16:22 0 comments

    Keyboard body has been printed as six pieces. I find out that the PLA plastic can be firmly glued by SCIGRIP 16 Acrylic Cement, maybe this helps someone.

    Cherry switches fit well. Unfortunately I broke one during installation. Guess which one.

    Mouse sensor fits well in its hole.

    Loose wire soldering looks worse than it is:

    It's time to mount caps and code the firmware.

  • Electronic parts and body

    Andrey Kalmatskiy01/16/2017 at 16:24 0 comments

    Since this is just a early prototype, I decided to work without any PCB.

    I decided to employ ADNS-9800 as a mouse sensor and Teensy 2.0 as the main controller board.

    Wiring is done with some old IDE cable (yeah soldering is not my talent ;-).

    ADNS-9800 switched to 5 V.

    Cherry MX keys (I've chosen Blue ones for its soft clicks) are mounted in the main body.

    Keys are wired in 3 rows by 12 keys in each row. This occupies more pins but reduces the ghosting problem: a finger cannot press multiple keys of one grid column.

    Thumb keys are wired to the middle row on their own columns.

View all 9 project logs

Enjoy this project?



henrebotha wrote 04/25/2020 at 21:54 point

This project is amazing, well done! I really like where you placed the trackball. I have had similar ideas in the past, I'm glad to see it worked for someone.

Have you considered making the thumb keys vertical (i.e. mounted on the sides of the palm rests)?

  Are you sure? yes | no wrote 02/21/2017 at 13:44 point

Hi Cool project but the file type you used to post your CAD can not be opened. Is there a way you could post them in a more accessible file type like step or stl?

  Are you sure? yes | no

Magepodcast wrote 02/06/2017 at 22:47 point

I would reccomend looking into the Ergodox. It's a similarly split hand keyboard, and i think that it could help you out with some design ideas.

  Are you sure? yes | no

Andrey Kalmatskiy wrote 04/05/2017 at 19:43 point

Thanks for suggestion. The Ergox is an interesting attempt to revise what a modern keyboard should be like. It has history and mature community.

I've compared 32xe with Ergodox:

The Ergodox is a construction set of four bodies (palm rests x2 + keys x 2), with lots of adjustments. I found it not so usable. And the 32xe unibody design is compact, always ready for use and suitable for my large palms as well as for small hands of my 6 yo son. No need for adjustments if it is already at right positions and angles.

The Ergodox has no mouse and due its size and shape there is no good place for mouse around (or between) it. Meantime the 32xe has built-in trackball always right under your hand.

The Ergodox has a full set of rows and columns of keys (and additional keys as well), thus the palm always loose its main position while typing. While 32xe has reduced key-set, forcing each finger to remain in its own position all the time.

The Ergodox EZ has very strange position for nav. keys, luckily it's customizable. 

Despite its name, the Ergodox  turns not that ergonomic: the keys are not aligned by finger lengths and palm rests don't let palms to rest.

Unfortunately I found no Ergodox ideas to borrow. On the contrary, I'd recommend the Ergodox community to adopt some of 32xe design tips.

Anyway it is always good to meet like-minded people.

  Are you sure? yes | no

rek wrote 02/04/2017 at 04:09 point

Why not incline the pushing direction of the keys ? more natural no ?

And my list of ideas :

Add additional quick keys horizontally that you push by moving hand forward ? F1-F12 + FN mapable

shift-ctrl-alt-gui removed ? quite useful, any other way to bring them back ? mini row for pinky ?

Add scroll wheel between FG and HJ, one vertical and one horizontal ?

Split the 2 parts, add wireless/battery and put laser under so moving the whole thing is like a mouse... add notch thumb and pinky so you can grab it to lift it quickly... a keymouse ? Induction pad instead of battery for lightness ?

CNC the base, support and keys, polish and cast silicon mold. Cast it with lightweight polymer. Cut pieces, glue and paint.

But hey, you made something nice, just keep improving it. Who said a KB can't evolve :)

  Are you sure? yes | no

Andrey Kalmatskiy wrote 02/23/2017 at 02:04 point

Thank you for feedback.

This keyboard is 14th version. Most of these ideas (like inclining, splitting parts, moving keyboard as mouse) I tried in previous keyboards. Some is waiting for new versions.
Shift-ctrl-alt-gui functions just moved to "ASDF JKL:" keys. So for example to type Ctrl+A, you just:
1. press 'J' which plays Ctrl
2. press and release 'A'
3. release 'J'
This is the same scenario as you do with separate Ctrl-button, except you don't need to move hand out of basic position.
Regarding CNC, polishing - I tried and it worked, thanks.

  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