Dorsch 40k Keyboard

A 40-key chocolate-bar mechanical keyboard.

Similar projects worth following

Continuing my quest for a usable low-profile mechanical keyboard. After making #Flounder Keyboard I learned a little bit more, so this time I won't make the same mistakes:

  • the sunken Kailh choc switches have really bad feel, I will use regular choc switches this time,
  • no more messing with key spacing, use standard 0.75" key spacing this time,
  • smaller and cheaper by only having 40 keys,
  • no long keys, no problem with stabilizers,
  • grid layout, so all keys can use same size key caps,

But I wouldn't be myself if I didn't also use that opportunity to experiment a bit, so I'm going to use an experimental hold/tap system for the modifier keys.

gerbers with LEDs

Zip Archive - 841.43 kB - 09/21/2020 at 11:29



fritzing design with LEDs

x-fritzing-fzz - 424.58 kB - 09/21/2020 at 11:29



fritzing design

x-fritzing-fzz - 316.79 kB - 08/12/2020 at 15:58


Zip Archive - 800.59 kB - 08/12/2020 at 15:58


  • 1 × ATSAMD21E18A-MU microcontroller
  • 1 × AP2112K-3.3TRG1 low drop-out voltage regulator
  • 2 × 1µF 0604 capacitor
  • 1 × USB cable
  • 40 × Kailh chocolate switch

