oliviahanley / wren-keyboard

A split ergonomic keyboard with options for numpad, nav cluster, and more.
MIT License
76 stars 2 forks source link

Wren Keyboard

glamor shot Universal PCB Example Layout

Table of Contents

Introduction

The Wren is a split ergonomic "system keyboard". It takes heavy inspiration from the Lily58, Afternoon Labs' Breeze, and SplitKB's Kyria, in addition to employing a case similar to the Corne's.

My primary keyboard for the last few years has been Prime Keyboards' prime_o, before which I used a handwired Planck. On both I made pretty heavy use of the numpad. I grew to appreciate the prime_o's physical one, though, mostly because I spend a lot of time in Excel at my day job and like using the mouse and numpad simultaneously. I've been wanting to switch to ergo for a while, but I was annoyed by the thought of having to use a separate numpad to recreate that experience. This project was an attempt to solve that problem.

My original design simply incorporated a southpaw numpad. After some feedback, though, I decided to reinvent it as a "system keyboard" modeled after the old system cameras. The repository includes a universal PCB (incorporating break-away tabs) and plates to make four boards, each reversible:

Each of these boards (besides the macropad) can be combined with the others in a split setup, so users can take their pick of a right or left nav cluster/numpad, or combine both in the same board. You could even just use two of the basic boards together for a more traditional layout, though I'm sure there are more elegant designs out there for that.

Controller

The Wren uses a Pro Micro-compatible footprint, but is designed around the Elite-C's extra I/O pins on the numpad board. With just a Pro Micro, the outer column won't work. I think you could get a Nice!Nano to full compatibility with some creative soldering from the mid-board I/O pins to the appropriate pins on the Elite-C footprint, but I haven't spent any time on this myself.

PCB

The PCB uses reversible, MX-compatible footprints. There isn't hot-swap support yet, in large part because I didn't want to deal with the structural considerations of those sockets. If someone else wanted to make a pull request for a hotswap version, though, I'd be happy to merge it in.

The PCB is also specifically designed around rotary encoders with a diameter less than 0.5". I'm using Kilo 50 sized knobs, but others in a similar size class will work well, too.

Case and Plate

This repository includes a top and bottom plate designed around M2 screws and standoffs. The bottom plate can be manufactured out of FR4 PCB material by any manufacturer; this will likely be the most cost-effective option. The top plate cannot be manufactured by my preferred PCB fabricator, JLCPCB, but your milage may vary. Instead, I used the .eps files included in the Case folder to have my top plates manufactured in stainless steel by SendCutSend. In my experience these plates are an extremely tight fit around Kailh Box switches, but considering these aren't hot-swap that's an acceptable trade-off for me.

To make a complete case, you'll need 7 M2 spacers (5 for the plain board), a top plate, and a bottom plate.

Additionally, I've planned a 3D printed outer case. This design wraps the PCB and top plate in a printed outer layer, and provides a bit more protection.

Software

Tested code for this board is in the main QMK repository. Thanks so much to noroadsleft for getting QMK configurator working! To build a hex file with the default keymap, use the following code after setting up your QMK build environment:

qmk compile -kb wren -km default

This can be flashed to your keyboard in the usual way. The push-button below the microcontroler will put the keyboard into DFU mode.

When customizing your keymap, note that the matrix includes all keys that would be present in a numpad-numpad pair. In other words, even if the left side of your physical keyboard lacks a numpad, your keymap.c file will include those keys. Feel free to either mark all those keys with a KC_NO keycode or leave them as-is--it's not like you can press them anyway :). As well, if you'd like to plug your USB cable into the right half instead of the default left, add the following to your config.h:

#define MASTER_RIGHT

If you end up implementing something for this board in ZMK please don't hesitate to let me know or submit a pull request--I'd be happy to include documentation of that here, as well.

Cost Estimates and Purchasing

It should be relatively affordable to have these boards manufactured. Here are my costs for my PCB components at JLCPCB in USD as of September 2021:

