Double Action Keyboard

A keyboard with double action functionality, designed to make typing easier.

Similar projects worth following
Keyboards have stayed for a long time basically the same. I thought that it might be quite interesting to see how a more optimized keyboard would work, so I build a double action keyboard. It is quite unusual, since it has double action switches and a new layout.

The goal was to make especially typing of special characters a lot easier. Many keyboards use ALT + CTRL modifier combinations to generate special characters, this is in many cases quite impractical. For example when programming this is a problem.

I think that this kind of keyboard could be also very useful for such languages that have exceptionally many characters. The keyboard could be also used quite easily as a one handed keyboard, since it is possible to have six functions on one double action key when using it with a double action FN-key, but I haven't yet implemented this kind of functionality on the keyboard.

What is a double action keyboard?

A double action keyboard has double action switches that have two independent functions that can be used without pressing any modifier keys. The first action can be accessed by pressing the switch one step down and the other two steps down.

After having used this keyboard for a while it has proven to be a very powerful tool, since typing special character is so much easier than before.

Double action switches

The most challenging part of building the keyboard was the design of the switches. There were no suitable double action switches on the market, so I had to build them myself.

I modified the Cherry MX switch so that the 'plunger' could actuate the second button. This was achieved by removing partly the centering 'pin' of the switch. I used brow Cherry switches which have an actuating force of 0.5 N and tactile push buttons which have an actuating force of 1.6 N, so the difference between the first and second state is significant.

The tactile switches are simply soldered upside down on the PCB.


The double action keys have two different functions, so there are some challenges how the functions are triggered. The program works the following way: if a key is pressed two steps down the secondary function is triggered immediately, however the first action is a bit more tricky. If the key is pressed only one step the keyboard can't send the key press immediately since it might be that the user is still going to press the second step, this could lead to a situation where both actions are triggered instead of only the one that was intended to be triggered. The solution is to make it so that the first action is triggered when the key is pressed one step and then released or when the first step is hold down for a longer period of time than defined in the program.

To recap if you want type the first action you have to press the key one step down and release it (this gives one character) or keep it pressed longer than the delay time (if you need many characters), if you want to type the second action you need to press the key two steps down faster than the delay time.

The modifier keys are programmed so that they lock down when a 'normal' key is pressed while a modifier is hold down. They are released after the normal key is released. This makes short-cuts easier to press. If the modifiers would not lock down the modifiers would have to be kept pressed longer than the normal keys, because the normal key is activated (in most cases) after it has been released.

The firmware can be found on GitHub: DAK Firmware


A normal keyboard has up to 105 keys. I reduced the amount of keys to 66 physical keys, some of which are double action. When counting double action keys and the normal keys the total is 66 + 34 = 100 plus a 5-direction joystick, this equals to a traditional keyboard. Because it has fewer physical keys, the keyboard is smaller and more comfortable to use.

The arrangement of the keys is also very unusual. As shown in the picture enter, backspace, shift, delete and the arrow keys are all in the middle so they can be operated with both hands easily. I included a number pad as second action keys to the keyboard. Keys in black are primary keys, keys in gray are secondary keys and keys in red are FN-keys, that can be accessed by pressing the key and the FN-key simultaneously. In addition, the rows of the keyboard are not staggered, which makes typing easier.


I designed the PCB for the keyboard with Kicad and milled it with my CNC milling machine. As a controller I used a Teensy 3.2 since it had enough IO pins and it can be used as a USB keyboard controller easily.

The switches are connected to a 9 x 14 matrix where each row is pulled down with a pull down resistor and each column can be activated separately (set high) with the controller, that allows reading the states of all switches by using 14+9 IO pins.

  • 1 × Teensy LC Micro controller
  • 66 × Gateron MX Keyboard switch
  • 2 × 324 OHM 1/4W resistors for the LEDs
  • 1 × XM7D-0512 USB connector mini B
  • 66 × PTS645SL50-2 LFS Tactile switch 1.3 N

