Skip to the content
2 layers357.2 × 106.1 mmHydra 83, the printed circuit board in 3D

An 83% Keyboard with PS/2 functionalitly

Size
357.2 × 106.1 mm
Copper layers
2
Thickness
1.6 mm
Parts
226
Nets
148
Pads
809
Tracks, vias
986, 143
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
31 May 2026
Updated
7 Jun 2026

Overview

Hydra 83 is an open-source printed circuit board by BuzzL123, from the BuzzL123/Hydra_83 repository on GitHub, published under the GPL-2.0 licence. It is a 2-layer board of 357.2 × 106.1 mm with 226 parts on 148 nets, routed with 986 tracks and 143 vias.

It is built around the RP2040, W25Q128JVSIQ and SRV05-4, with the BSS138 among its other parts. Its parts include 83 diodes, 16 capacitors, 13 resistors, 5 ICs and 4 connectors. It belongs with the keyboards and input boards and the RP2040 boards of this library.

Main components

4

README

README.md

Hydra 83

One board. Two protocols. More to come.

License QMK Platform


What Is It?

The Hydra 83 is a custom 83-key mechanical keyboard that can switch between USB HID and PS/2 via a hardware toggle. The name comes from two things:

  • 83 — the total key count
  • Hydra — the multi-headed creature of myth, representing the board's ability to switch between protocols. In PS/2 mode it's a standard PS/2 keyboard; in USB mode it's a USB keyboard that also accepts a PS/2 mouse on the PS/2 connector

The Hydra is intended to be a series. Future versions may add an integrated USB hub, additional protocol modes, or other switching features.


Features

  • Dual-protocol keyboard output — USB HID or PS/2 Scan Code Set 2, selected with a hardware toggle
  • PS/2 mouse input in USB mode — plug a PS/2 mouse into the PS/2 connector while in USB mode; QMK's built-in PS/2 mouse driver reads it and forwards it to the host over USB
  • Full PS/2 keyboard implementation — make/break codes, typematic repeat, E0-prefixed extended keys, F13–F24, multimedia, browser, and power keys
  • On-board BSS138 level shifters — two BSS138 MOSFETs handle bidirectional 3.3 V ↔ 5 V translation on the PS/2 clock and data lines; no external components needed
  • OLED display — SSD1306 128×32 connected via I2C
  • Rotary encoder — Alps EC11E with push-to-click
  • USB-C connector — with SRV05-4 ESD protection
  • Hardware mode switch — debounced in firmware (50 ms)
  • QMK-based firmware — fully remappable, built on QMK best practices, using QMK built-ins wherever possible

How the Modes Work

PS/2 Mode

The board operates as a standard PS/2 keyboard. Connect it to any PS/2 port — Scan Code Set 2, typematic repeat, full extended key support, all modifiers. The PS/2 clock and data lines are driven by the RP2040 through the BSS138 level shifters.

USB Mode

The board enumerates as a USB HID keyboard. The PS/2 connector switches role: it becomes a PS/2 mouse host. Plug a PS/2 mouse in and QMK reads it and forwards mouse movement, buttons, and scroll to the host over USB alongside keyboard input — one USB-C cable, both devices.


Layout

The Hydra 83 has 83 keys with an integrated numpad cluster, F1–F12 doubling as F13–F24, and a rotary encoder in the top-right corner.


Repository Layout

text
├── Firmware/
│   ├── config.h
│   ├── halconf.h
│   ├── kb.c
│   ├── kb.h
│   ├── keyboard.json
│   ├── keymaps/
│   │   └── default/
│   │       └── keymap.c
│   ├── Makefile
│   ├── mcuconf.h
│   ├── ps2_keyboard.c
│   ├── ps2_keyboard.h
│   ├── ps2_scancodes.h
│   ├── readme.md
│   └── rules.mk
└── PCB/
    ├── gerbers/
    │   ├── bom.csv
    │   ├── designators.csv
    │   ├── Hydra_83_1.0.zip
    │   ├── netlist.ipc
    │   └── positions.csv
    ├── Hydra83_Schamatics.pdf

PS/2 mouse host support uses QMK's built-in PS2_MOUSE feature, enabled in rules.mk.


Hardware

Key Components

RefPartDescription
U3RP2040Microcontroller
U4W25Q128JVS128 Mbit external flash
U1XC6206PxxxMR3.3 V LDO regulator
U2, U6SRV05-4USB ESD protection
Q1, Q2BSS138PS/2 bidirectional level shifters
J2USB-C receptacleUSB 2.0, 16-pin
P1Mini-DIN 6-pinPS/2 connector
J3SSD13060.91" 128×32 OLED (I2C)
Y112 MHz crystalRP2040 clock source
SW1Tactile switchBOOTSEL
SW2Tactile switchRESET
SW3Toggle / jumperMode select (USB / PS/2)
RE1Alps EC11ERotary encoder with switch

