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.

The keyboard that I build has a rather unusual layout, the arrow keys are replaced with a 5-dir navigation button. The fifth action of the navigation button is 'delete'. I also moved backspace, enter and shift to the middle of the keyboard to make their usage easier.

After having used this keyboard for a while it has proven to be a quite 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.

Building process

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...

Read more »



Adobe Portable Document Format - 108.16 kB - 04/13/2017 at 06:12


  • 1 × Teensy LC Micro controller
  • 66 × Gateron MX Keyboard switch
  • 66 × PTS645SL50-2 LFS Tactile switch 1.3 N
  • 1 × SKQUCAA010 ALPS Navigation button
  • 137 × 1N4148 Diode

View all 12 components

  • 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 project log

Enjoy this project?



Radomir Dopieralski 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

Radomir Dopieralski 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 backplate of the case so that it supports the tactile switches from below, that should reduce the stresses.

  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

Clayton G. 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