Skip to the content
PCBKitNew board
2 layers216.5 × 96 mmKeyboard, the printed circuit board in 3D

A mechanical keyboard

Size
216.5 × 96 mm
Copper layers
2
Thickness
1.6 mm
Parts
103
Nets
68
Pads
451
Tracks, vias
584, 40
Pours
4
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
19 Nov 2023
Updated
6 Jul 2024

Overview

Keyboard is an open-source printed circuit board by mylestunglee, from the mylestunglee/articulation70 repository on GitHub. It is a 2-layer board of 216.5 × 96 mm with 103 parts on 68 nets, routed with 584 tracks and 40 vias.

Its parts include 35 switches, 5 resistors, 3 diodes, 1 IC and 1 connector. It belongs with the keyboards and input boards and the AVR (ATmega, ATtiny) boards of this library.

README

README.md

articulation70

The articulation70 keyboard is a successor to the articulation80, with LEDs and a more personalised layout.

Photo

It features:

  • Variable pinky stagger, supporting ±1 mm vertically offsetted soldering configurations.
  • 3 × 6 main body, 3 thumb switches, 2 corner switches and 3 × 4 numpad layout.
  • Kailh Choc V1 hot-swap support.
  • A breakaway-able number pad.
  • Serial or I2C connection between halves.
  • Pro Micro-compatible controller support, however a micro-controller. with more pins are required to operate LEDs 2 and 3.
  • 3 LEDs
  • Reversible PCB to reduce manufacturing costs for hobby usage.

KiCad plugins

This repo comes included with two plugins. To install these plugins, copy the directories in plugins into your Plugins Directory, which is found by Tools → External Plugins → Open Plugins Directory in the PCB Editor.

Split intersecting traces

When joining traces from rotated switches, it can be difficult to connect traces from two angles to form a aesthetic curve. This plugins splits two selected intersecting traces into four traces.

An example of use:

KiCad plugin 1 animation

Total trace length

Why not?

KiCad plugin 1

Build Instructions

This build is very similar to many hobby keyboards. Please refer to the instructions for articulation80. You will need a soldering iron.

Which jumpers do I need to solder?

If using serial, then solder J1, and J4. If using I2C, then solder J2, J3 and J4. Solder on the back of each respective half.

Build Parts

I would recommend substituting for cheaper or easier to source components when possible.

ComponentQuantityMPNPurchase LinkRemarks
PCB2
Left switch plate1
Right switch plate1
Micro-controller plate2
Micro-controller2Elite-CLink
Through-hole TRRS jack2PJ-320ALink
TRRS cable1LinkAlso called a 4-pin 3.5mm audio auxiliary cable
Reset button2PTS526 SM15 SMTR2 LFSLinkDifferent button operating force are possible
LED3HLMP-1401LinkAny T1 size
150Ω Resistor3RC1206FR-07150RLLinkOptional, for LEDs
4.7kΩ Resistor2RC1206FR-104K7LLinkOptional, for I2C connection
SMD Diode70*1N4148W-TPLinkAny SOD-123 size
Hot swap micro-controller sockets5315-43-112-41-003000LinkRecommended
Hot swap pins523320-0-00-15-00-00-03-0LinkRecommended
Rubber feet12**SJ-5302 CLEARLink
Hot swap key sockets70*CPG135001S30Link
Key Switch70*CPG135001Link
Key Cap70*Ideally different key caps for thumbs
Stickers1LinkOptional

*Adjust for number of keys desired.

**Adjust for number of numpads.

How to order PCBs and plates

I ordered from JLCPCB, however there are many other manufacturers. Take a look at PCBShopper.

For the PCBs, I used:

  • Base material: FR-4
  • PCB thickness: 1.6 mm
  • PCB colour: black
  • Surface finish: LeadFree HASL
  • Remove order number: Yes

For the switch plates, I used:

  • Base material: FR-4
  • PCB thickness: 1.2 mm
  • PCB colour: black
  • Surface finish: HASL (with lead) because the unleaded option greatly increases cost and the plates do not have any pads.
  • Remove order number: Yes

For the controller plates, I used:

  • Base material: FR-4
  • PCB thickness: 1.2 mm
  • PCB colour: black
  • Surface finish: HASL (with lead)
  • Remove order number: Yes

How to adjust the layout

