My Homemade DIY Steno Keyboard
Not having
enough patience to wait for the Stenosaurus, I
decided to make my own Steno keyboard. I was pretty happy with my modified Quickfire TK in most ways, but the offset between the upper
and lower rows of keys was disorienting. Here is what that keyboard looked like
just before I made my own.

Note that I
removed unused keys because they were distracting. I found the pairs of keys
that matched in height the best and placed them upside down in the top row to
get them closer to their mates in the bottom row. Chords are easier to hit this
way, but I still wanted the rows to line up.
I started by
removing some mechanical keys from an old Kinesis keyboard that doesn’t work
anymore. I experimented with drilling holes in a Radio Shack prototyping board
and placing the keys. Then I bought a bargain bag of Cherry MX clears (white?)
and after drilling the appropriate holes I hot-melt glued them to the board. I
decided to wire each key to as separate IO pin on a micro-controller instead of
using a matrix. It seemed simpler and it was only 23 pins. Here’s what the
wiring looks like. It’s soldered, point to point, using wire-wrap wire.

I also
bought key caps in two colors, black and dark gray, all the same size and
shape. I installed the thumb keys sideways so that the AO and EU pairs would
make comfortable chords same as the keys in the upper and lower rows. I also
ended up placing the DZ keycaps sideways to get them closer to T and S. In the next version I
would probably use roughly the same spacing except to place the * and the DZ
keys sideways and slightly closer to their neighbors.
I used an
Arduino Mega as the micro-controller. I normally program only in Forth, but
this project is so simple that I decided to try the Arduino IDE instead. I
believe it took less than an hour for me to code and debug the application,
which surprised me.
Here’s a
picture of the finished board:

I used my
understanding of the TX Bolt protocol, since I knew how to use a serial port
but not so much about emulating a USB keyboard. Also I hoped that using a
serial protocol would bypass the problems with the NKRO keyboard in Linux that
were preventing me from using VIM. It turned out that I was able to use both
the standard keyboard (in Dvorak layout for me) and the steno keyboard using TX
Bolt at the same time without any trouble.
I tried
simplifying the TX Bolt protocol in hopes that it would not confuse Plover and
make my program easier to write and debug. Instead of using a variable length
packet, sending only the keys that are pressed, I sent all four bytes in order
every time, even if some of them are zero. The top two bits of each byte
identify the other six bits. Always sending byte number four lets Plover know
immediately that the stroke is finished, I reasoned, and this seems to be the case.
I never bother sending any other bytes.
I’ve been
very happy with this keyboard. I would
love to move on the next one. I would make it more compact, getting the
micro-controller out of the way. It should have a case, both for protection and
to make it more sturdy. I did bolt it to a piece of
clear plastic from Tap Plastics, but I’d like to do better.
Finally,
here’s a picture of the keyboard in action, editing a file with VIM in Linux on
my laptop.
