Hardin Labs · V-Board

V-Board: a fixed-angle split keyboard.

Seventy keys on a 19.05 mm grid, with the two halves fixed at ±45° around a flat alpha block. Cherry MX switches, QMK firmware, a volume knob beside the number row, and a USB-C port at each arm tip. Designed in Marion, North Carolina, split into three boards so it can actually be fabricated.

The Hardin V-Board: a 70-key keyboard with its two halves angled outward from a flat central block, with a volume knob beside the number row
V-Board R3H in the V5 case. Rendered from the case model — no unit has been built.
70
Keys
One 9 × 8 matrix, one controller.
3
Boards
Left arm, centre, right arm.
2
USB-C ports
One at each arm tip. Use either.
1
Knob
EC11 encoder. Push to mute.
01 — Layout

The grid is not negotiable.

Every key sits on a 19.05 mm grid — the position table holds it to within 0.3 mm — and every width is standard, including the 4U spacebar, so the board takes an ordinary keycap set rather than a bespoke one. The alpha block stays flat and square in the centre; 39 of the 70 keys are turned ±45° so the hands follow the forearms instead of the desk edge. Seventy switches, one 9 × 8 matrix, one controller.

The V-Board seen from above on a dark wood surface, both arms angled outward from the central block
From above: the alpha block square to the desk, the arms turned out to meet the forearms. Every key on the same 19.05 mm pitch.
Low-angle view along the V-Board showing both arm tips and the case profile
Low along the desk: both arm tips, and the case profile that fixes the angle.
02 — The split

Three boards, because one board is expensive.

Drawn as a single piece the V-Board spans 355 × 214 mm — a large-format order at any prototype house, and a whole-board scrap every time one corner changes. Cut at the seams it becomes three boards — centre 117 × 118 mm, left arm 123 × 154, right arm 170 × 173 — each inside standard panel sizes, cheaper to fabricate and revisable one at a time. The case holds the alignment; the electrical join is a solder-in 1 × 20 ribbon column at each seam, pin for pin.

Left arm
16 keys

Sixteen keys — the navigation and editing cluster — thirteen of them turned −45° and three, Fn and the left modifier stack, left square with the centre. Its two wide keys are the left shift and the left control, both 2U. Five M3 mounting holes, sixteen diodes, one ribbon connector. 123 × 154 mm outline.

Centre
28 keys

Twenty-eight keys, all square to the desk — the flat alpha block — plus the RP2040-Tiny module, the EC11 encoder and the USB bus that feeds both arms. Six M3 mounting holes, two ribbon connectors, and 29 diodes: one more than its key count, because the encoder push gets its own. The smallest outline of the three at 117 × 118 mm. Top edge straight — the module sits flush inside the outline rather than on a tongue.

One switch sits under the module: clip its pins flush and kapton the area before seating.
Right arm
26 keys

Twenty-six keys, every one of them turned +45° — the right-hand alphas, Enter and the punctuation column — along with the two widest keys on the board, the 4U spacebar and the right shift. Eight M3 mounting holes, twenty-six diodes, one ribbon connector. The largest board of the three at 170 × 173 mm.

Three-quarter view of the V-Board from the right, showing the seam between the centre block and the right arm
Assembled, the split is a case seam and nothing more. The three boards below are what it is made of.
Left arm circuit board: copper traces and pads drawn from the KiCad file
Left arm — 16 keys, rotated −45°. The seam ribbon runs along the inboard edge.
Centre circuit board carrying the controller, the encoder and the USB bus
Centre — 28 keys, the controller, the encoder and the USB bus to both arms.
Right arm circuit board with the spacebar position and punctuation column
Right arm — 26 keys and the 4U spacebar, rotated +45°.
Drawn from the R3H KiCad files: front copper in teal, back copper in blue, pads and through-holes in gold.
03 — Connection

USB-C at either tip. One host at a time.

Both arm tips carry a panel-mount USB-C port, so the cable leaves from the side that suits the desk instead of the side the designer chose. In use it is one decision made once: plug into whichever tip faces the machine, leave the other empty, and the keyboard behaves like any other. There is no switch to set and no jumper to move — the two ports are not two devices, they are two doors into the same one. The RP2040-Tiny on the centre board brings USB out on an 8-pin flat cable, and D+/D− run from there through a USBLC6-2SC6 ESD array, across both seam ribbons, to a five-pin header behind each port.

Close view along the rear edge of the case showing the USB-C port cut into the wall
The port itself: a standard USB-C panel aperture cut into the case wall, about 9 × 3.5 mm, with the breakout mounted behind it and five short wires running to a header five millimetres inboard.
Rear three-quarter view of the V-Board on a wood desk with a port visible at the arm tip
From behind. One port sits at each arm tip, so the cable runs off whichever side the desk allows rather than the side the designer picked.
The path, end to end
RP2040-Tiny → 8-pin FPC
FPC1 → USBLC6-2SC6 ESD array
Seam ribbon pins 16–18 — VBUS, D−, D+
1 × 5 header, 5 mm inboard of each tip
Panel-mount USB-C, CC 5.1 kΩ pull-downs
VBUS returns through B5819W OR-diodes, one per port
How the two ports behave