And for my plates from SendCutSend:

The repository should include up-to-date zipped Gerber files, which can be used to have PCBs fabbed at your manufacturer of choice. I'm partial to JLCPCB (which consistently has very low prices and now offers aluminum PCB options for plates), but OSHPark is a good option if you're in the US and like purple or want single boards. For best compatibility, please have both plates and cases manufactured with a 1.6mm or 1.5mm thickness.

(I'm currently not planning on offering these boards as a kit. It should be cost-competitive to source the cases and plates yourself, and getting comfortable with ordering PCBs is a great first step to designing your own custom board. If you are interested in stocking this keyboard, though, please feel free to reach out and I'll be happy to provide any help I can.)

BOM

Numpad Board

To assemble a numpad half, you'll need these parts:

Nav Cluster Board

To assemble a nav cluster half, you'll need these parts:

Plain Board

To assemble a nav cluster half, you'll need these parts:

Egg Macro Pad

To assemble an egg with a broken-off piece of a main board, you'll need these parts:

Build Guide

Please note that this build guide refers to the "top" or "bottom" of the PCB. Since the PCB is reversible, these terms are relative to the final orientation of the board, not anything absolute. For example, the top of the right hand board would be the bottom of the left-hand board.

  1. If necessary, break off any unused sections of the PCB. This is best accomplished by placing the board on a hard, flat surface with the perforated section of the board placed over the edge. While holding the main section of the board to the surface, firmly press down on the section you'd like to detach until it breaks off. Then, use a file to remove any remnants of the perforation.

break-off

  1. Next, place diodes on the bottom side of the PCB, taking care to place the diodes with the black stipe facing the square pad.

placing diodes

TIP: Use needle-nose pliers to assist in bending diodes, as shown below.

bending diodes

  1. Solder the diodes in place on the bottom side of the board.

soldering diodes

  1. Place the resistors on the bottom side of the PCB and solder them into place.

placing resistors

  1. Turn the board over and clip the leads of the resistors and diodes as close as possible to the PCB. To avoid fitment issues with switches, ensure that the leads are cut nearly flush; nail clippers are good for this purpose.

unclipped leads clipped leads

  1. Place the headers for the microcontroller in place with the plastic spacer at the front of the board and secure them with a piece of painter's tape, taking care that they are perfectly straight.

headers placed headers taped headers taped below

Using the tape to ensure the headers remain straight, tack solder a pin on each strip.

headers tack soldered

Remove any remaining tape and solder the remaining pins.

headers soldered

  1. Solder the controller to the headers on the front of the board. The controller should be facing down on the left half, and up on the right half.

controller soldered

  1. Place the reset button below the controller on the front of the board and solder it into place.

button placed button soldered

  1. Place the TRRS jack on the front of the PCB and solder it into place.

trrs placed trrs soldered

  1. Place the rotary encoder on the front of the PCB and solder it into place. Take care to ensure the encoder is as straight as possible; it is possible for the encoder to interfere with the plate if it's attached incorrectly.

encoder placed encoder soldered

  1. Place the stabilizer.

stab placed

  1. Snap the switches into the plate, taking care to match the orientation of the PCB. They will likely be a tight fit.

switches placed front switches placed rear

  1. Fit the switchplate onto the PCB, taking care to fit it around the encoder as shown.

encoder fit switchplate fitted

  1. Tack solder the switchplate into place using the switches on the corners of the board.

switchplate tack soldered

  1. Finish soldering the switchplate.

switchplate soldered

  1. Attach the knob for the rotary encoder.

encoder knob attached

  1. Attach the standoffs using a screw through the front of the PCB.

standoff attached front standoff attached rear standoff attached all

  1. Clean off any excess flux using isopropyl alchohol.

  2. Using the standoffs, attach the rear plate to the board.

rear plate attached

  1. Attach rubber bumpers to the rear of the board for stability.

rubber bumpers

  1. Admire your work! Your board is ready to be flashed. If necessary, repeat with the other side of the board.

finished