Designing my own mechanical keyboard - FOCK (Falk's overstaggered Corne Keyboard)

2023-06-13

After my former dives into keyboards - including the Ergodox EZ, the gboards Buzzkill, and a CRKBD, I decided I wanted something more personal. After procrastinating hard for a while collecting my thoughts and experiences, I happened to see one of Ben Valleck's videos about designing personal keyboards. (He has since made another more detailed one.)

This made me discover MrZealot's (Bán Dénes) ergogen keyboard generator, which

aims to provide a common configuration format to describe ergonomic 2D layouts and generate automatic plates, cases, as well as un-routed PCBs for them. [from the ergogen repo]

This got the gears in my head turning again. It took me a while - until my girlfriend caught Covid19 and I had to abandon all my weekend plans to be specific - to collect my thoughts and turn them into an actual design.

Initial design criteria

Everybody wants something different when it comes to custom hardware - which is kind of the point. I wanted the following things:

Initially I just wanted a CRKBD with more stagger...
Initially I just wanted a CRKBD with more stagger...

Getting into ergogen

It took me a while of playing around with ergogen to get used to all the commands and possibilities. But after aforementioned interruption happened, I decided to commit and churned out a halfway usable design to refine in Kicad over the weekend.

Shape generated by ergogen Ergogen output in KiCAD
Ergogen can output layouts, KiCAD footprints and even stls

Version 0

I used printouts and .stl files generated by ergogen to verify that my designed layout actually felt good. I even fitted keys into a top plate to see how phantom typing felt. This process is something which I would recommend to anybody trying to go for a new layout.

Iteration process: from correctly scaled paper cutouts to 3D printed mockups and finally PCBs
Iteration process: from correctly scaled paper cutouts to 3D printed mockups and finally PCBs

Version 1

With the layout sorted, I was ready for the actual electrical design - or so I thought. I made a couple of mistakes I would like to highlight to ensure others don't repeat them needlessly:

This became a problem since I did not realize it right away. Default Ergogen is only meant to place the switches and components and leave routing to Kicad.

Since I first routed all nets within the keyboard matrix in itself and only then tried to connect rows and columns to the microcontroller, I realized this way too late. When I did, I tried to change controller pin nets to a more useful order in Kicad rather than recompiling the ergogen, since I did not want to redo the matrix routing.

So when I got my first round of PCBs and wanted to solder the first parts, I took a close look and saw that none of the pads had any connections. And since the PCBs were flippable, I could see traces leading into nowhere, or more precisely, to where the pads were on the back side.

Look closely and the distance between pads and traces will show the difference between theory and practice.
Look closely and the distance between pads and traces will show the difference between theory and practice.

Well, 30€ well spend on learning one way how not to do it.

Version 2

After that drawback, I got the next motivation kick during Virus Wars Episode 2: Corona strikes back. This time I caught it, isolated in home office and had time again.
I fixed all the issues I encountered in the first round, improved my footprints and replaced TRRS with USB-C connectors between the halves. I also got carried away and started routing in ergogen too.

Assembly

After waiting another week I got the PCBs.

By the time I got this far I had gotten Nice!Nanos V2, which work with ZMK, a bluetooth focused, complete rewrite of the QMK framework. ProMicros cost less than 25% of them, so I wanted the USB-C as a backup for cheaper builds, but I haven't gotten around to actually using it.

Marking the top on flippable PCBs prevents many mistakes... Adding clickyness Ready for round 2 Top and bottom side just after assembly, no standoffs or battery yet
Building a keyboard is the second-best part of the process, only beaten by seeing it working as intended.

I did solder on a set of USB-C ports onto one set of boards, but I never used them for the connection between the halves, bluetooth just worked flawlessly. I just wanted to route I2C across the USB-C data pins (which I know is an abuse, but I have a lot of USB-C cables so why not), but I haven't gotten much further than checking connectivity and shorts.

Hotswap sockets

My current layout uses home row mods. Sometimes some held keys would not register as held but trigger several times instead, as if the switch was not properly debounced. That was easily fixed by replacing the switch, so it is most certainly a mechanical issue.

Another time (actually the second time I used them at work), I spilled hot chocolate over the board. Removing the switches made cleanup so much better.

Tenting

I first used some standoffs from leftover projects with rubber nubs at the end for tenting. That lasted me a couple of months at work, since the keeb was basically instantly ready to use as a daily driver.

I have since revisited the openscad part of ergogen and am currently in the process of building a nicer stand. That will probably be another post though.

Batteries

I ordered the batteries and plugs on aliexpress and they arrived after two months of almost daily keyboard use on USB. Losing the tethers was really refreshing and the charge lasts me 1-2 weeks.

Prototype of a 3D-printed tenting leg Battery mounted with 3M double sided tape So many options
It's the small things which make the build really comfortable

Fancy keycaps

Keycaps are a rabbit hole in their own right and part of my reason for choosing Kailh low profile switches is that the rabbit hole does not go as deep here yet as it goes for Cherry style stems. Nonetheless, when the MKB Legend set was released, I got two sets and they really helped tie the build together visually and I don't regret a cent spent on them. (BTW, I ordered most of the more specific parts on splitkb.com, and the rest on ebay and aliexpress.)

Overall impression

It feels great to design and build something and use it daily. The ergonomics are good. In my opinion the split is the biggest advantage, followed by the thumb cluster and then orthogonal layout. Of course, the fact that the column stagger and tilt is customized to my hands makes them great for me, but horrible for most others. Since the pinky columns is shifted almost one key unit against the ring finger column, I need to ensure that the halves are rotated enough against each other so that I instinctively reach for the right keys. But that is the most comfortable position anyway. Home row mods are nice, but mainly a gimmick for me, since I try to avoid making writing the primary part of my job.

The two boards which I assembled side by side
The two boards which I assembled side by side

The next keyboard iteration will get footprint an easily visible RGB led to symbolize layer changes and layout changes. I can do without, but it would help sometimes.

Overall, a great experience. With two sets fabricated, and all parts for a 3rd set still in storage, the price per keyboard set is way lower than a Kinesis freestyle, and it fits my wishes, layout preferences, aesthetic and hand size way better. If you have the time, I can therefore recommend spending it on designing your own keyboard.

Big thanks to the ZMK team, Ben Valleck and MrZealot! Without both of their work, it would have taken me way longer to get this completed.

All ergogen files for the FOCK can be found on my github, as well as my layout for it. Should you decide to build your own, send me a picture!


◅ Thirst Aid Station
Getting a grip on longboarding ▻