Rachel Murray edited this page Dec 29, 2017 · 8 revisions


The finished, operational Crayonboard

The original crayon case from which the Crayonboard was made

This is a stenography keyboard made out of a plastic crayon case, using open source software (Plover - http://www.openstenoproject.org/) on a mechanical N-key-rollover (NKRO) layout. The software included here was forked from the Volksboard repository and the idea is pretty similar to the Volksboard.

Here's a description of how I made this:

Key switches and keyboard case

I used a set of Matias linear key-switches. I have previously found these keys-witches to work really well but they require a lot of force to depress, especially if you are typing a really complicated cord. To address this, I opened up the keys and cut the springs inside them to about 3/4th of their original length. This seemed to help a little.

To put the key-switches on the crayon box, I used a scissors to punch a set of holes for the pegs in the top of the box - it was helpful to first draw a set of guides based on my key outlines.

Crayon box after the crayons are taken out

Template mounted on the Crayonboard

Most of the switches rest on top of the plastic case, with only the contact pegs (small metal bits) pushed through to the other side of the plastic. However, I wanted the thumb keys lowered compared to the other keys. I drilled a set 5 of holes in the plastic just wide enough for the sliding bit of the key-switch to fit through - 4 of these holes were for the regular vowel keys and one was for the number key, just to the right of the E and U keys. Here is what the holes looked like before the switches were added:

crayon case with holes drilled for switches

And this is what it looked like after the switches were added (plus a paint job to make it look a little nicer):

Matias switches attached to the case

On the other side, you can see that for most of the switches, just the metal leads poke through. This is just enough clearance to solder onto the wires/diodes.

Matias switches attached to the case, viewed from the underside

Keys and layout:

To figure out the size and shape of the keys themselves, I downloaded and modified the Stenoboard open-source files. I mirrored one of the right-hand assemblies to form the left hand, removing the keys furthest from the center (on the left). I also added a number key to the right of the vowel keys.

I made the key tops out of epoxy resin, by first sculpting a key out of modeling clay and then creating a mold of that key and casting it using a two-part epoxy resin. This is pretty time-consuming and requires a molding material (I used 'Blue Stuff') and an epoxy resin.

Some of the clay sculpted keys

Some of the clay sculpted keys being molded using 'Blue Stuff'

Another way to make keys would be to order some steno key-toppers and use those.

I know from experience that it is nearly impossible to cast a perfect fit for the key stem. The little bit of the key that goes into the key-switch itself must be just exactly the right size - too big and the key won't fit, too small and the key will pop out. So I just ordered a set of 3D-printed keys specifically designed for the Alps/Matias key switches.

Picture of the 3D-printed key stems

Then I used a Dremel tool to shave off some of the material around the edges so I could just glue these key stems to the bottom of my custom-made keys. Here is a picture of the 3D-printed parts mounted on the Crayonboard:

3D-printed parts mounted on the Crayonboard


There is a pretty good description of how to wire a NKRO keyboard here. The fundamentals seem to be the same no matter what the specific key layout happens to be.

As is described in the Volksboard documentation, you have to connect one diode per switch all on the same side of the switch (I attached the diode to the duller, bronze-colored peg rather than the shinier, gold-colored peg). The side of the doide with the dark stripe should face away from the switch. So the lighter-colored side of the diode needs to be closer to the switch.

Wiring for just the rows of the Crayonboard

All the diodes in a given row are connected to each other on the dark side of the diode - i.e. put the solder joint connecting the first and second diode so that the dark side of the first has a direct connection with the dark side of the second. Repeat to connect the second to the third and so on until the end of the row. Don’t connect the rows together, and don't forget the row that has the thumb keys. I connected the diodes just by bending the wire leading away from one diode and soldering it to the next diode.

I found it was easiest to do the diodes first, then to thread the ‘column’ wires underneath them. You could put the columns on top or do them first though if you want. For each column, connect the non-diode pegs. My setup has only three rows, and I only needed to hook up a switch in the third row (the vowels) for 5 of the columns.

Wiring for just the rows and columns the Crayonboard

Solder each of the column wires to a pin location in the Teensy (or whatever board you are using). Also, connect each of the rows to a pin location of its own. I had 10 columns plus 3 rows, for a total of 13 pins needed.

Zoomed-out wiring picture

I’m using a Teensy 2.0circuitboard to control the keyboard. As far as I can tell, you can use almost any teensy board as long as you remember which pin location is for the LED (on mine it is 11), and as long as you can figure out which pin location is for pin 1, pin 2, pin 3 (etc.). There is a handy chart here. You have to use the numbering system which is labeled ‘Arduino,’ and keep track of which pin is attached to which row and column.

Of course I didn’t use different colors of wires, nor did I solder the rows and columns onto my teensy board in sequential order or anything useful like that.

Wires leading into the Teensy controller


I’m using the StenoFW software modified for Volksboard, and further modifying for my setup. Primarily I had to modify the .py file defining the physical layout. There are a couple different layouts already included when you download the software - Volksboard_2.py, Stenoboard.py etc. I created a new one and called it ‘Crayonboard.py.’ The main thing to change was the key matrix:

stenoKeys = [

['S1','T','P','H','Star1', '-F', '-P', '-L', '-T', '-D'],

['S2','K','W','R','Star3', '-R', '-B', '-G', '-S', '-Z'],

['None', 'None', 'None', 'A','O','E','U','Num1','None','None'],


qwertyMapping = [

['q','w','e','r','t', 'u', 'i', 'o', 'p', '['],

`['a','s','d','f','y','j', 'k', 'l', ';', '\''],`

`[' ',' ',' ', 'c','v','n','m','1',' ',' '],`


But also I had to set the correct number for the LED pin

ledPin = 11 # This may be different on your board, check your charts

After I got this new keyboard layout set up, I had to make a companion '.h' file using a python script called genHeader.py. But first it is important to remember to modify the relevant line near the head of genHeader.py to read ‘board = import(“Crayonboard”)__’ rather than “Volksboard” or “Stenoboard” (or something similar). This process of creating a new .h file is described in the ReadMe file for StenoFW. The command I used was:

python3 genheader.py >Crayonboard.h

I used the python3 command because my default python version is 2.7 and you need python 3 for this.

I used the Arduino IDE to compile StenoFW.ino. You can install Arduino here if you haven’t used it before.

Make sure before running the Arduino IDE to change the line in ‘stenoFW.ino’ that says ‘include Volksboard.h’ (or Stenoboard.h or whatever) so it reads ‘include Crayonboard.h’ (or whatever was the name of the .h file just created)

For my setup I just wanted NKRO protocol only - no gemini or anything. So I just commented out all of the contents of the function labeled ‘void fn1(){}’ and the contents of the functions labeled ‘void fn2’ and ’void fn1fn2’. This keyboard doesn’t have function keys anyway. I set the keyboard as NKRO like this:

// Protocol state

#define GEMINI 0

#define TXBOLT 1

#define NKRO 2

int protocol = NKRO;

To upload to the Teensy, you need a little application called Teensy Loader. If it doesn’t work the first time and you get an error message, you may need to press the little button on the teensy controller itself to make it ready to upload.

I drilled a little hole in the back of the case so that I could insert a mini-usb cable in there. It's a mini-usb, not the more-common micro-usb.

YAY! Done.

Another view of the finished project

Possible improvements

One problem with this setup is that it is really easy to hit the wrong thumb key because they are very close together. I would recommend making sure that the left and right thumb keys are separated a little, and make sure not to make the thumb keys too small. It is also easy to accidentally hit the number key, so make sure to offset that key slightly to the right.

I made this out of a plastic case, but it would also be really cool to make out of a wooden box, maybe with wooden keys.

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.