I purchased parts on DigiKey per the ergodox.org list, which I’ll reproduce here since that site is currently offline
- Ergodox PCB
- Teesny 2.0 with headers
- 10x Gateron Brown Keyswitch - Plate Mount - Pack of 10
- DSA Keycaps - Ergodox Base Set and Ergodox Modifier Set
- 4 Conductor 3.5mm TRRS Audio Cable
- CP-43514 4 Conductor 3.5mm TRRS Audio Jack
- WM17115-ND USB Mini-B Receptacle - often out of stock
- MCP23018 IO Expander
- 0.1uF Through-hole Ceramic Capacitor
- 2x 2.2kΩ Through-hole Resistor
- 4x 220Ω Through-hole Resistor
100x Axial Through-hole Diode- recommend substituting the surface mount diodes listed below:
- 100x SOT123 Surface Mount Diode
- 3mm Green LED - optional
- 3mm Yellow LED - optional
- 3mm Red LED - optional
If I were building this again I would substitute surface mount parts in place of the through hole diodes. They’re easier to solder and trim and will result in a cleaner final product with wider mechanical clearances. Be aware that the mini-USB B connecter often goes out of stock.
I chose to use Gateron Brown switches. They seem widely regarded as a better quality clone of the gold standard Cherry MX brand and have a light, tactile throw without being clicky.
Note that a standard, stereo audio cable isn’t enough to connect the two sides. You need a four conductor TRRS cable (the extra aRRRR is for tip-ring-ring-sleeve) to carry GND, +5, and I²C SDA/SCL.
There are a couple standard keycap profiles. DSA is convenient because keys are interchangable between rows. This was especially desirable because I planned to use the Colemak layout, for which profiled keycaps would be hard to find
I pulled what appear to be Litster’s original .DXF files from bishboria’s github and exported them to SVG using Inkscape.
I had the files laser cut from acrylic at Ponoko. I made a mistake scaling one of the spacer layers in the process of tiling the SVGs onto a single panel, so I had to substitute a set of washers until I was able to print a replacement.
The SVGs are up on my github.
These are the layer thicknesses I used. The Gateron switches fit perfectly with 4.5mm acrylic on layer 3. Be sure if you’re using THT diodes that layer 4 is a bit thicker than 4.5mm.
- Top - 3mm
- Spacer - 4.5mm
- Switch plate - 4.5mm
- Spacer - 4.5mm
- Bottom - 3mm
- Digitally temperature regulated soldering iron
- Helping hand or multi-purpose hobby vise
- 20-30 gauge wire stripping tool
- Flush cut wire trimmers
For THT diodes
Bend each diode into a U shape and populate the marked spaces below each of the keyswitch sockets
Confirm that each diode is oriented so that the cathode, marked with a black ring, is closer to the square solder pad
Clip the leads with a pair of flush cut trimmers and press the diode bodies flat against the PCB
For SMT diodes
Solder a diode below each of the keyswitch sockets. Confirm that each diode is oriented so that the cathode, marked with a white line, is closer to the square solder pad
The resistors are color coded. (relevant xkcd)
TRRS Connector (3.5mm audio jack)
Populate the jumpers as shown. These are needed to reuse the same PCB for left and right hands
Populate the IO expander DIP as shown
Cut and strip the spare USB mini-B cable to bridge from the PCB to the Teensy
Plug the 12 pin inline headers into the right hand PCB and stack the Teesny 2.0 on top of them. Tack down two pins on opposing corners to hold the assembly in place before soldering the rest
Plug the keyswitches into the layer 3 support plate. Place the support plate switch-side down on a table and align the PCB with the switch pins. Solder the switches down while the support plate is sandwiched between the keyswitches and the PCB.
The left side of the keyboard worked perfectly on the first try. As soon as I plugged in the right side my laptop started opening the Win+X menu.
I rebuilt the firmware to generate a ‘z’ from what had been the windows key and got a spray of “bzzxcvbzzxcvbzzxcvbzzxcvbzzxcvbzzxcvb”
After a quick visual inspection to verify that the diodes were all oriented correctly, I brought up the board file
When the firmware performs a scan it pulls each column low in turn. While a given column is low it checks each row to see if a closed switch is connecting the two. Komar has a good overview of this on his site. All the affected keys were on the ROW2 net.
Since each row net surfaces only at the IO expander and at the switches of that row, I had only to check for shorts at those points. The culprit was a solder bridge between a switch and an adjacent mounting hole.
I was able to get an extra layer printed in PLA at PSU’s LID Lab. I used Landa’s svg2stl to rasterize and extrude the flat SVG to an STL file. To reduce print time I removed the ceiling and floor, exposing an attractive honeycomb fill pattern.