GPIO Pin Map

All 30 RP2040 GPIOs are used:

GPIOSignalNotes
GP0Row_0Key matrix
GP1Row_1
GP2Row_2
GP3Row_3
GP4Row_4
GP5Column_0
GP6Column_1
GP7Column_2
GP8Column_3
GP9Column_4
GP10Column_5
GP11Column_6
GP12Column_7
GP13Column_8
GP14Column_9
GP15Column_10
GP16Column_11
GP17Column_12
GP18Column_13
GP19Column_14
GP20Column_15
GP21Column_16
GP22Column_17
GP23Mode_SwitchHIGH = USB, LOW = PS/2
GP24PS/2_DataThrough BSS138 level shifter
GP25PS/2_ClockThrough BSS138 level shifter
GP26I2C1_SDAOLED (SSD1306)
GP27I2C1_SCLOLED (SSD1306)
GP28Encoder_UpRotary encoder A
GP29Encoder_DownRotary encoder B

PS/2 Connector Pinout (Mini-DIN 6)

PS/2 PinSignalNotes
1DataThrough BSS138 to GP24
3GND
4VCCVBUS (5 V)
5ClockThrough BSS138 to GP25

PCB

KiCad source files, schematic PDF, PCB plot PDF, interactive HTML BOM (ibom.html), and JLCPCB fabrication files are all in the PCB/ directory. The design is still being refined.

To view the interactive BOM, open ibom.html in any browser — it shows component placement on the board alongside the BOM table, useful for hand assembly.


Firmware

Prerequisites

  • QMK Firmware set up locally
  • QMK CLI configured
  • ARM GCC toolchain (installed by qmk setup)

Build & Flash

bash
# Copy the Firmware folder into your QMK keyboards directory
cd ~/qmk_firmware/keyboards
mkdir -p hydra83
cp -r /path/to/Hydra_83/Firmware hydra83/hydra83

# Compile
qmk compile -kb hydra83/hydra83 -km default

# Flash — double-tap reset on RP2040 to enter bootloader, then:
qmk flash -kb hydra83/hydra83 -km default

Or copy the pre-compiled .uf2 from the Releases page onto the RPI-RP2 drive.

Keymap Customization

Edit Firmware/keymaps/default/keymap.c. Full PS/2 Scan Code Set 2 support is already in the firmware — just change the layout array.


Debugging

bash
qmk console
text
================================
Mode switch: PS/2
================================
[PS2] PS/2 driver activated
[PS2] Key pressed: keycode=0x0004, scancode=0x1C
[PS2] Typematic repeat: keycode=0x0004, scancode=0x1C
[PS2] Key released: keycode=0x0004, scancode=0x1C
================================
Mode switch: USB
================================
[USB] USB driver restored

PS/2 Protocol Details

The keyboard side operates in PS/2 device mode — the RP2040 acts as a keyboard. Each byte is 11 bits (start, 8 data bits LSB-first, odd parity, stop) at ~10 kHz. The firmware handles:

  • Make codes (key down) and break codes (0xF0 + scancode, key up)
  • E0-prefixed extended codes for arrows, navigation, multimedia, browser, and power keys
  • Multi-byte sequences for Print Screen and Pause/Break
  • Typematic repeat — 500 ms initial delay, ~30 repeats/second

In USB mode the same PS/2 lines (GP24/GP25) switch to input, and QMK's PS2_MOUSE driver reads standard PS/2 mouse packets and forwards them over USB HID.


Roadmap

  • Finalize PCB layout
  • Software mode toggle via keypress (in addition to hardware switch)

Contributing

Pull requests are welcome. Open an issue first for significant changes.


License

GPL-2.0 — see LICENSE. Matches the QMK Firmware license for full compatibility.


Author

Betzalel J. Lewis — GitHub

PS/2 device mode proof-of-concept: QMK PS/2 USB Dual-Mode Keyboard

Parts

