Skip to the content
PCBKitNew board
2 layers114.5 × 101.2 mmErgoslab, the printed circuit board in 3D

Design files for a 52-key, split, columnar staggered mechanical keyboard

Size
114.5 × 101.2 mm
Copper layers
2
Thickness
1.6 mm
Parts
102
Nets
55
Pads
537
Tracks, vias
1,018, 89
Pours
2
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
5 Oct 2019
Updated
3 Feb 2022

Overview

Ergoslab is an open-source printed circuit board by tomsaleeba, from the tomsaleeba/ergoslab repository on GitHub, published under the MIT licence. It is a 2-layer board of 114.5 × 101.2 mm with 102 parts on 55 nets, routed with 1,018 tracks and 89 vias.

It is built around the SK6812MINI-E. Its parts include 26 diodes, 26 switches, 5 connectors and 2 resistors. It belongs with the keyboards and input boards and the AVR (ATmega, ATtiny) boards of this library.

Main components

1

README

README.md

a columnar stagged keyboard that uses a combination of Cherry MX (or compatible) and Kailh choc switches to pack in a heap of thumb keys

Update Dec 2020: I've been using this keyboard full time (I'm a professional software developer so it sees a lot of use) for a year now and I'm still in love with it. If you're considering making one, I would call this design battle proven now.

Update Jan 2022: Still using this full-time and loving it 💪.

What is this thing?

Before swapping to this keyboard, I had been using an ErgoDox Infinity and an EZ as my daily drivers for quite a few years. I loved using them but I was looking for something more compact and with more (easily accessible) thumb keys. There are so many candidates (here, here, here and here) but none match exactly what I want, so I decided build my own!

ergoslab keyboard photo

keyboard layout

Desgin choices:

  • Kailh hotswap sockets for all the MX-style switches (choc are soldered in)
  • ErgoDox style ortho-columnar but with the extra little finger offset of the Diverge 3
  • Make all thumb keys easily accessible from the normal hand position
  • keys for vim-style arrows on the right hand, and directly below the home row
  • same plate design for both halves
  • compatible with QMK firmware, see keyboard directory in QMK
  • optional top LED for layer status (example)
  • optional underglow LEDs
  • minimise overall footprint by using internal standoffs (thanks for the idea ErgoTravel)
  • use only 1U key caps to minimise size and because stabilisers are annoying
  • author a single "master" PCB and use a python script to generate the 3 layers of the sandwich case. Makes life much easier to keep them all in sync. (See further down for more info)
  • support 5-pin/PCB mount switches

Build guide

See the guide here.

Gerbers

See the releases for this GitHub repo for the generated Gerber files. You probably want the most recent version.

If you need to generate your own gerbers, see how to turn the master PCB into the 3 generated PCBs and then how to generate gerbers.

Parts list

