
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.).

An 83% Keyboard with PS/2 functionalitly
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.
One board. Two protocols. More to come.
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:
The Hydra is intended to be a series. Future versions may add an integrated USB hub, additional protocol modes, or other switching features.
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.
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.
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.
├── 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.pdfPS/2 mouse host support uses QMK's built-in PS2_MOUSE feature, enabled in rules.mk.
| Ref | Part | Description |
|---|---|---|
| U3 | RP2040 | Microcontroller |
| U4 | W25Q128JVS | 128 Mbit external flash |
| U1 | XC6206PxxxMR | 3.3 V LDO regulator |
| U2, U6 | SRV05-4 | USB ESD protection |
| Q1, Q2 | BSS138 | PS/2 bidirectional level shifters |
| J2 | USB-C receptacle | USB 2.0, 16-pin |
| P1 | Mini-DIN 6-pin | PS/2 connector |
| J3 | SSD1306 | 0.91" 128×32 OLED (I2C) |
| Y1 | 12 MHz crystal | RP2040 clock source |
| SW1 | Tactile switch | BOOTSEL |
| SW2 | Tactile switch | RESET |
| SW3 | Toggle / jumper | Mode select (USB / PS/2) |
| RE1 | Alps EC11E | Rotary encoder with switch |
All 30 RP2040 GPIOs are used:
| GPIO | Signal | Notes |
|---|---|---|
| GP0 | Row_0 | Key matrix |
| GP1 | Row_1 | |
| GP2 | Row_2 | |
| GP3 | Row_3 | |
| GP4 | Row_4 | |
| GP5 | Column_0 | |
| GP6 | Column_1 | |
| GP7 | Column_2 | |
| GP8 | Column_3 | |
| GP9 | Column_4 | |
| GP10 | Column_5 | |
| GP11 | Column_6 | |
| GP12 | Column_7 | |
| GP13 | Column_8 | |
| GP14 | Column_9 | |
| GP15 | Column_10 | |
| GP16 | Column_11 | |
| GP17 | Column_12 | |
| GP18 | Column_13 | |
| GP19 | Column_14 | |
| GP20 | Column_15 | |
| GP21 | Column_16 | |
| GP22 | Column_17 | |
| GP23 | Mode_Switch | HIGH = USB, LOW = PS/2 |
| GP24 | PS/2_Data | Through BSS138 level shifter |
| GP25 | PS/2_Clock | Through BSS138 level shifter |
| GP26 | I2C1_SDA | OLED (SSD1306) |
| GP27 | I2C1_SCL | OLED (SSD1306) |
| GP28 | Encoder_Up | Rotary encoder A |
| GP29 | Encoder_Down | Rotary encoder B |
| PS/2 Pin | Signal | Notes |
|---|---|---|
| 1 | Data | Through BSS138 to GP24 |
| 3 | GND | |
| 4 | VCC | VBUS (5 V) |
| 5 | Clock | Through BSS138 to GP25 |
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.
qmk setup)# 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 defaultOr copy the pre-compiled .uf2 from the Releases page onto the RPI-RP2 drive.
Edit Firmware/keymaps/default/keymap.c. Full PS/2 Scan Code Set 2 support is already in the firmware — just change the layout array.
qmk console================================
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 restoredThe 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:
0xF0 + scancode, key up)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.
Pull requests are welcome. Open an issue first for significant changes.
GPL-2.0 — see LICENSE. Matches the QMK Firmware license for full compatibility.
Betzalel J. Lewis — GitHub
PS/2 device mode proof-of-concept: QMK PS/2 USB Dual-Mode Keyboard
| Qty | Value | Footprint | References |
|---|---|---|---|
| 83 | D_Small | Diode_SMD:D_SOD-123 | D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +67 |
| 80 | MX_SW_solder | PCM_marbastlib-mx:SW_MX_1u | MX1, MX2, MX10, MX11, MX12, MX13, MX14, MX15, MX17, MX18, MX19, MX20, MX21, MX22, MX23, MX24 +64 |
| 9 | 100n | Capacitor_SMD:C_0402_1005Metric | C1, C2, C4, C5, C6, C7, C8, C9, C16 |
| 8 | 5k1 | Resistor_SMD:R_0402_1005Metric | R1, R2, R7, R8, R9, R10, R12, R13 |
| 8 | MountingHole | MountingHole:MountingHole_3.2mm_M3 | H7, H8, H9, H10, H11, H12, H13, H14 |
| 6 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad | H1, H2, H3, H4, H5, H6 |
| 4 | 1u | Capacitor_SMD:C_0402_1005Metric | C3, C10, C12, C13 |
| 2 | 1k | Resistor_SMD:R_0402_1005Metric | R6, R11 |
| 2 | 22p | Capacitor_SMD:C_0402_1005Metric | C14, C15 |
| 2 | 27 | Resistor_SMD:R_0402_1005Metric | R3, R4 |
| 2 | BSS138 | Package_TO_SOT_SMD:SOT-23 | Q1, Q2 |
| 2 | MX_SW_solder | PCM_marbastlib-mx:SW_MX_1.75u | MX72, MX77 |
| 2 | SRV05-4 | PCM_marbastlib-various:SOT-23-6-routable | U2, U6 |
| 1 | 10u | Capacitor_SMD:C_0603_1608Metric | C11 |
| 1 | 12MHz | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm | Y1 |
| 1 | 5.1k | Resistor_SMD:R_0402_1005Metric | R5 |
| 1 | BOOTSEL | Button_Switch_SMD:SW_SPST_TL3342 | SW1 |
| 1 | Debug | Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical | J4 |
| 1 | Fuse_Small | Fuse:Fuse_1206_3216Metric | F1 |
| 1 | LOGO | LOGO | G*** |
| 1 | Mini-DIN_6pins | Custom_Footprints:Connector_Mini-DIN_Female_6Pin_2rows | P1 |
| 1 | Mode Sel | Button_Switch_THT:SW_Slide_SPDT_Angled_CK_OS102011MA1Q | SW3 |
| 1 | RP2040 | Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mm_ThermalVias | U3 |
| 1 | RST | Button_Switch_SMD:SW_SPST_TL3342 | SW2 |
| 1 | RotaryEncoder_Switch | Rotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm | MX16 |
| 1 | SSD1306 | SSD1306_OLED-0.91-128x32:SSD1306-0.91-OLED-4pin-128x32 | J3 |
| 1 | USB_C_Receptacle_USB2.0_16P | Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | J2 |
| 1 | W25Q128JVS | Package_SO:SOIC-8_5.3x5.3mm_P1.27mm | U4 |
| 1 | XC6206PxxxMR | Package_TO_SOT_SMD:SOT-23-3 | U1 |

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.).

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

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.

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

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



It measures 357.2 × 106.1 mm and has 2 copper layers, 1.6 mm thick.
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.
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.
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).