Power is protected in hardware. VBUS from each port reaches the module through a B5819W Schottky OR-diode, so plugging in two hosts cannot back-drive one port’s 5 V from the other.

Data is not duplicated. D+ and D− are one net each to a single transceiver, so two hosts at once contend and neither enumerates. Nothing is damaged; nothing works either. Use one host.

Series damping is 27 Ω, on the module, at the source. R3H deleted the board-side 22 Ω that had stacked it to roughly 49 Ω and over-damped the full-speed edges.
04 — Encoder

A volume knob where the number row ends.

An EC11 rotary encoder sits in the notch to the right of the top row, on the centre board. Channel A on GP12, channel B on GP13, common to ground. The shaft push is not a separate input — it is wired into the key matrix as row 7, column 7 through its own diode, so it maps like any other key and defaults to mute.

Close view of the volume knob standing proud of the keycaps at the end of the number row
The knob sits in the notch where the number row ends, clear of the keycaps and under the right hand rather than off the edge of the board.
Encoder
EC11

Channel A on GP12, channel B on GP13, common to ground, with the shaft passing through an opening added to the case at V5.

Push
Row 7 / Col 7

Wired into the matrix through its own diode rather than a spare pin, so the press behaves like a key and is remapped like one. Mute by default.

05 — Firmware

QMK, and nothing exotic under it.

The board is an ordinary QMK keyboard: native RP2040 USB device, one diode per switch, a configuration and layout file that match the physical grid key for key. The fab package carries the firmware directory alongside the gerbers, so the first assembled board has something to flash the day it arrives.

Controller
RP2040-Tiny

Waveshare module on the centre board. Chosen over the RP2040-Zero because the Zero exposes no USB D+/D− pads — without them there is no way to route USB out to the arm tips. BOOT and RUN come out on pins 5 and 6 of the same flat cable, so the board can be put into bootloader mode without reaching the module itself.

Matrix
9 × 8

Rows on GP0–GP8, columns on GP29, GP28, GP27, GP26, GP15, GP14, GP9 and GP11 — 72 nodes. Seventy keys and the encoder push fill 71 of them, each through its own diode; one node is free.

Interconnect
J1–J4

Solder-in 1 × 20 ribbon columns at each seam, pin for pin. Pins 16–18 carry VBUS, D− and D+ out to the tip ports; the rest carry matrix lines.

06 — Parts

Seventy switches and not much else.

Nothing on these boards is hand-matched, obsolete or hard to buy. One controller module, one encoder, a handful of connectors, and then seventy switches and seventy-one diodes in the most ordinary packages there are. The list below is a count of the footprints in the three board files, not an estimate.

Counted from the board files
70 key switches — 66 at 1U, three at 2U (both shifts and the left control) and one 4U spacebar, all on Cherry MX PCB footprints
The three 2U keys and the spacebar carry PCB-mount stabiliser holes in their footprints
71 diodes — SOD-123, one per key and one more for the encoder push
1 controller — Waveshare RP2040-Tiny, centre board
1 encoder — EC11 vertical, centre board
4 ribbon connectors — 1 × 20, one on each side of each seam
1 ESD array — USBLC6-2SC6, on the shared D+/D−
2 Schottky OR-diodes — B5819W, one per port’s VBUS rail
2 tip headers — 1 × 5, five wires out to each panel-mount port
19 M3 mounting holes at 3.2 mm — six on the centre board, five on the left arm, eight on the right
07 — Where it stands

Done on paper. Nothing on a bench.

R3H is the fourth revision in this line, after R3E, R3F and R3G. Each one was a pass over the same three boards rather than a redesign. The design is ready to order and has never been built — and one thing still gates the first order: the centre board’s module footprint has not been checked against the manufacturer’s own drawing. Every photograph on this page is a render of the V5 case model. Nothing here has been manufactured, assembled or typed on.

Complete

All three boards pass design rule check at zero violations and zero unconnected pads. The matrix, encoder and USB audit passes end to end — pad to ribbon to module. The fabrication package is assembled: gerbers, drill files, bill of materials and pick-and-place per board, the switch-plate DXF, an order sheet, and the QMK firmware.

R3H itself removed the redundant USB damping resistors, added the VBUS OR-diodes, and cleared the last isolated ground pour fragment.
Open before the first order

Centre module footprint. The U1 pad geometry is still derived from the RP2040-Zero and has not been checked against the Tiny’s own mechanical drawing. Overlay it before ordering the centre board, or the module will not seat.

Case interior. The V5 model has no modelled cavity depth, and that dimension decides the encoder shaft length.

Tip apertures. Each 7.2 mm dome opening has to be cut to a standard USB-C panel aperture, roughly 9 × 3.5 mm.

Breakout choice. The panel-mount USB-C board must carry its own CC 5.1 kΩ pull-downs or the port will not enumerate at all.

Idle port. A cable left in the unused port is an unterminated stub. The round trip is about 2.6 ns against a 4 ns full-speed edge, so the analysis says it is tolerated — that has to be confirmed on the first assembled board rather than assumed.