Parts you'll have to find yourself

  • 2x top PCBs (optional if you're happy with PCB mount; untested)
  • 2x middle PCBs (or 4x as they can also be used as the base)
  • 2x base PCBs (if you didn't order 4x middle)
  • 2x Pro Micros
  • 1x TRRS cable
  • 42x Cherry MX (or compatible) switches
  • 42x Kailh hotswap PCB sockets
  • 10x Kailh choc switches
  • 42x 1U MX key caps
  • 10x 1U Kailh choc key caps
  • (optional) 2x WS2812 LED from a 144 LEDs/m strip, for layer status lights
  • (optional) more WS2812 LEDs, of any density per meter strip, for underglow lighting. 12x is probably a sane number but if you want to run them at lower power, you could probably use more.
  • 4x 15mm M2 standoffs (2 per side), for mounting the OLED/ProMicro acrylic cover
  • 8x M2 screws, between 4 and 8mm long, for the above standoffs
  • (optional) 1 or 2 OLED screens
  • 36x M2x4 screw (See Note1 and Note2) for mounting the middle/PCB layer to the base plate

Note1: the screw/bolt length depends on the height of the standoffs you get. You want 1.6mm thick PCBs so make sure you don't have too much thread on your screws.

Note2: it's highly recommended to get hex head/allen key/ISO7380 screws (see image below). This is because a phillips head screwdriver probably won't fit through the holes in the switch plate to tighten the screws on the middle/PCB layer. You can always drill those holes a bit bigger or loctite the screws in (so they won't need tighening) to workaround this. As you have hotswap sockets, you may be able to remove the switches and pull the middle/PCB layer screws out through the switch holes. Beware: with 4mm long screws, I couldn't achieve this, though it was very close.

Photo of hex head screws

Parts available with PCB order

These are the parts you can order from LCSC at the same time as having your PCBs manufactured. The listed quantity is to assemble both halves.

QTYDescriptionLCSC Part No
0/2/44.7KO (4701) ±1% (2 per OLED)C58678
2PJ-3200B-4A TRRS ConnectorC136687
2Switch 5.25.21.5 reset switchC92584
22.54mm 1*40P round Female headerC9811
0/1/2OLED Female headerC124413
521N4148 Switching DiodeC14516
18M2x6mm standoffs (See Note3) for middle/PCB layer to base plate mountingM2x6

Note3: the standoffs between the middle/PCB layer and the base plate can be quite small, probably as small as 3mm. The problem with that is making sure the bolts engage the threads enough. Feel free to experiment with getting a super slim keyboard. Perhaps use a long bolt, a threadless spacer and a nut?

Developers/contributing

Contributions are welcome. I'm not selling these keyboards and I already have two for myself so I can't afford to manfacture more PCBs to test changes. If you make changes to the PCB design, ideally you would confirm it all works by manufacturing your own PCBs.

Steps for contributing:

  1. if it's a non-trival change, consider opening an issue on this repo to talk about the change before spending effort
  2. fork this repo
  3. make your changes
  4. if you made a change to the PCB, you need to regenerate the 3 seperate generated PCBs
  5. send a pull request

Generating 3 layers of sandwich case

We edit a single PCB file that contains the information required to generate all 3 layers (switch plate, circuitry, base) of a sandwich case keyboard. Keeping it all in one file ensures that things like mounting holes always stay lined up.

There is some magic in the settings of items on the PCB to indicate what layer they belong on. Read the code for the specifics but as a general guide:

  • we use Eco1.User as the templates for edge cuts that only appear on some layers
  • the width of the drawing lines are slightly different so we can determine which belongs on each layer
  • the thickness of text is slightly different so we can determine which belongs on each layer

You must have Kicad installed in your system. Doing this makes the pcbnew python module available. Make sure you don't have any virtualenv, etc activated as you need to be using you system-wide python. Check for the module by running the following in the python REPL:

python
import pcbnew

Now you can regenerate the PCBs with:

bash
python ./generate_pcbs.py

Normally keeping generated things in source control is not a good idea but in the interest of keeping things easy, we include the generated PCBs.

Generating gerbers

Using KiCad 5.1.4, here's the settings to generate gerbers.

Plot settings (should be the defaults):

text
Plot format: Gerber
Included layers:
  F.Cu
  B.Cu
  F.Paste
  B.Paste
  F.SilkS
  B.SilkS
  F.Mask
  B.Mask
  Edge.Cuts
Plot foorprint values: yes
Plot footprint references: yes
Exclude PCB edge layer from other layers: yes
Exclude pads from silkscreen: yes
Default line width: 0.1mm
Coordinate format: 4.6, unit mm

Drill settings:

text
Drill File Format: Excellon
Mirror Y axis: no
Minimal header: no
PTH and NPTH in single file: no
Oval Holes Drill Mode: Use alternate drill mode
Map File Format: PostScript
Drill Origin: Absolute
Drill Units: Inches
Zeros Format: Suppress leading zeros

The fix for the JLCPCB PTH layer error was to change the oval hole drill mode.

Credit for Kicad symbols/footprints

FAQ

How portable is it? It weighs 360grams (180grams for each half) with cheap DSA plastic keycaps. It measures 115mm x 102mm and with 6mm standoffs, it's 16mm to the top of the switch plate or 31mm to the top of DSA keycaps, including the height of rubber bump-ons. I'll let you decide how portable you think that is but it was designed to be portable.

Is I2C between the halves supported? Sort of. The OLED screens use I2C so you won't be able to use them. Also there's no solder jumpers so you'll have to jump some wires between the OLED header SDA/SCL pins and the SLAVE_LED pin/data pin on the unused TRRS jack. This isn't an intended use but you can certainly hack it, check the schematic for details.

What happened to a single PCB that works as all 3 layers? Originally I tried to make one PCB design that works as all 3 layers of a sandwich design: base, PCB and switch plate. The idea was taken from for-split-keyboard and mitosis. I failed because I wanted to have minimal post-manufacture cutting by hand and JLCPCB kept rejecting my desgins as they didn't have strong enough supports to hold the PCB together though the whole manufacture process. So now we have "master" PCB design and use a python script to generate the PCBs for each layer from that master.

Do you have keyboard-layout-editor source?
Yes. Either this file in this repo or here's a (hopefully up to date) permalink

Do you have a vector of the right hand "plate"?
Yep, see misc/ergoslab-right.svg.

Parts

102
QtyValueFootprintReferences
261N4148Diode_THT:D_DO-35_SOD27_P7.62mm_HorizontalD0:0, D0:1, D0:2, D0:3, D0:4, D1:0, D1:1, D1:2, D1:3, D1:4, D2:0, D2:1, D2:2, D2:3, D2:4, D3:0 +10
21SW_Pushfootprints:Kailh_socket_reversibleSW0:0, SW0:1, SW0:2, SW0:3, SW0:4, SW1:0, SW1:1, SW1:2, SW1:3, SW1:4, SW2:0, SW2:1, SW2:2, SW2:3, SW2:4, SW3:0 +5
11MountingHole_2.2mm_M2_Pad_ViaMountingHole:MountingHole_2.2mm_M2_Pad_ViaMount0, Mount1, Mount2, Mount3, Mount4, Mount5, Mount6, Mount7, MountNotTop0, MountNotTop3, MountNotTop4
10switchplate-bracefootprints:switchplate-braceBrace0, Brace1, Brace2, Brace3, Brace4, Brace5, Brace6, Brace7, BraceNotTop0, BraceNotTop1
5SW_Pushfootprints:kailh-choc-solder-reversibleSW4:1, SW4:2, SW4:3, SW4:4, SW4:5
24k7footprints:resistorR1, R2
2SK6812minifootprints:ws2812-singleLED_L1, LED_R1
2SW_Pushfootprints:SW_TACT_ALPS_SKQGABE010SW-reset2, SW-reset3
2VAL**footprints:HOLE_M2MountNotTop1, MountNotTop2
1ICSPfootprints:PinHeader_1x06_P2.54mm_VerticalP2
1LOGOfootprints:chickenCHICKEN
1L_B_LEDfootprints:ws2812-stripJ1
1L_GNDfootprints:JumperJP1
1L_NO_B_LEDfootprints:JumperJP10
1L_NO_F_LEDfootprints:JumperJP9
1L_SCLfootprints:JumperJP3
1L_SDAfootprints:JumperJP4
1L_VCCfootprints:JumperJP2
1MJ-4PP-9footprints:TRRS-helixTRRS1
1OLEDfootprints:oled_header_helixP1
1ProMicrofootprints:Pro_Micro_ergotravelPM1
1R_B_LEDfootprints:ws2812-stripJ2
1R_GNDfootprints:JumperJP8
1R_NO_B_LEDfootprints:JumperJP11
1R_NO_F_LEDfootprints:JumperJP12
1R_SCLfootprints:JumperJP6
1R_SDAfootprints:JumperJP5
1R_VCCfootprints:JumperJP7
1SLAVE_LEDfootprints:PinHeader_1x01_P2.54mm_VerticalJ3
1SW_Pushfootprints:TACT_SWITCH_TVBP06SW-reset1

Questions

How big is the Ergoslab PCB?

It measures 114.5 × 101.2 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Ergoslab use?

102 parts, built around the SK6812MINI-E. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Ergoslab KiCad files?

From the tomsaleeba/ergoslab repository on GitHub, at the commit this page was made from: the board is pcb/ergoslab.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Ergoslab design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 4 layers234 × 84 mmMain panel, the printed circuit board in 3D

    Main panel

    google/mozc-devices

    Circuit diagrams and firmware source code for Gboard DIY keyboards

    234 parts3kApache-2.0
  • 4 layers180.8 × 300.3 mmDilemma, the printed circuit board in 3D

    Dilemma

    Bastardkb/Dilemma

    The Dilemma is a vertical stagger low-profile keyboard with mods.

    383 parts590
  • 4 layers48 × 32 mmFlatSat, the printed circuit board in 3D

    FlatSat

    Pwnsat/FlatSat

    Flatsat v1.0 is a hardware based platform for aerospace cybersecurity research

    106 parts575GPL-2.0
  • 2 layersDemo, the printed circuit board in 3D

    Demo

    adamws/kicad-kbplacer

    KiCad plugin for automatic keyboard's key placement and routing

    48 parts547GPL-3.0
  • 2 layers97 × 78.5 mmDumbpad, the printed circuit board in 3D

    Dumbpad

    imchipwood/dumbpad

    Simple 4x4 numpad with rotary encoder. Powered by QMK via ATmega32u4 Pro Micro

    62 parts517GPL-2.0
  • 4 layers82.5 × 39.4 mmV4head, the printed circuit board in 3D

    V4head

    makerforgetech/modular-biped

    An open source framework for creating a bipedal modular companion robot.

    26 parts493GPL-3.0
  • 2 layers115.7 × 95.7 mmFifi split keeb, the printed circuit board in 3D

    Fifi split keeb

    raychengy/fifi_split_keeb

    Fifi Keyboard 🐶 ⌨️

    66 parts334
  • 4 layers70 × 54 mmPicoLab, the printed circuit board in 3D

    PicoLab

    CoretechR/PicoLab

    Web-GUI Embedded Multitool

    285 parts327GPL-3.0