View all 12 components

  • PCB files added to GitHub

    Jaakob Lidauer03/08/2018 at 20:37 0 comments

    The files can be found in the PCB directory.

  • Keyboard finished

    Jaakob Lidauer08/06/2017 at 16:42 0 comments

    Here are some pictures of the new keyboard.

    The larger joystick is much better to use than the old one.  Also the feel of the keys is much more rigid. The keyboard weighs almost 1.2 kg. The wooden parts are made out of oak.

    The wrist rest is attached to the keyboard with magnets. There are two magnets in the keyboard and in the wrist rest. This works quite well.

    After all I'm quite pleased how it turned out.

  • Case finished

    Jaakob Lidauer07/29/2017 at 17:17 0 comments

    This is the case for the new keyboard.

  • Case

    Jaakob Lidauer07/23/2017 at 16:12 0 comments

    The case of the Double Action Keyboard V 1.0 is going to be made out of two 1.5 mm stainless steel plates. One will be on the bottom and the other on the top of the keyboard. The edges and the wrist rest will be made out of wood.

    The steel plates will be laser-cut, but I haven't got them yet

    Top plate

  • Layout

    Jaakob Lidauer07/23/2017 at 09:08 0 comments

    This is how the new layout is going to look like. There are 1.25u wide keycaps on the edges and two 2u keycaps in the middle. Obviously the functions of each key can be modified, so the second picture is just an example how the functions could be configured. 

  • Keycaps and switches

    Jaakob Lidauer07/23/2017 at 07:50 0 comments

    I decided to use DSA keycaps for the keyboard, because they have a flat profile and therefore suit well to the unusual layout of the keyboard.  The switches are Gateron browns.

  • Double Action Keyboard 1.0

    Jaakob Lidauer06/14/2017 at 14:36 0 comments

    I started building a second version of the double action keyboard, it is based on a Teensy-LC and the case will have a removable wrist rest. The layout will be slightly different and the navigation button is going to be bigger and more comfortable to use. Otherwise the keyboard is going to be quite similar as the first one.

    This time I ordered the PCBs. Here are some pictures:

View all 7 project logs

Enjoy this project?



Kosma wrote 03/19/2020 at 18:23 point

Is possible put place for tensy or arduino? for change firmware and device? Or meybe add raspberry pi zero?

  Are you sure? yes | no

Jim Thompson wrote 03/29/2019 at 18:40 point

Apple has a "double-action" touchpad on some of their MacBook products.  Drives me crazy, doing things I don't intend.

  Are you sure? yes | no

Matthias_H wrote 03/26/2019 at 21:02 point

Cool! But you MUST equip this with a velocity-sensitive mode, like a MIDI keyboard. With a bit of practice, 3 or 4 velocity levels should be absolutely doable by the user. You could thus reduce a QWERTY keyboard to one line of keys. Or add more umlaut/accent stuff the angrier the user types ;)

  Are you sure? yes | no

Matthias_H wrote 03/26/2019 at 21:02 point

Master mode: All of ASCII within 127 velocity levels on a single key.

  Are you sure? yes | no

tavian wrote 11/27/2018 at 14:43 point

This looks super awesome! How much would it cost for you to make a couple of these for me?

  Are you sure? yes | no

Evan Rowley wrote 02/01/2018 at 21:20 point

Any possibility of kits or PCBs being made available? This looks like an awesome keeb to build.

  Are you sure? yes | no

Jaakob Lidauer wrote 03/03/2018 at 10:14 point

I have a few extra PCBs, so if you are interested let me know.

  Are you sure? yes | no

Redgeneral wrote 10/18/2017 at 21:44 point

Impressive project - just two questions (1) where did you get the steel laser cut? (2) where were the pcbs made?

  Are you sure? yes | no

Jaakob Lidauer wrote 10/21/2017 at 19:18 point

The PCBs are from EasyEDA and the laser cut parts are from a local company.

  Are you sure? yes | no

Redgeneral wrote 10/21/2017 at 22:40 point

Thank you

  Are you sure? yes | no

de∫hipu wrote 06/14/2017 at 18:14 point

How do you handle ignoring of the first keypress in the case of a "strong" keypress? Did you add a delay and wait for the second keypress before the first one actually registers? If so, doesn't that add a lot of annoying latency?

  Are you sure? yes | no

Jaakob Lidauer wrote 06/15/2017 at 13:54 point

This is explained in more detail in the Firmware section. The idea is that when a key is pressed one step down it will be registered when it is released. If the key is kept pressed at its first position for 400 ms it will be also registered, this makes possible to keep the key pressed (for writing many characters at once).

This might sound complicated, but it works well.

  Are you sure? yes | no

de∫hipu wrote 06/15/2017 at 14:04 point

Sorry, I didn't see the firmware section.

  Are you sure? yes | no

Blecky wrote 04/29/2017 at 14:57 point

Have you thought about how mechanical stresses on those SMD buttons will work since they are mounted on the underside? 
Time, or one swift rage smash to the keyboard would probably see them tear off the pads.

  Are you sure? yes | no

Jaakob Lidauer wrote 04/29/2017 at 16:16 point

I thought about that, but so far I haven't had such problems.

I actually build the back plate of the case so that it supports the tactile switches from below, that should reduce the stress.

  Are you sure? yes | no

tyler wrote 04/29/2017 at 04:42 point

a "disable" feature would be really helpful for the heavy fingered, or the angry typist.

  Are you sure? yes | no

Clara Hobbs wrote 06/14/2017 at 15:02 point

Making it hard to type whilst angry might actually be a good thing though.  It could cut down on the number and severity of Internet fights.

  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