Skip to the content
2 layers305 × 103.4 mmHmkb65alps, the printed circuit board in 3D

HMKB 65 Alps Compatible PCB and Plate

Size
305 × 103.4 mm
Copper layers
2
Thickness
1.6 mm
Parts
157
Nets
110
Pads
738
Tracks, vias
689, 843
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
18 May 2024
Updated
6 Sep 2025

Overview

Hmkb65alps is an open-source printed circuit board by burbschat, from the burbschat/hmkb65alps repository on GitHub. It is a 2-layer board of 305 × 103.4 mm with 157 parts on 110 nets, routed with 689 tracks and 843 vias.

It is built around the ATMEGA32U4-AU and PRTR5V0U2X. Its parts include 69 diodes, 69 switches, 8 capacitors, 6 resistors and 2 connectors. It belongs with the AVR (ATmega, ATtiny) boards of this library.

Main components

2

README

README.md

HMKB 65 Alps Compatible PCB and Plate

Case

  • HMKB V1 65 AAA by Heavymetal Keyboards

Layout

Raw data for keyboard-layout-editor.com:

json
["~\n`","!\n1","@\n2","#\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=",{w:2},"Backspace",{a:7},""],
[{a:4,w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{w:1.5},"|\n\\",{a:7},""],
[{a:4,w:1.75},"Caps Lock","A","S","D","F","G","H","J","K","L",":\n;","\"\n'",{w:2.25},"Enter",{a:7},""],
[{a:4,w:2.25},"Shift","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:1.75},"Shift",{a:7},"",""],
[{a:4,w:1.25},"Ctrl",{w:1.25},"Win",{w:1.25},"Alt",{a:7,w:6.25},"",{a:4},"Alt","Fn","Ctrl",{a:7},"","",""] 

Matrix position annotated version (also without label position information as this messes with scripts using the annotated version down the line):

json
["0,0","0,1","0,2","0,3","0,4","0,5","0,6","0,7","0,8","0,9","0,10","0,11","0,12",{w:2},"0,13","0,14"],
[{w:1.5},"1,0","1,1","1,2","1,3","1,4","1,5","1,6","1,7","1,8","1,9","1,10","1,11","1,12",{w:1.5},"1,13","1,14"],
[{w:1.75},"2,0","2,1","2,2","2,3","2,4","2,5","2,6","2,7","2,8","2,9","2,10","2,11",{w:2.25},"2,13","2,14"],
[{w:2.25},"3,0","3,1","3,2","3,3","3,4","3,5","3,6","3,7","3,8","3,9","3,10",{w:1.75},"3,12","3,13","3,14"],
[{w:1.25},"4,0",{w:1.25},"4,1",{w:1.25},"4,2",{w:6.25},"4,5","4,9","4,10","4,11","4,12","4,13","4,14"]

Find in proper json format in hmkb65alps.json. The corresponding annotated (i.e. which key goes where in the matrix) in kle-serial format can be found in hmkb65alps-annotated_kle-serial.json (converted using this).

PCB

Footprints etc.

Included as submodules in lib/.

3D Models for Key Switches

Found a ALPS switch model here. Very kindly there is an scad file provided (and not just a mesh .stl or similar)!

Components

USB-C Connector

All of the options here are selected to be hand solderable.

Korean Hroparts Elec TYPE-C-31-M-12 Seems to be a popular choice, probably because it's dirt cheap (<20cents). However, it's not available on DigiKey, Mouser or RS.

GCT offers a series of hand solderable connectors. Compare them here. Note that USB4085 is entirely through hole, which however at the same time makes accessing the pins challenging. For this PCB the accessible D+/D- pins were in the wrong order, which is why a different connector was used. USB4105 and USB4215 seem to be essentially the same, with USB4215 having some locating plastic pegs on the bottom. The latter however seems not to be available at the usual vendors, so here USB4105 is choosen as an slighly less cheap alternative to the dirt cheep HRO mentioned above. GCT also has very well structured documentation and links to footprints and 3d models on their website.

kbplacer

Used this Kicad Plugin for helping with schematic/layout generation. There is also a script layout2schematic.py in the repository which was used to generate the key matrix part of the schematic. Technically one can also access this when the kbplacer python package is installed with python -m layout2schematic, but in this case the dependencies will not be automatically synchronized. The best way probably is to use a hatch virtual environment. Clone the repo and make sure hatch is installed. The pyproject.toml defines a hatch virtual environment for the tools. To create it run hatch env create tools. To launch a shell with the environment activated use hatch -e tools shell. One may also just run this right away as this will create the environment if not present. Btw. for some reason from the hatch environment pythom -m layout2schematic does not seem to work, so run the script from the tools directory directly. See also the the readme file for the tools for more information.

Note that the input json file is not directly what is obtained from the keyboard layout editor! Use https://adamws.github.io/kle-serial or keyboard-tools.xyz/kle-converter (as the main README file notes). In any case, the layout file must be one where the keys in the keyboard layout editor are annotated using labels as row,col to designate where they will be in the matrix. Find annotated layout in hmkb65alps-annotated.json

TLDR:

text
cd kicad-kbplacer
hatch run tools:layout2schematic -in ../hmkb65alps-annotated-converted.json -out ../pcb/hmkb65alps-matrix.kicad_sch

Creates the base matrix schematic which I then manually edited to fit my preferences. I load this as a hierarchical sheet into the main kicad project. As I prefer to not use global labels for the rows/columns, I also manually replace the global labels with hierarchical labels. Bad idea as this breaks the net resolving with kbplacer it seems :(. So global labels it is (I also tried if local labels work, but they dont). TLDR: Use the matrix as generated by layout2schematic.py, no touchy.

Generating the layout

If you do not do anything funny to the generated key matrix schematic (like trying to use hierarchical labels), assigning footprints to all parts, then importing to the pcb layout and running the plugin should just work.

I first assign 1U switches to all of the switches, have them placed and then adjust the longer ones (way easier than trying to figure out which switch was where in the matrix.)

When running the plugin point Keyboard layout file to ../hmkb65alps-annotated-converted.json (or wherever the layout in the correct format is). With the MX-Alps hybrid footprints the diode position must be adjusted, as otherwise it is too close to the holes in the PCB which is not good to begin with and also will cause the automatic routing to fail. In Switch diodes setting set Position to Custom. I Chose Offset X = 7.5, Offset Y = -6.5, Orientation = -90 and Side = back.

Probably better use the Relative mode. This will result in the layout for the first switch being replicated to the others. For some reason this however does not seem to work for open ended tracks.

Ideas

  • Consider using chips containing multiple diodes in the same package to avoid soldering pain
    • Did not end up prusuing this
  • Use Alps/MX hybrid footprints
    • Implemented!
  • Consider Alps/MX hybrid plate
    • Can work but probably a bad idea as contact area of switches to plate will be very small
  • Mill-Max Sockets for hot-swapping (should also work with hybrid footprints as seen in the pictures here).
    • Tried this one. The pins on Alps switches do not play nice with such sockets (they are wider than MX ones requiring quite large sockets)

Plate

Design

ai03 Plate Generator seems to be a well made modern solution (repository here)! Probably prefer using this over what used to be the standard tool(?) to get plate hole locations (select no outline, as the correct one is not available there), then manually add the correct outline from the MX plate files distributed on the HMKB discord.

Holdup, on closer inspection swillkb seems to provide much more features! In fact one can adjust the stabilizers for specific keys using special attributes in the layout definition. This one for example overrides the spacebar stabilizer to be of Cherry + Costar type by using {a:7,w:6.25, _s:1}.

text
["~\n`","!\n1","@\n2","#\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=",{w:2},"Backspace",{a:7},""],
[{a:4,w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{w:1.5},"|\n\\",{a:7},""],
[{a:4,w:1.75},"Caps Lock","A","S","D","F","G","H","J","K","L",":\n;","\"\n'",{w:2.25},"Enter",{a:7},""],
[{a:4,w:2.25},"Shift","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:1.75},"Shift",{a:7},"",""],
[{a:4,w:1.25},"Ctrl",{w:1.25},"Win",{w:1.25},"Alt",{a:7,w:6.25, _s:1},"",{a:4},"Alt","Fn","Ctrl",{a:7},"","",""]

This is exactly what I need for the Tai-Hao Keycaps which have cherry type stabilizers on only the spacebar. Seems like one can also further specify the outline. If possible, defining the whole plate programatically would be cool. Actually, we could get away without using the web interface alltogether by using KAD, the library powering builder.swillkb.com.

Holdup, but swillkb does not do rounded corners as I might need for a PCB plate. So I forked ai03 Plate Generator (aka yet-another-keyboard-builder) and modified the code with my essentially non existent javascript knowledge, which actually worked! It's probably not pretty or good practice though, but good enough for what I need for now.

Here is the layout that should fit for stabiliziers for the Tai-Hao Alps keycaps:

text
["~\n`","!\n1","@\n2","#\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=",{w:2},"Backspace",{a:7},""],
[{a:4,w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{w:1.5},"|\n\\",{a:7},""],
[{a:4,w:1.75},"Caps Lock","A","S","D","F","G","H","J","K","L",":\n;","\"\n'",{w:2.25},"Enter",{a:7},""],
[{a:4,w:2.25},"Shift","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:1.75},"Shift",{a:7},"",""],
[{a:4,w:1.25},"Ctrl",{w:1.25},"Win",{w:1.25},"Alt",{a:7,w:6.25, _s:"mx-basic"},"",{a:4},"Alt","Fn","Ctrl",{a:7},"","",""]

I also generated the plate with flipped Alps stabilizers as

text
["~\n`","!\n1","@\n2","#\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=",{w:2,_rs:180},"Backspace",{a:7},""],
[{a:4,w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{w:1.5},"|\n\\",{a:7},""],
[{a:4,w:1.75,_rs:180},"Caps Lock","A","S","D","F","G","H","J","K","L",":\n;","\"\n'",{w:2.25,_rs:180},"Enter",{a:7},""],
[{a:4,w:2.25,_rs:180},"Shift","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:1.75,_rs:180},"Shift",{a:7},"",""],
[{a:4,w:1.25},"Ctrl",{w:1.25},"Win",{w:1.25},"Alt",{a:7,w:6.25, _s:"mx-basic"},"",{a:4},"Alt","Fn","Ctrl",{a:7},"","",""]

and alps-aek instead of mx-basic for the spacebar which I then all composed in KiCad, which was possible as the cutouts do not overlap. This means that I do not have to worry about the orientation of the stabilizers (some Tai-Hao keycaps seem to have them inversed) and can later decide if I want alps or Cherry stabilizers on the spacebar (Tai-Hao keycaps support those on only the spacebar but there seem to also be adapters to use Alps stabilizers).

Material

  • Try lasercutting ~1.6mm plate on the lasercutter that is avaiable at my university (even though it is not rated to cut metal this thick)?
    • Have to source metal plates which might not be cheap in small quantities
    • Not pursued eventually.
  • Order FR4 plate (i.e. just a PCB). This seems to be very reasonably priced. Getting FR4 stock cheaper and cutting on the lasercutter appeared difficult (could not find very cheap FR4 stock).
    • Ordering a PCB in plate size seems to cost around 3000JPY. One could also get an aluminum PCB for just a little more, but I don't know if an aluminum plate is a good idea. FR4 appeared much more sturdy to me but I did not make a direct comparison.
    • This is the eventually adopted option

References

Parts

157
QtyValueFootprintReferences
68DDiode_SMD:D_SOD-123D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +52
57SW_PushMX_Alps_Hybrid:MX-Alps-Hybrid-1USW1, SW2, SW10, SW11, SW12, SW13, SW15, SW17, SW18, SW19, SW20, SW21, SW22, SW23, SW24, SW25 +41
40.1uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC2, C3, C4, C7
3SW_PushMX_Alps_Hybrid:MX-Alps-Hybrid-1.25USW59, SW60, SW61
210kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1, R4
222Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR11, R12
222pFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC5, C6
25.1kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR15, R16
2SW_PushMX_Alps_Hybrid:MX-Alps-Hybrid-1.75USW31, SW56
2SW_PushMX_Alps_Hybrid:MX-Alps-Hybrid-2.25USW43, SW45
2SW_PushMX_Alps_Hybrid:MX-Alps-Hybrid-1.5USW16, SW29
110uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC1
116MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mm_HandSolderingY1
11uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC8
1500mFuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolderF2
1ATmega32U4-APackage_QFP:TQFP-44_10x10mm_P0.8mmU1
1AVR-ISP-6Connector_IDC:IDC-Header_2x03_P2.54mm_VerticalJ1
1PRTR5V0U2XPackage_TO_SOT_SMD:SOT-143D71
1SW_PushButton_Switch_SMD:SW_SPST_SKQG_WithStemSW69
1SW_PushMX_Alps_Hybrid:MX-Alps-Hybrid-6.25USW62
1SW_PushMX_Alps_Hybrid:MX-Alps-Hybrid-2USW14
1USB4105GFA120kbd_custom:GCT_USB4105GFA120J2

More from burbschat/hmkb65alps

1
  • 2 layers76.4 × 103.6 mmTest numblock pcb, the printed circuit board in 3D

    Test numblock pcb

    burbschat/hmkb65alps

    HMKB 65 Alps Compatible PCB and Plate

    55 parts

Similar boards

  • 2 layers243.9 × 136.5 mmBarobord, the printed circuit board in 3D

    Barobord

    sadekbaroudi/barobord

    I have spent a lot of time and money designing prototypes, testing, developing, etc. Any contributions would be greatly appreciated!

    157 parts57
  • 2 layers217.7 × 91.1 mmAdalyn, the printed circuit board in 3D

    Adalyn

    Marbelymarble/Adalyn

    36key QAZ-like handwired keyboard

    76 parts55GPL-3.0
  • 2 layers298.8 × 122 mmUrsaminor pcb, the printed circuit board in 3D

    Ursaminor pcb

    markstory/ursa-minor-keyboard

    Design and schematics for the ursaminor keyboard

    225 parts23
  • 2 layers285.5 × 112.1 mmYacc46 plate, the printed circuit board in 3D

    Yacc46 plate

    1m38/keyboards

    yacc46 is a 44-46keys self-made keyboard.

    144 parts21MIT
  • 2 layers242.3 × 75.4 mmM3n3van, the printed circuit board in 3D

    M3n3van

    matthewdias/m3n3van

    A minivan case compatible PCB with 2x3u split space

    151 parts20MIT
  • 2 layers333.4 × 88.6 mmReverie, the printed circuit board in 3D

    Reverie

    makenova/reverie

    a mini 1800 keyboard based on the Elongate, Clarabelle, and Garbage Truck Keyboards

    140 parts14
  • 2 layers281.8 × 166.9 mmMicro redox semi split, the printed circuit board in 3D

    Micro redox semi split

    makenova/micro_redox

    A family of boards inspired by the microdox and ferris

    96 parts13
  • 2 layers276.2 × 79.8 mmMinim, the printed circuit board in 3D

    Minim

    matthewdias/minim

    A symmetrical 50% keyboard

    114 parts13MIT

Questions

How big is the Hmkb65alps PCB?

It measures 305 × 103.4 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Hmkb65alps use?

157 parts, built around the ATMEGA32U4-AU and PRTR5V0U2X. 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 Hmkb65alps KiCad files?

From the burbschat/hmkb65alps repository on GitHub, at the commit this page was made from: the board is pcb/hmkb65alps.kicad_pcb and its schematic pcb/hmkb65alps-matrix.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Hmkb65alps design in my own project?

Its repository states no licence, so its author keeps all rights: ask burbschat before reusing the design.