skarrmann / horizon

52 key ortholinear keyboard, no special features.
MIT License
125 stars 9 forks source link

Horizon Keyboard

Horizon Choc + MX complete build top photo

Horizon is a 52 key (4x14) ortholinear keyboard, powered by an Arduino Pro Micro.

This keyboard is a grid of 1U keys with no special features: no hotswap, no RGB, no OLED screen, no knobs.

Project structure

PCBs

Two separate PCB designs are available for MX and Choc keyswitches, with their respective footprints and key spacing (MX: 19mm x 19mm, Choc: 18mm x 17mm).

Each design consists of a main PCB, a top plate to protect the microcontroller, and a bottom plate to protect the bottom components:

Horizon MX PCBs photo

The bottom plate is a cutout of all the components exposed through the bottom of the main PCB, and screws directly against the main PCB. This nicely guards you and your desk surface from all the pointy through-hole bits, while retaining a low keyboard height:

Horizon Choc + MX complete build bottom photo

KiCad project notes

The bottom and top plates are generated via a custom KiCad 7 Python SWIG plugin Horizon Board Producer.

For the plugin to generate these plate boards, the PCB and its footprints use the following layer convention:

When the board producer runs, these layers are used as follows:

Horizon KiCad plate edge cuts Horizon KiCad footprint plate holes

Additionally, the board producer plugin will preserve any in-bounds "H" footprint pads (mounting holes), "LOGO" footprint graphics (custom silkscreen art), and board silkscreen on the plates. Other items which are not needed for plates (e.g., copper tracks and zones) are removed from the plates.

The board producer plugin also generates all the Gerber files for production.

Please note the board producer plugin expects the following folder structure:

IMPORTANT: If you would like to use this plugin and plate edge cuts convention for you own project, please make sure you carefully examine the output Gerber files! The plugin ultimately worked well for my case, but you might need to make adjustments to the plugin to suit your project. And to reduce the chance of being charged extra money by PCB manufacturers, use footprint plate holes instead of edge cuts whenever reasonable to do so.

IMPORTANT: This plugin uses pcbnew.LoadBoard() to load copies of the PCB, which is not safely supported in a running instance of KiCad. To avoid project integrity problems this may cause to the running KiCad instance, the plugin forcefully exits KiCad upon execution completion.

Keyboard firmware

Bill of materials

For PCBs, keyswitches, and keycaps, get parts depending on your desired keyswitch type.

Part Purpose Quantity Notes
Main PCB circuit board 1 Send Gerber zip files to JLCPCB.
Top plate PCB protects microcontroller 1
Bottom plate PCB protects bottom pins and components 1
Arduino Pro Micro Microcontroller board 1 Or use another Pro Micro compatible board with same dimensions (confirmed Elite-C V4, nice!nano 2.0, and Adafruit KB2040 fit)
6x6mm DIP 4-pin tactile switch Reset button 1
1N4148 SOD-123 Diodes for keyboard row-column matrix 52
Keyswitches 52 PCB mount (5 pin) switches recommended. For MX, any switches should work. For Choc, get Choc V1 switches.
Keycaps 52 For MX, any keycaps should work. For Choc, get those which fit Choc V1 18mm x 17mm
M2 6mm screws Secure main PCB and plate PCBs 8
M2 nuts Secure main PCB and plate PCBs 8
M2 8mm male-female standoffs Raise top plate PCB above microcontroller 4
2mm tall rubber bumpons Raise board above desk surface and provide skid resitance 6

I recommend using sockets for the Pro Micro. For socketing options, refer to 40% Keyboards' sockets article.

M2 standoff height requirements are dependent on the seated microcontroller height. An M2 spacer set should give you enough options. I recommend getting a reset button ~2mm taller than the M2 standoffs so the button is level with the top plate.

If using a LiPo battery and a bluetooth Pro Micro compatible board, then use battery size 301230. Just make sure the microcontroller socket height provides clearance for the battery to fit underneath (standard SIP sockets are a common choice).

PCB manufacturing settings

These are the manufacturing settings I used when ordering from JLCPCB:

IMPORTANT: All PCBs have "JLCJLCJLCJLC" silkscreen text underneath the Pro Micro footprint. If you want to remove the order number from the boards or you want to print the PCBs with another manufacturer, then I recommend removing this silkscreen text from the .kicad_pcb file, and then re-run the Horizon Board Producer plugin to create the updated Gerber files.

Build tips

Revision history