This was tested on installation of FreeCad 0.20.2, Python 3.11.6 and KiCad 7.0.6.

  1. First, open layout.FCStd with FreeCad and open Constants under the model tree view. You should see a spreadsheet of parameters.

FreeCad spreadsheet 1 FreeCad spreadsheet 2

  1. Change values as necessary. If the values change too much from their intended range, then the sketch (as shown in the next step) may become broken.
  2. Click on one of the sketches in the model tree view. Verify the layout shown is correct.

FreeCad sketch

  1. Export the layout to a file by coping the contents of scripts/export_geometry.py into FreeCad's Python console. The console is accessible by View → Panel → Python console. If you get a permission error, change geometry.txt to an absolute path within the repo. You should get a number, which reports the bytes written to geometry.txt.

FreeCad export

  1. Update the PCB by running the following scripts:
text
python scripts/update_geometry.py pcb/keyboard.kicad_pcb geometry.txt
python scripts/update_geometry.py left_plate/plate.kicad_pcb geometry.txt
python scripts/update_geometry.py right_plate/plate.kicad_pcb geometry.txt

For now, I will run the first script. Update the PCB files for the plates if desired.

  1. Clean-up residual graphic objects on the Edge.Cuts layer. The script deletes all previous edges and plots edges in the Edge and EdgeNumpad sketch, which includes construction lines that should not be included in the Edge.Cuts layer. The script also positions footprints according to the Components sketch. The script will output some text because some components' positions are not specified by the layout, such as the resistors.

KiCad import

  1. Update traces and refill copper zones. Unfortunately this step takes the longest. Make sure to thoroughly check PCB.

The PCB is ready!

KiCad PCB

Firmware

I used QMK program the controllers. To use the same setup as me, copy the contents of qmk directory into your installation of qmk_firmware/keyboards. Flash the left and right controllers with the respective commands:

text
qmk flash -kb articulation70 -km default -bl dfu-split-left
qmk flash -kb articulation70 -km default -bl dfu-split-right

These commands assume the usage of Elite-C's.

If you want to upgrade the toolchain, you can do so at your own risk:

text
pacboy update avr-gcc:x

Additional documentation

text
scripts/corner_switch_pad_geometry.py
scripts/curved_switch_pad_geometry.py

These switches generate the geometry for curved pads featured in the switch footprints. The curved shape comes from the rectangular pad subtracted by the clearance of the centre switch drill hole. KiCad supports polygons in pads, but it is not very easy to use. These scripts makes the design of these footprints a bit easier.

Gallery

Photo both Photo left Photo right

More images can be found here.

Future Considerations

There are a few improvements that can be made:

  • Adding a pattern to improve aesthetics on the plates.
  • Adding solder mask expansion on pads and pins.
  • Re-route ROW4 trace.
  • Support LED placement in top-right.
  • Improve LED brightness as they are too dim.
  • Support both micro-controllers mounted face down.
  • Strive to continually improve layout. The key columns are perpendicular to the fingers. This does not effectively utilise the flexibility of the hand.

Credit

Thanks to:

  • KBD.news for inspiration.
  • sevmyer for the open-source KiCad teardrop plugin which was very helpful given many KiCad teardrop plugins were for Kicad 6.
  • The QMK community on Discord for their helpful explanations.
  • Various open source keyboards for guidance, but not limited to: KLOTZ, Corne and Breeze.

Parts

103
QtyValueFootprintReferences
27~Keyboard:Switch3DRightHR11, HR12, HR13, HR14, HR15, HR17, HR18, HR19, HR21, HR22, HR23, HR24, HR25, HR27, HR28, HR29 +11
17~Keyboard:Switch3DLeftHL11, HL12, HL13, HL14, HL15, HL21, HL22, HL23, HL24, HL25, HL31, HL32, HL33, HL34, HL41, HL42 +1
6~Keyboard:SwitchDoubleLeftHL16, HL26, HL35, HL36, HL45, HL46
111Keyboard:SwitchSW11
112Keyboard:SwitchSW12
113Keyboard:SwitchSW13
114Keyboard:SwitchSW14
115Keyboard:SwitchSW15
116Keyboard:SwitchDoubleRightSW16
117Keyboard:SwitchSW17
118Keyboard:SwitchSW18
119Keyboard:SwitchSW19
121Keyboard:SwitchSW21
122Keyboard:SwitchSW22
123Keyboard:SwitchSW23
124Keyboard:SwitchSW24
125Keyboard:SwitchSW25
126Keyboard:SwitchDoubleRightSW26
127Keyboard:SwitchSW27
128Keyboard:SwitchSW28
129Keyboard:SwitchSW29
131Keyboard:SwitchSW31
132Keyboard:SwitchSW32
133Keyboard:SwitchSW33
134Keyboard:SwitchSW34
135Keyboard:SwitchDoubleRightSW35
136Keyboard:SwitchDoubleRightSW36
137Keyboard:SwitchSW37
138Keyboard:SwitchSW38
139Keyboard:SwitchSW39
141Keyboard:SwitchSW41
142Keyboard:SwitchSW42
143Keyboard:SwitchSW43
145Keyboard:SwitchDoubleRightSW45
146Keyboard:SwitchDoubleRightSW46
147Keyboard:SwitchSW47
148Keyboard:SwitchSW48
149Keyboard:SwitchSW49
1EliteCKeyboard:EliteCU1
1H1Keyboard:RightPlateH1
1H2Keyboard:LeftPlateH2
1H2Keyboard:ControllerPlateH3
1J1Keyboard:JumperJP1
1J2Keyboard:JumperSplitJP2
1J3Keyboard:JumperJP3
1J4Keyboard:JumperSplitJP4
1LED1Keyboard:HLMP-1401D1
1LED2Keyboard:HLMP-1401D2
1LED3Keyboard:HLMP-1401D3
1PTS526Keyboard:PTS526SWRST1
1R1Keyboard:SDR18R1
1R2Keyboard:SDR18R2
1R3Keyboard:SDR18R3
1R4Keyboard:SDR18R4
1R5Keyboard:SDR18R5
1TRRSKeyboard:PJ-320AJ1

Questions

How big is the Keyboard PCB?

It measures 216.5 × 96 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Keyboard use?

103 parts. 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 Keyboard KiCad files?

From the mylestunglee/articulation70 repository on GitHub, at the commit this page was made from: the board is pcb/keyboard.kicad_pcb and its schematic controller_plate/plate.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Keyboard design in my own project?

Its repository states no licence, so its author keeps all rights: ask mylestunglee before reusing the design.

Similar boards

  • 2 layers225 × 356.9 mmFerris, the printed circuit board in 3D

    Ferris

    pierrechevalier83/ferris

    A low profile split keyboard designed to satisfy one single use case elegantly

    103 parts1.3k
  • 2 layers134 × 88 mmTulipcc, the printed circuit board in 3D

    Tulipcc

    shorepine/tulipcc

    The Tulip Creative Computer and AMYboard - portable Python synthesizers

    103 parts978
  • 2 layers97 × 69.5 mmStm32, the printed circuit board in 3D

    Stm32

    eddyem/stm32samples

    Code samples and ready projects based on bare-metal STM32

    103 parts208
  • 2 layers182.8 × 169.2 mmErgoMaxLeft, the printed circuit board in 3D

    ErgoMaxLeft

    LouWii/ErgoMax

    Custom ergo split keyboard project, based on ErgoDox, with hot swap sockets

    103 parts124
  • 2 layers164 × 151 mmParametric speaker, the printed circuit board in 3D

    Parametric speaker

    Orange-Murker/parametric_speaker

    A directional speaker with a driver based on STM32

    103 parts103
  • 2 layers210.5 × 114.8 mmBreeze right, the printed circuit board in 3D

    Breeze right

    afternoonlabs/BreezeKeyboard

    Breeze is a split mechanical keyboard with a column-staggered layout. With a focus on productivity, Breeze features a full 6x4 alphanumeric layout, arrow keys, and an extra 6 key cluster for typing and coding.

    103 parts83
  • 2 layers100 × 100 mmBulkyMIDI-32 Channel 2, the printed circuit board in 3D

    BulkyMIDI-32 Channel 2

    tebl/BulkyMIDI-32

    A HW build of the MT32-PI project, allowing you to emulate a Roland MT-32 using a Raspberry Pi. Includes enough additional modules to build a MIDI-mountain as well as adapters for connecting to most things retro.

    103 parts80CC-BY-SA-4.0
  • 2 layers309 × 104.1 mmAbomination, the printed circuit board in 3D

    Abomination

    sebastian-stumpf/abomination

    Split keyboard with trackpad

    103 parts65