226
QtyValueFootprintReferences
83D_SmallDiode_SMD:D_SOD-123D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +67
80MX_SW_solderPCM_marbastlib-mx:SW_MX_1uMX1, MX2, MX10, MX11, MX12, MX13, MX14, MX15, MX17, MX18, MX19, MX20, MX21, MX22, MX23, MX24 +64
9100nCapacitor_SMD:C_0402_1005MetricC1, C2, C4, C5, C6, C7, C8, C9, C16
85k1Resistor_SMD:R_0402_1005MetricR1, R2, R7, R8, R9, R10, R12, R13
8MountingHoleMountingHole:MountingHole_3.2mm_M3H7, H8, H9, H10, H11, H12, H13, H14
6MountingHole_PadMountingHole:MountingHole_3.2mm_M3_PadH1, H2, H3, H4, H5, H6
41uCapacitor_SMD:C_0402_1005MetricC3, C10, C12, C13
21kResistor_SMD:R_0402_1005MetricR6, R11
222pCapacitor_SMD:C_0402_1005MetricC14, C15
227Resistor_SMD:R_0402_1005MetricR3, R4
2BSS138Package_TO_SOT_SMD:SOT-23Q1, Q2
2MX_SW_solderPCM_marbastlib-mx:SW_MX_1.75uMX72, MX77
2SRV05-4PCM_marbastlib-various:SOT-23-6-routableU2, U6
110uCapacitor_SMD:C_0603_1608MetricC11
112MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
15.1kResistor_SMD:R_0402_1005MetricR5
1BOOTSELButton_Switch_SMD:SW_SPST_TL3342SW1
1DebugConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ4
1Fuse_SmallFuse:Fuse_1206_3216MetricF1
1LOGOLOGOG***
1Mini-DIN_6pinsCustom_Footprints:Connector_Mini-DIN_Female_6Pin_2rowsP1
1Mode SelButton_Switch_THT:SW_Slide_SPDT_Angled_CK_OS102011MA1QSW3
1RP2040Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mm_ThermalViasU3
1RSTButton_Switch_SMD:SW_SPST_TL3342SW2
1RotaryEncoder_SwitchRotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mmMX16
1SSD1306SSD1306_OLED-0.91-128x32:SSD1306-0.91-OLED-4pin-128x32J3
1USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J2
1W25Q128JVSPackage_SO:SOIC-8_5.3x5.3mm_P1.27mmU4
1XC6206PxxxMRPackage_TO_SOT_SMD:SOT-23-3U1

Similar boards

  • 2 layers111 × 64 mmThinkpad USB keyboard PCB, the printed circuit board in 3D

    Thinkpad USB keyboard PCB

    bluepylons/A-Thinkpad-USB-keyboard

    This is a project attempting to make a USB keyboard/Trackpoint controller and enclosure for the non-chiclet Thinkpad keyboard (from the 10/20 generation, such as the T410, W520, etc.).

    95 parts9
  • 4 layers95 × 77 mmTachometer, the printed circuit board in 3D

    Tachometer

    Churrosoft/Dashdash

    tablero de instrumentos por can para integrar con OpenEFI, cuando se nos ocurra algo mas original cambiamos el nombre

    207 parts1MIT
  • 4 layers91.4 × 102.9 mmFPGC4IOboard, the printed circuit board in 3D

    FPGC4IOboard

    bartpleiter/FPGC5

    A completely self designed (game) computer, implemented in hardware using an FPGA. Basically every component is self designed, from the ISA up to the PCB and software.

    150 parts6GPL-3.0
  • 2 layers63.5 × 58 mmLatest, the printed circuit board in 3D

    Latest

    minipadKB/minipad

    The PCB and case files for the minipad, an RP2040-based 2-3-key keypad for the rhythm game osu!.

    39 parts52GPL-3.0
  • 2 layers224.4 × 97.8 mmKnobdeavour, the printed circuit board in 3D

    Knobdeavour

    ScatteredDrifter/Buran-Ortho

    A 39-key orthogonal keyboard with support for two knobs, based on a rp2040

    105 parts46
  • 2 layers253.3 × 113.3 mmCut slope, the printed circuit board in 3D

    Cut slope

    hazels-garage/cut-slope

    119 parts29
  • 2 layers344.7 × 123.6 mmSlime88, the printed circuit board in 3D

    Slime88

    zykrah/slime88

    A F13 TKL Multi-Layout Hotswap H88-Compat Type-C PCB

    243 parts29
  • 2 layers346.1 × 118.3 mmTKL VIDEO, the printed circuit board in 3D

    TKL VIDEO

    NCKiser/TKL_VIDEO

    233 parts17

Questions

How big is the Hydra 83 PCB?

It measures 357.2 × 106.1 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Hydra 83 use?

226 parts, built around the RP2040, W25Q128JVSIQ, SRV05-4 and BSS138. 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 Hydra 83 KiCad files?

From the BuzzL123/Hydra_83 repository on GitHub, at the commit this page was made from: the board is PCB/kicad/Hydra83.kicad_pcb and its schematic PCB/kicad/Hydra83.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Hydra 83 design in my own project?

Its repository publishes it under the GPL-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).