Heuristic42
Blog
Opengl
Meta
Rendering
0
comment
Dec 15 at 4:39
Matrices
Hello! Are you looking to elevate your online business with a p…
–
anonymous
comment
Nov 27 at 0:30
DerBard: Custom Split Mechanical Keyboard Prototype
hello
–
anonymous
comment
Nov 19 at 15:47
Matrices
[deleted]
–
anonymous
created
Oct 20 at 20:30
Iterators: pointers vs cursors
You're already doing both of these by hand. This post emphaisze…
–
pknowles
comment
Oct 10 at 10:27
Matrices
[deleted]
–
anonymous
comment
Oct 4 at 19:12
Matrices
[deleted]
–
anonymous
comment
Sep 30 at 18:51
Matrices
[deleted]
–
anonymous
comment
Sep 23 at 16:15
Matrices
[deleted]
–
anonymous
comment
Sep 21 at 6:52
Contributing
I kind of predicted what was bound to happen when my favourite …
–
anonymous
comment
Sep 7 at 1:21
Route contention when running docker and a VPN
Thank you for this. Between this and the overwriting of iptabl…
–
anonymous
comment
Sep 6 at 17:57
Making a real EMF Reader
Sorry for the random quoted text comments. I am one of those p…
–
anonymous
comment
Sep 6 at 17:48
Making a real EMF Reader
["ove! Play a tone with a buzzer and has 5 LEDs to show the “EM…
–
anonymous
comment
Sep 6 at 17:47
Making a real EMF Reader
["easure direction Measure the magnetic fie"](#q107-644-685)
–
anonymous
comment
Aug 20 at 17:01
Matrices
[deleted]
–
anonymous
comment
Aug 11 at 22:32
Matrices
[deleted]
–
anonymous
edited
Jun 8 at 22:29
Rethinking writing files with memory mapping and C++
This post introduces the motivation behind the [decodless C++ o…
–
admin
created
Jun 8 at 22:16
Rethinking writing files with memory mapping and C++
This post introduces the motivation behind the [decodless C++ o…
–
pknowles
comment
Jun 5 at 13:36
Contributing
[deleted]
–
anonymous
comment
Apr 19 at 11:24
Matrices
[deleted]
–
anonymous
comment
Apr 13 at 0:25
Matrices
[deleted]
–
anonymous
comment
Apr 5 at 9:43
Matrices
[deleted]
–
anonymous
comment
Mar 27 at 17:19
Matrices
[deleted]
–
anonymous
comment
Mar 25 at 4:59
Matrices
[deleted]
–
anonymous
comment
Mar 5 at 15:39
Matrices
[deleted]
–
anonymous
…
View All
Log in
DerBard: Custom Split Mechanical Keyboard Prototype
leave this field blank to prove your humanity
Article title
*
Article revisions must have a non-empty title
Article body
*
![DerBard Cover Image][1] In my last post I presented my quest for a suitable [MS Natural 4K replacement](/blog/54/microsoft-natural-ergonomic-4000-replacement/). After exploring some options I casually declared I was going to build one from scratch. Well, 230 hours later I actually did it. I'm even typing this post with it now! Today, I rather proudly present "**DerBard**". Allow me to share the story of how it came to be. OK, at first glance it looks nothing like the MS Natural 4K but it's ergonomically very similar. The primary goal is for it to be similarly comfortable for long term use. - The overall shape and curves are actually based on physical scans of the 4K - Slight backwards tilt to keep the wrists straight - Custom palm rests in the same positions as the 4K - Thumb clusters to avoid 5th finger strain from holding Ctrl I'd like to showcase the work and decisions that went into making it, my excitement through the process and satisfaction with having finished the project. Maybe it helps someone else out there doing something similar. **Table of contents** - [DerBard Summary](#derbard-summary) - [Custom Keyboard Background](#custom-keyboard-background) - [Design and Modelling](#design-and-modelling) - [Mounting the switches](#mounting-the-switches) - [Shape](#shape) - [Adjustability](#adjustability) - [Assembly](#assembly) - [Software](#software) # DerBard Summary It's an ergonomic split 65 key keyboard with inbuilt palmrests, backwards tilt and per-key RGB lighting. It's a dream for typing text. Probably because it was designed to match the raised MS Natural 4K that I already love. The left thumb cluster is plain bad and needs redesigning --- the redesign is on the right. It's fully programmable with an Arduino ATmega32u4 (Elite-C V4 board), runs [QMK](https://qmk.fm/), has a 128x32 pixel display, buzzer and animated indicator LEDs that I use to show what layer is active. I'm recycling switches and keycaps from an off-the-shelf keyboard with some clickeys for the modifiers on the thumb clusters. The project was a considerable endeavour, totalling 230 hours of design and construction. I started with a fully functional left half, which took 150 hours. The right took another 80 hours, including revised approaches to the design and manufacturing steps. Stretching from July 2022 to April 2023, this project spanned nearly 6 full time working weeks. The majority of the time by far was design in Fusion360. Printing, assembling and programming was relatively quick - just a few weekends. Throughout the journey, I encountered numerous challenges, made mistakes, and gained invaluable insights. A few things set this apart from other designs I've seen: 1. I attempted to match the shape of the MS Natural 4K by scanning it. <img src="https://img.heuristic42.com/img/d0dbb0dc35c3.jpg" width="180" /> 3. The board is not flat and I used 1x1 PCBs mounted in a 3D printed plate to do it. This key holder design is my own. <img src="https://lh3.googleusercontent.com/pw/AJFCJaWckgdZQH9ipQ49A1F3YNJvoal3xo6G-07DEJZlJaWQDpbAhmFwAZksot5Fgac5_uzKO7U8SncZ8oZR8yDjjbpAM-TPytXqDcwkmdGCd2XLVmHMOLq6tNKQUmaqFa_V0GzevoS-k1SH_aP5XIT__uNZ-Q=w2584-h1946-s-no" width="180" /> 4. The right hand half uses a GPIO expander instead of a second microcontroller. 5. Per-key RGB. Not practical, but it was fun. # Custom Keyboard Background This is my quick summary and background of custom mechanical keyboards before talking keyboard details. It was so quick I had to split it out to a separate page: [**Anatomy of a custom keyboard**](/blog/56/anatomy-of-a-custom-keyboard/) # Design and Modelling These were my broad stroke starting points: - [How do I mount the keys?](#mounting-the-switches) - [What shape will the keyboard have?](#shape) - [What if I get it wrong, can it be adjustable?](#adjustability) - [Thumb clusters look interesting, do I want one?](#thumb-cluster) ## Mounting the switches By now I'd been browsing [r/MechanicalKeyboards/](https://www.reddit.com/r/MechanicalKeyboards/) for some time and could see I had some options. It seemed like most people were buying PCBs and plates from [keeb.io](https://keeb.io/collections/split-keyboards). PCBs didn't work for me as the whole point of this project was not to make a non-flat [MS Natural 4K replacement](/blog/54/microsoft-natural-ergonomic-4000-replacement/). Actually there is one caveat here --- keycaps come in different heights (e.g. you'll find function keys at the top are often taller) and a coleague at work showed me you can get a good curve even by gluing on some Lego shims. I was rather inspired by [Dactyl](https://github.com/adereth/dactyl-keyboard) in how a whole board could be 3D printed minus wiring the switches to a microcontroller. I highly recommend the [talk](https://www.youtube.com/watch?v=uk3A41U0iO4). Many people don't even bother with a flexible PCB and solder diodes and wires directly to the switches. One rather eye-catching project was a [Dactyl Manuform with hot-swappable sockets](https://arnmk.com/building-a-dactyl-manuform-with-hot-swappable-sockets/). This is where I *thought* I'd start. I recently bought a CR-10 printer and started learning Fusion360. My plan was to design a keyboard just like dactyl in that the shape could be quite organic. The starting point for designing a switch mount was [this video](https://www.youtube.com/watch?v=scoX8NZv4MI) by Bastard Keyboards. The reminder to print test pieces along the way is a great tip! [RGB lighting](/blog/56/anatomy-of-a-custom-keyboard/#lighting) is just a gimmick and doesn't really make you type faster. I'm kidding, of course my eyes got the better of me. I'll have some of that! I eventually stumbled upon 1x1 NeoKey PCBs. ![NeoKey PCBs][2] Pre-assembled socket + diode + RGB LED PCBs with convenient connections to adjacent ones. Not super cheap mind you, but convenient enough for what I'm getting. I found you can buy them in [5x5 snap-apart grids](https://www.adafruit.com/product/5157). Three sets for $90 + postage and that's just the start. Fair warning: you don't want to run the LEDs at full power unless you have a 20% size keyboard. ![Key holder design](https://lh3.googleusercontent.com/pw/AJFCJaWYLF3XqmDgSLjArPys64uxucvTIwCC1KVjwkT5kfF6H2sJE1dh7aiLbfaPyGOsmp2oQOAiwrEeDzyoOTwAepjnvJ8ccyzXnkfZLudT3tFfEUpKS12Sod2sYsueLhsi3wtS_65SWEM4SZMrSRKYUCFtkA=w1724-h1336-s-no) I spent quite some time figuring out the design for the individual key holders. I'll probably write a separate post just for those. There's actually two parts. The top is thick, simple and does the job of actually holding the key. The PCBs sit just underneath. There's space for the wiring between them. The tricky bit is the only space between the PCBs is at their corners. I designed some posts that: - Are only loosely connected at the tip so the whole holder can be printed in one go and snapped apart - Hold the PCBs in place with a friction fit while I solder them --- the primary purpose - Align the bottom of the key holders - Keep the top in rigid contact with the bottom and transfers force --- the PCBs are actually floating - Are replaced by a few screws in key locations to stop the top falling off ![Key holder test print](https://lh3.googleusercontent.com/pw/AJFCJaWckgdZQH9ipQ49A1F3YNJvoal3xo6G-07DEJZlJaWQDpbAhmFwAZksot5Fgac5_uzKO7U8SncZ8oZR8yDjjbpAM-TPytXqDcwkmdGCd2XLVmHMOLq6tNKQUmaqFa_V0GzevoS-k1SH_aP5XIT__uNZ-Q=w2584-h1946-s-no) After trying them out I'm pretty happy with the result. That said, there probably isn't any other way to work with the PCBs. After printing both sides a few posts did break at the wrong place, but they were easy enough to glue back. ## Shape Again, I'm making a [MS Natural 4K replacement](/blog/54/microsoft-natural-ergonomic-4000-replacement/), so I need to hammer down the shape of the keys. ![My old MS Natural 4K][3] Naturally I took my years of keyboard design and human physiology experience and... lol, I don't have any of that. So I found this photogrammetry software, [Meshroom](https://alicevision.org/#meshroom). Just with my phone I took some photos of my old natural 4k and used Meshroom to create a 3D model of it. The ease of use of this software out of the box is just incredible. Drag in the images, click go and wait. It's even textured so you can see where I've worn through the palmrests. Actually this was quite helpful later. ![Photogrammetry Capture][4] Getting this into Fusion360 was a story in itself. See [Matching complex shapes for a custom keyboard in Fusion360](https://www.heuristic42.com/blog/57/matching-complex-shapes-for-a-custom-keyboard-in-fusion360/). <img src="https://lh3.googleusercontent.com/pw/AJFCJaVOrYpa8VJIo1lL_s2YwdqufXVYpcrlI9RbBNc6V3zk5nKgHrgWGF7bDCVt9QuJ9SCrrGkk-Pola8xusndCd8HuQJry2zqpabYnRNvVljkBPSkYz8Gvmjm3siG8aaLGCUCubMgEXGTkxrFu8_xHWNobcw=w1721-h1359-s-no" height="250" /> <img src="https://lh3.googleusercontent.com/pw/AJFCJaXond_oitAMh7OjcQGhGj9uGgwboZdXgrXR6ZYhwbSF7PgpJtRDvVTZ4gZV8MlD6OylTp-JLIzKBmcoZkYS2BT97yaeOs2_uFdS4hiWikLoZsOjKjF3uzz6nwW_2aRYoTlijcHwKTfib2_f53fH20RxdQ=w1808-h1146-s-no" height="250" /> Finally I had the main board layout designed. I did manually tweak the orientation of the key holders, smoothing the transitions between each one. It was quite important to create some fake switch and keycap geometry to verify they had clearance. Joining the individual key holders wasn't so straight forward. I tried two ways: 1. I made each holder over-sized and then boolean unioned them together. Some geometry did interfere, so I went back in the timeline to before the union and subtraced extrusions from the top faces of each key holder from the neighboring keys. The mesh geometry looked a little messy but it wasn't really a problem after printing. 2. For the right half I tried under-sizing the key holders and lofting them together. Don't do this. Fusion360 can't take it and would freeze for 10s of seconds if you sneezed or looked at it funny. Lofts also fail if the start/end doesn't face each other perfectly and it's much more fiddly. (Enough writing for the day. To be continued...) ## Adjustability Not having made a keyboard before or even used many with a thum cluster, I knew I wanted some adjustability. It took me some time to find the right search terms and I spent a long time dreaming about what could be... <img src="https://img.heuristic42.com/img/f2253cd0d8b4.png" height="180" /> This is a 6-degree-of-freedom "stewart platform". How cool would it be to place a palmrest on something like that! <img src="https://img.heuristic42.com/img/dc76e3566c3c.png" height="180" /> This is a "magic arm", or aticulating arm. Turn one knob and the whole thing tightends up in one position. It'd be great not to have to fumble with screws with each adjustment. <img src="https://img.heuristic42.com/img/a136d7fe4a10.jpg" height="180" /> These are ball and socket arms. Well known examples are [Loc-Line](https://www.loc-line.com/) and [Joby GorillaPod](https://joby.com/us-en/gorillapod/). They're friction based, but if they can hold a 2kg camera they should be able to hold a thumb cluster. Sadly, I made the call that integrating these ideas would be complex to even try. It'd need a lot more space to fit the mechanisms, it'd add significant design time and would be yet one more thing that could go wrong, e.g. if it wasn't strong enough. Then an idea hit me. A strength of 3D printing is quick prototype iteration. What if "adjustability" was more just re-printing the keyboard? This would not work for the little 1x1 PCBs because the keyboard is not flat and after soldering the connections between them they are held in place by the plastic nubs between them. However, a middleground would be to be able to print separate adjustment blocks. E.g. spacers or mounting arms with different shapes. <img src="https://lh3.googleusercontent.com/pw/AJFCJaXz6hQ9VWWgxp9ki51975rbloFRkjPGxmBfhLNkWd0ILzp3WU0vIISavvnSGYyoQoUvao_vlisK5DMvpFsBPqpxKXhG9irowJeE86bvpBiu7GS4rp3pZ6zPEoR4S80B052hPUMDuUt4ssEHGDdV_NyDkw=w1326-h936-s-no" height="180" /> <img src="https://lh3.googleusercontent.com/pw/AJFCJaVZeh9BW88lHO6zdcL7AINN6N9HnUxm44S5iYbQcQmhV5HHAQjvgPeQgWJjqMm4R33ZahgkpSr4Gr0pxff2gkMm7FRW5_sDPfQJJGx1oor0njs75Zd4veJA8vtvPEqiYh2dQfrSoYRONwKm_na6abfRPw=w2468-h1858-s-no" height="180" /> I designed an interface that I could copy and paste to connect larger components to each other. Two for the main keyboard, one for the thumb cluster and one for the palm rest. I had custom cables with connectors to easily disconnect the thumb cluster from the microcontroller on the main board. <img src="https://lh3.googleusercontent.com/pw/AJFCJaV-gg3cCwq-YsKurSyd0EJIedOO4vQ0X8vCPgnwrV3XUEBGKmh0DrHfwseG06N9VA0bicFb4DhOHomPRtpyeRwSAdDUZ2uSbX8smF_H6gN-iv83b1zEZ45BHfP158U5yykDqvEFhTgCLUKtRUyWzSudbg=w2468-h1858-s-no" height="180" /> <img src="https://lh3.googleusercontent.com/pw/AJFCJaXFN6uxTLEkJ0X5DN1ks0NfwXaxoLbO83YWIIsAAaRqnMf5BlsmcI0jg9bBaamEiTpZCoFjuLNXlhqgcNxZiSPIKQwuiVz4Yf_Ar-SN1sceHbwVto0gJgHxyH9M-IXI3KyGXPzP8VRANgoszJZESU_w7g=w2468-h1858-s-no" height="180" /> Now in the event that the thumb cluster or palm rest was in the wrong place I could re-print a new frame with the parts in better positions. The images above actually show exactly that. Sometimes you just have to try it first. Soon I imagine we'll be able to project our hands into a VR environment and try things first. I had planned to have further smaller blocks for connections between each part and a bigger base frame, but never got around to it. Keeping in mind how a screwdriver can access fasteners during assembly is important. ## Thumb Cluster At first I wasn't sure if I wanted one. Now I'm totally sold on the thumb cluster idea. It took a bit to get used to but it was well worth the time investment. Thumbs are so strong and versatile they can be doing way more work than just hitting space. In fact the main reason I went to ergonomic and then split keyboards was from pain in the 5th finger from holding down Ctrl in an awkward position all the time. The MS Natural 4K and ergonomic boards were great for me because they reduced this strain, but a thumb cluster avoids it completely. Where should the thumb cluster be? The space bar on standard keyboards is good evidence of what can be comfortable to press. Many split keyboards such as ErgoDox have thumb keys on the the same flat PCB and plate, probably for design and manufacturing convenience. In this case the thumb presses the keys vertically down, like playing a piano. In contrast, [Dactyl-ManuForm](https://github.com/abstracthat/dactyl-manuform) based boards have quite an angle, making the thumb move with more of a gripping motion. My guess is these boards, like the Moonlander, are quite sensitive to hand size. Two rows of keys in a thumb cluster is great for being able to hold multiple keys down at once. In this case positioning them becomes more important because all keys still need to be able to be pressed individually. This can be helped by raising or tilting the back row forwards. The keys can also be a little closer to the hand, in which case the closer row is activated by curling and using the tip of the thumb. I can stretch a tenth on a piano so I thought larger distances would be OK. That said, this was a big unknown to me so I decided to make it adjustable, as discussed [above](#adjustability). The first thumb cluster design worked great in my head, but the position was too far away from the board, forcing the hand open up too much. Adjusting it didn't help --- it was big and bulky because it was a separate part and simply could not fit where I needed it to. Looking back, my thumbs rest pretty close to the B and N keys so keeping the thumb near there should have been the goal. I learned from this the second time around when making the right half. I'd put the keys even closer if I could. After living with the moonlander for a few months I have also found that 4 keys per thumb was a decent number. Maybe one day I'll try to get back to 6. If anyone's interested, the layout I currently have is: - Left: Ctrl, Shift, Alt, Layer1 (Holding Ctrl+Shift is easy; Tab is next to G, so Alt+Tab and Ctrl+Tab are easy) - Right: Super, Shift, Space, Layer1 (Holding Layer1+Shift is possible but I mostly use the left) - Layer1 gives me arrow keys under [I, J, K, L], Enter next to N and some more symbols on the left. My only complaint is space is needed on the left for gaming, so I have a separate gaming layer that I toggle. # Assembly TODO # Software TODO [1]: https://img.heuristic42.com/img/63ca4e6ab5e4.jpg [2]: https://img.heuristic42.com/img/aa3cf8699a7e.jpg [3]: https://img.heuristic42.com/img/86b71fbeecb5.jpg [4]: https://img.heuristic42.com/img/d0dbb0dc35c3.jpg
Toggle Preview
Edit message
*
A description of the changes made
Discard Draft
Save Draft
leave this field blank to prove your humanity
Flag
the thing you clicked
for moderator attention.
Reason choice:
Spam, promoting, advertising without disclosure
Rude, inappropriate, generally offensive
Too arrogant or demeaning to others
Other
Reason:
The reason for raising the flag
Error