Check it out on GitHub

threeboard hardware build instructions


The threeboard project repository contains all of the files needed to manufacture a threeboard PCB, in the hardware subdirectory. These files can be opened using KiCad, a common open-source PCB design tool. The PCBs must be manufactured by a professional PCB manufacturing company. I recommend PCBWay as I’ve had great experiences using them to manufacture each iteration of the threeboard development boards. To make manufacturing easier, the threeboard repository contains a prebuilt package which is all that’s needed to be provided to a PCB manufacturer such as PCBWay to manufacture threeboard PCBs.


The components required to assemble the threeboard are all listed in the component list document. These all need to be soldered to the threeboard’s PCB, and the microcontroller flashed with the threeboard firmware before it’s usable as a keyboard. All components can be soldered by hand and without a microscope, and although the two external EEPROMs and quartz crystal are much easier to solder using a hot air gun, it’s possible to solder everything using just a soldering iron.

The two 24LC512-I/MF EEPROM devices should be soldered first as they’re the trickiest to hand-solder with a soldering iron. If they’re being soldered with a hot air gun, soldering them first prevents other nearby components from being damaged or displaced by the hot air. Solder the EEPROMs into the highlighted footprints, oriented so that their visual positioning indicators are positioned in the lower right corner.

The quartz crystal should be soldered next as it’s also tricky to hand-solder, and can also be hot air soldered.

The ATMEGA32U4-AUR MCU should be soldered in the highlighted area, with its visual positioning indicator in the bottom left corner.

Solder the USB3070-30-A USB socket in the highlighted area. The two larger pads on either side are not connected to anything, and just add stability to the connector, which otherwise is quite fragile. These pads can be soldered or glued. I recommend using a small amount of glue between these two pads to secure the connector. The 5 small USB pins can then be soldered once the connector is aligned and secure.

Solder the two RMCF0805FT4K70 4.7kΩ resistors – the pull-up resistors for the EEPROMs – in the highlighted areas.

The two RMCF0805JT10K0 10kΩ resistors are used as a pull-up resistor for the MCUs RESET pin and a pull-down resistor to inform the MCU to check for USB activity during boot. They should be soldered in the highlighted areas.

Solder the two RMCF0805JT22R0 22Ω resistors in the highlighted areas. These are serially connected between the USB data lines and the MCU.

There are five 220Ω resistors needed to protect the LED banks. They should be soldered in the highlighted areas.

Solder the four CC0805ZRY5V9BB104 0.1uF decoupling capacitors in the areas highlighted.

A 1uF capacitor is needed to regulate the USB output supply voltage. Solder the CC0805KKX7R7BB105 capacitor in the highlighted area.

Solder the CC0805ZRY5V6BB475 4.7µF decoupling capacitor in the highlighted area.

The two C0805C220J5GACTU 22pF external clock crystal capacitors should be soldered as shown.

Solder the 22 LTL-1CHE LEDs in the locations shown. Make sure to wire the cathode of the LED to the square through-hole.

Solder the three Cherry MX keyswitches as shown.

If needed, a PTS526 SK08 SMTR2 LFS push-button RESET switch can be soldered in the highlighted area. This is only needed when flashing threeboard firmware to the threeboard using a USB bootloader. It may only be needed once, or not needed at all if flashing using SPI.

Flashing firmware

A freshly constructed threeboard will need to have a bootloader installed before it’s possible to flash the threeboard firmware. For simplicity I suggest installing the Arduino USB bootloader using an Arduino as an ISP programmer and following this guide. The necessary SPI pins are all labelled on the threeboard: RESET, VCC, SCK, MISO, GND and MOSI. These should be connected to the corresponding pins on the ISP programmer to flash the bootloader.

A threeboard hex file is required to flash the firmware to the device. This is produced by running bazel build //src:threeboard_hex from the threeboard/firmware directory. Once the threeboard hex file has been successfully built, it can be flashed to the device using the following command:

avrdude -v -patmega32u4 -cavr109 -P /dev/cu.usbmodemXXX -b57600 -D -Uflash:w:bazel-bin/src/threeboard_hex.hex:i