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.
This is brilliant! I want one!!!
ReplyDeleteSo sexy!
ReplyDeleteany chance of getting a step by step tutorial of how to build a keyboard like that?
ReplyDeleteThis is awesome!
ReplyDeleteMakes me more eager for Stenosarus to come out!
Love it! Ingenious use of the Teensy, too.
ReplyDeleteI'd love to know your source for the Cherry clears and (if you're willing) your source code.
ReplyDeleteHas the board held up for you?
I got the switches at MechanicalKeyboards.com,
ReplyDeletehttp://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=596
but I wouldn't advise using them. Clears are pretty stiff compared to browns. I made a second keyboard, this time using an Arduino Micro and multiplexing. On that board I replaced all the springs with some I hardvested from Cherry MX browns from an old keyboard I already had. I need a source of cheap browns or reds! I'm happy to share the code for both boards, I just need to figure out where to put it.
I put my source code up at github...
ReplyDeletehttps://github.com/CharleyShattuck/Steno-Keyboard-Arduino
It's two files. "steno_keyboard.ino" is the original version, for the Arduino Mega. "mux_steno.ino" is the for the newer board using an Arduino Micro and fewer pins.
These are my first working programs in C and I think they are pretty simple and easy to understand. I'd love to hear what you think. (I've been programming in Forth for 25 years or so).
Hey this is absolutely fantastic. Although I knew about chorded keyboards, I didn't know that steno keyboards also used chords (I believed they just type sequentially, really really fast).
ReplyDeleteMaybe a chorded keyboard (like the image on the wikipedia for the entry) would be a good project, as you don't have to have your hands raised while, for example, you want to type while lying down (relieves strain, especially for those who can't sit for a long time or are hospitalized).
Also, congratulations for writing your first working programs in C! If you take note which loop checks conditions when, it's the easiest language on earth.
Is there a chance to get step by step instructions or schematics for the keyboard build?
ReplyDeleteSeems this could be a lot easier that chopping up a keyboard.
Thanks
Bob
Hi Charles,
ReplyDeleteWould it be possible for pin assignment for the switches?
Can't quit make out what switch goes to what pin in the photo.
I purchased two older stenotype machines for $42 total shipped.
I'll use one to start learning on, then the other instead of using keyboard switches I'm going to try and use optical sensors in front of each stamp. Would only have to pull the roller out and fit the sensors in.
Might make for nice conversion if I can get it to work.
Hi Bob,
ReplyDeleteI'm not sure you got my email. Just wanted you to know that I posted a version of steno_keyboard.ino with more comments so maybe it's easier to figure out.
Charley.
This comment has been removed by a blog administrator.
ReplyDelete