Did you know that the price of fabricating a PCB jumps at the magic threshold of a ten centimetres square? That seems to be especially true in the USA where hobbyists only use local firms for tiny prototypes, and otherwise import from China etc. You can currently get a set of five PCBs shipped from JLCPLC for only USD $5. As long as you're happy with tiny keyboards, that's incredibly cheap!
![]() |
| Bivvy16D (in red) and Bivouac34 (in green) PCBs |
Bivvy16D
This was a test piece to try several new things in a split keyboard intended to be used tented:
Tiny PCB, under 10x10cm! This dovetailed with the fact that I wanted to drop a key from the index finger's inner column (Qwerty T and Y), and don't find the top ring key easy to reach either (Qwerty Q and P). Moving that to be pressed by the ring finger allows a very tight outer margin so that when tented the keyboard is as low to the table as possible (as well as helping with the PCB width). The only slight compromise compared to my current layout was in the thumb key placement, constrained to fit in the other corner of the 10x10cm square.
5-way navigation buttons, without using diodes - using a tweak to the Graph Theory directed sparse scanning matrix approach, as described in the previous blog post. Happily while the surface mounted Alps SKRHA mini-joysticks are tiny, soldering them was easier than I feared. I used Ergogen again, with a conversion of an existing crides' SKRHA KiCad footprint.
Dual layouts. There are overlapping switch footprints for the thumb keys meaning you can either use two normal sized (1u) keys, or a single central key (with a wider keycap, up to 1.75u). It was fun to support this explicitly in the ZMK firmware. This worked perfectly.
| Bivvy16D with 1.75u thumb keys |
Dual controller footprint. The design was to take either a pair of Wareshare RP2040-Zero controllers (wired mode), or a pair of NoLogoTech "SuperMini NRF52840 Zero" Bluetooth controllers (see this blog post). This idea here is they are the same size, and have 17 co-located GPIO pins, plus 5V, GND and 3V3. The only catch is the power pins are in opposite corners (workable if you have one upside down compared to the other), and have 5V and GND in different order. I could have used jumpers, but put the Wareshare RP2040-Zero pads on one side of the PCB, and the NRF52840 "Zero" pads on the other, with a cutout in the middle. For this I took an Ergogen conversion of marbastlib's RP2040-Matrix_ACH KiCad footprint, and removed pins for the radio cutout, duplicated pads on both sides, etc.
This partially worked - the initial cutout was too small (0.5mm margins). I could file it down to fit the RP2040-Zero's boot and reset buttons. However the tolerances for the NRF52840 "Zero" to be mounted face down are even tighter. I can make the cutout wide enough for the RP2040-Zero (JLCPLC use a 0.3mm limit rather than the KiCad default of 0.5mm), done in the next design. Getting the NRF52840 chip to fit would require a more dramatic change, dropping the through holes (which are handy to line up the controller while soldering).
If the NRF52840 "Zero" controller had fitted, it would have used Bluetooth and the optional power switch, and not the TRRS socket.
![]() |
| Two fully soldered Bivvy16D PCBs with the TRRS cable |
![]() |
| Experimenting with keyboard tenting angles - bare PCBs taped to cardboard |
While waiting on the cable to test in wired mode, I tried using it as two half keyboards, and experimenting with tenting angles which will inform the case design (see photo). Thankfully Karabiner Elements shares modifer state between keyboards, so shift on one keyboard can be applied to another etc. Sadly trying to type quickly on two keyboards like this, a lot of letters are processed out of order - on the typing trainer my accuracy appears to have plummeted as a result! I expected it to have dropped a bit (like my speed) as the inner column is a bit different.
![]() |
| Screenshot from Keybr.com, red accuracy dropped on new keyboard |
Bivouac34
This design is a diode-free monobody keyboard, using a reversible PCB for the left and right halves, but with a controller in only one half. The new thing here is these have "gold-fingers" in the corner for use with a PCB edge connector ribbon cable.
![]() |
| Two Bivouac34 PCBs in green, with ribbon cable and controller. |
With this wiring, I needed to make at least 15 connection between the two halves (14 GPIOs plus ground). I settled on the solder-free idea of a PCB edge connector ribbon cable, where the PCB has what are known as "gold fingers". These are literally gold plated if the connection is expected to be removed and replaced many times (like a PCI expansion card), but anecdotally cheap tinning should suffice for tens of uses. I'm using a 16-wire ribbon cable and edge connector (see photo above).
I used Ergogen again for the PCB design, including the "gold fingers" as a set of 16 long thin pads (8 on each side, using YAML templating), and the appropriate edge cuts. This seemed easier than trying to do the edge cuts as part of an Ergogen/KiCad footprint where joining with the main PCB edge cuts would be a pain.
Next Steps
The Bivouac34 PCBs arrived today, I'd already worked on the firmware which should be simple as electrically this is a single PCB. I'll be soldering that and testing it next week, hopefully.
The Bivvy16D is fully soldered, and working nicely with my QMK firmware - while my ZMK firmware was working last night - but I broke something while tidying up my git branches... I wrote most of this post on the TC36K keyboard, but am finishing it with the Bivvy16D. I still haven't fully settled on how to adjust my keymap for only 32 keys - the punctuation is the challenge for now.
Coming up with a 3D printed tented case design will be a fun challenge. Also, I'll need some sort of cap for the Bivvy16D's navigation buttons, probably these 3D printed nav-caps so I can customise the size and height. If I like the navigation buttons enough, that may justify yet another iteration combining these two prototypes. Or perhaps a more normal 3x5+2 layout as getting used to the two key inner column will take some adjustment. Or higher roll-over with a Pro-Micro sized Raspberry Pi controller with more pins? Or minimum vertical spacing with custom keycaps? Or...





No comments:
Post a Comment