View all 8 components

  • Fork

    deʃhipu7 days ago 0 comments

    I moved the 48k (actually 47 keys) version to #Dorsch 48k Keyboard because it has a different bill of materials and code.

    I also just uploaded the design files of the 40k version with LEDs here.

  • How Thicc is your Keeb?

    deʃhipu09/17/2020 at 12:12 0 comments

    I also decided to shoot some thickness comparison photos:

    From back to front:

    • your standard mechanical keyboard
    • low-profile mechanical keyboard from a shop
    • Dorsch 48k
    • Flounder

    And a close-up of comparison with a standard mechanical keyboard:

    So yeah, I think there is a definite improvement.

    Why do I need a low-profile keyboard, though? It's simple. Ergonomics. You really don't want the heels of your hands to be pressing down on the table, leading to RSI, CTS or a number of other TLAs. With a low enough profile, your hands can just lie flat on the table without any special wrist rests or other contraptions, and be flat enough that it's the palms that bear the stress and not the heels.

  • Revisions

    deʃhipu09/17/2020 at 11:41 0 comments

    After using the keyboard for a few weeks (and getting much better at touch-typing in the process) I got very much used to it, so I was hesitating if I should scavenge it and rebuild it with the new PCBs that just arrived. And if I should, then which one?

    In the end I decided to do it, and also to scavenge the #5plit Keyboard Clone, so that I can build both versions. The 48-key version went first:

    Nothing surprising in here, I just had to edit the layout matrix to include the two extra columns, and it just works. I'm using it right now, and it works great for me. It's definitely a keeper. I didn't even need to add a stabilizer under the space. Oh, of course I reversed the D+ and D- labels for the USB cable, but that's easily fixed.

    Then I came back to the smaller one, but with LEDs. Turns out that soldering by hand a string of 40 SMD APA102 LEDs is more work than I anticipated:

    After several hours of looking for shorts, re-soldering, fixing bad joints and generally having a bad time, I finally got them all to light up:

    And no, I have no idea why the last 6 of them are brighter. Probably a glitch in the matrix. You get it? Hahahaha. Anyways...

    Adding the switches and some transparent key caps was just a formality:

    Right now I left it with the keyboard code, but I'm thinking I could use it as a macro keyboard instead, with each key just sending a unique key combination when pressed. And of course with some fancy LED animations. But that's just all code.

    I was considering putting those PCBs on Tindie as kits, with all the elements except switches and cable already soldered, but after debugging the LEDs, I think I will pass on that. I might do it with the bigger one without the LEDs, though. I wonder if there would be any interest in that?

  • Final Code

    deʃhipu09/11/2020 at 15:17 0 comments

    In the process of moving the shift keys around, I have simplified the code somewhat, made it better at handling some corner cases, and fixed some bugs. Just in case someone wants to make a similar build, I'm putting it below. In the future it might grow into a proper CircuitPython library perhaps – then it will get its own repository.

    Read more »

  • Better Shifts and More Variations

    deʃhipu08/30/2020 at 22:23 0 comments

    I'm using this as my main keyboard now, and there are still three issues that I struggle a bit with. The first one is with the shift key — it's too low and only one, which means it's awkward to press it with certain key combinations. Second problem is with the Ctrl key not being in the corner, and the last with the Backspace being in a completely wrong place, next to the Space. I managed to solve the first two today by remembering that I can do hold/tap with any key, not just the bottom row, and by moving the Shift to the Z and Quote keys, moving Ctrl to the freed place, and adding a Super key. The new layout now looks like this:

    But before I came up with this, I tried to fix it by adding two more columns for the shifts and other control keys, arriving at something very similar to the Planck layout:

    Note that this keyboard no longer needs the hold/tap mechanism, as it has enough keys for modifiers to have their own dedicated keys. Anyways, I designed and ordered a PCB for this new layout, so I might be trying it later this year:

    Another alternative design for this keyboard (which I designed but didn't order yet) is a version with RGB LEDs under every key. Someone observed on Twitter that it would be nice to have a Python-programmable keyboard with lights that you could control with your own program.

    It was a bit of work to fit that string of 40 APA102s on there, but I managed. I'm not sure if I want to actually build that version myself, though — I guess I don't enjoy keyboard lights so much, I'm a boring person. Maybe if it was programmed as a MIDI device, which is perfectly doable with CircuitPython…

  • Small Fixes

    deʃhipu08/28/2020 at 20:38 0 comments

    After using the keyboard for a little bit, I added a few little fixes. I already mentioned moving some of the symbols keys to make them easier to access — the apostrophe is more common in English than the question mark or slash, so it makes sense to make it its own key. I also played a bit with key caps, just to make it a little bit nicer:

    The second fix is the ability to use modifier keys with your mouse. Previously, when you held down a top/hold key, it wouldn't do anything until you released it or pressed any other key with it — then it would decide whether to send the modifier key code or the regular key code. But that makes it impossible to use this keyboard for things like ctrl-clicking or shift-dragging with your mouse. I initially tried to add a timeout to the hold function, but that didn't work very well — too slow for fast mouse clicking. Finally I made it so that it sends the modifier key as soon as you press the hold/tap key down, but if it turns out that you meant to tap it, it will release the modifier key before sending anything else. That way you get some extra spurious modifier key presses, but they normally do nothing, so it should be fine.

  • Done

    deʃhipu08/28/2020 at 17:32 0 comments

    They switches and keycaps arrived while I was on vacation, but now I'm back and I assembled it all.

    All switches nicely soldered, and straight:

    Then I just inserted all the keycaps. Of course I had to be a little creative about the bottom row and the enter key, since those keys mostly didn't come in 1u versions.

    You would think that after adding the switches the code that I previously wrote would just work. Well, that would surely be something, but no — there were some inevitable minor bugs. Then, after fixing them I tried it for a bit, and decided to rearrange the keys a little bit to expose the more commonly used symbols better.

    I'm still having a couple of problems. The Shift key is too low, and the backspace takes some getting used to. I also discovered why hold/tap is usually done with a timeout and not like I did it — I can't use the modifier keys with mouse clicks as it is now. I will add a long timeout for that.

  • Code

    deʃhipu08/15/2020 at 12:39 0 comments

    I know it's not pretty, but it works. Mostly. For now.

    Read more »

  • Design Files and Schematic

    deʃhipu08/12/2020 at 16:01 0 comments

    I have now fixed the two problems I found with the PCB, and uploaded the Gerbers and the Fritzing files. The keyboard uses the same bootloader and CircuitPython firmware as the #Fluff M0 — that's the convenience of having a board that breaks out all the pins.

    I'm still working on the Python code for the mod keys, of course — I will post it separately when it's ready.

    Here's the schematic of the keyboard:

  • The PCB and Bodges

    deʃhipu08/12/2020 at 15:56 0 comments

    I have now assembled and programmed the PCB:

    There are only two problems with it: the diode next to the "shift" key is shorted (because I moved it and forgot to move the trace), and the cathodes of LEDs are not connected to GND (because I forgot). Nothing a few bodges couldn't fix, though:

    I have the basic firmware copied from the #Flounder Keyboard, and it works. Now I only need to implement the mod key magic, as described in the previous log, and it should be ready to be used. Oh, and of course I'm still waiting for the switches, but I'm confident they will fit because I have one left over from previous projects.

    Finally, I decided to not try to carve up the switches to make the USB socket fit, and instead opted for a fixed cable.

View all 13 project logs

Enjoy this project?



Kosma wrote 09/11/2020 at 12:21 point

Dla mnie trochę za mała taklawiatura, szczególnie w wysokości. Polecam też rozważyć wąskie klawisze jak chinskie ajazz. ak33

Jednocześnie proponuję by wyjść na zewnątrz klawiatury. Gdy mamy komórke to nie dziwią nas klawisze głosności na zewnątrz. Tak samo tu, mógłbys na zewnątrz zrobić jakieś klawisze lub potencjometry. jak w sony UX50 albo jak w konsolach, gamepadach.

Moim marzeniem jest by ktoś w końcu przeniósł część informacji z paska zadań na klawiaturę. Najłatwiej przenieść ekrany. Każdy system ma możliwośc virtualnych ekranów, np. w3m ma ich cała masę. Dlaczego by nie przenieśc informacji na którym aktualnie ekranie jesteśmy z paska zadań do klawiatury. Po drugie dlaczego informacja o sieci nie mogła by być na klawiaturze? albo zegarek i głośność, powiadomienia, wylogowanie. To czasem sa informacje a nie tylko klawisze, ale niewielka informacja (w ekstermalnej sytuacji podświetlenie klawiszy) pozwoliło by wywalić cały pasek zadań i uwolnić przestrzeń roboczą. Pomyśl nad tym by klawiatura mogła nieść więcej informacji.

A jeśli było by w niej miejsce na jakieś SoC to mielibysmy np. raspberry pi zero z dyskiem. W pracy i w domu klawiatura ma ten sam dysk, możesz nosic git-a ze sobą. Nosić prosta bazę czy środowisko. Jeśli nie używasz tej klawiatury z tabletem to rewelacyjne rozwiązanie, jeśli używasz, to odpowiednimi zworkami ustawiasz by nie uruchamiać komputera a tylko sama klawiaturę.

  Are you sure? yes | no

deʃhipu wrote 09/11/2020 at 12:42 point

A dla mnie jest w sam raz, własnie dlatego, że mała wielkość uniemożliwia mi przesuwanie rąk i wymusza poprawne pisanie.

Twoje pomysły są bardzo dobre, na pewno będę je brał pod uwagę kiedy tylko będę pisał własny nowy system operacyjny na dedykowany własny komputer — wtedy będą jak znalazł.

  Are you sure? yes | no

AVR (lordKiCAD) wrote 08/30/2020 at 22:03 point

love your concept of low profile mech keyboards, these will be great for all the open source laptops and luggables people have been building. Also that PCB layout is tight and clever, great work!

  Are you sure? yes | no

deʃhipu wrote 08/30/2020 at 22:27 point

Thank you. I was actually considering using this in a "cyberdeck" build, but then it turned out to be so comfortable that I actually use it as my main keyboard now.

  Are you sure? yes | no

AVR (lordKiCAD) wrote 08/30/2020 at 23:13 point

I like the sound of that! Might have to order a board and solder one up myself.

  Are you sure? yes | no

deʃhipu wrote 08/31/2020 at 08:00 point

It might be just me, but being ortholinear and having no number row helps me practice touch-typing.

  Are you sure? yes | no

danjovic wrote 08/08/2020 at 00:13 point

Nice arrangement !

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates