Custom keyboard experiments – basic electronics

The first series of experiments and findings.

First choices

In the previous post we touched on the various choices available to us to build a custom keyboard. I’ve decided to first try with:

  • Cherry MX Brown switches. They are the ones I use with my home and work keyboards and my favorite for typing. They can be readily bought from, and are available in plate-mounted or PCB-mounted flavors. Plate-mounted is especially interesting for us since we’re not planning to design a PCB yet.
  • The Teensy++ development board. Its wide community support, simple tools for firmware upload, and the fact that the powerful and widely-used QMK firmware is compatible with it makes it a great candidate.

I had some keycaps left from a previous keyboard so I could start with a simple 9-key, 3×3 matrix prototype.

The key matrix

The first instinct one would have to assemble switches and the development board would be to connect each switch to the +5V pin and to one of the I/O pins of the board. However, keyboards can have more than 100 keys, and very few controllers have that number of pins. It simply would not be possible, especially with a Teensy.

The solution is to have the keys form a matrix, and have the controller activate columns (or rows) one by one, and read the rows (or columns) to know which keys are active. Here is a very good explanation of how to make a key matrix, what ghosting is and how to get rid of it.

For the diodes, the “classic” choice for keyboards are 1N4148, which can be found dirt-cheap on Amazon or online electronic stores (my favorite:

The soldering

Since I do not yet have access to a laser cutter to experiment with the plate, I decided to test making the matrix itself, free hand. Let me tell you, without a support to hold the switches together, this was no easy feat.

Here is what the underside of a Cherry MX switch looks like. I started by preparing a ball of solder on all terminals of my 9 switches to facilitate soldering the diodes and columns on later.

And here’s how the diodes are arranged to form the rows. I feel like I will need to pre-bend them when I need to solder 100 of these.


And… first row done!


I don’t think I’ve ever soldered components pin-to-pin before, especially with loose components…

Times 3, here are my 3 rows:


Now for the columns, the wires will need to go over the rows, so they need to be insulated. I did not want to go through the trouble of cutting and stripping 9 wires, so I opted for this strategy:


Unfortunately, without the proper measurements, this is not an easy solution to work with. Some segments will be too short, others too long, the plastic insulation melts, etc. Multiply this by 2 for 6 rows, it’s a bit too complicated. I may have to be more precise the next time or just use a multitude of small  wires. Anyway, here’s the final product (please don’t be too harsh on the soldering job, I hadn’t done any in a while and this is not the easiest way to work with components. But I love challenges 🙂


And now we have a fully functional matrix.


And here’s what it looks like from the front. I’m quite happy with it, the diodes and wires keep the switches together in a solid piece.

The Teensy’s pins

When the Teensy++ 2.0 arrives without headers, this is what is looks like:img_20170812_185242.jpg

And to make it easy to prototype on a breadboard, I soldered wires to every pin on the sides:


Looks like a weird metallic spider…

Next up: working with the software, uploading it to the Teensy, and wiring the rows and columns accordingly.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s