Kamina Keyboard

A low-profile 65-key ergonomic keyboard

Similar projects worth following

So how is this better/different than an off-the-shelf keyboard?

  • Mechanical switches, but that's not that special of course.
  • Low-profile, which is much rarer. You can (finally) buy some low-profile mechanical keyboards, but the have this extra height from the case and key caps. This one is as thin as possible, just the lowest key caps, the low-profile switches, the PCB and some rubberized stickers for good grip.
  • Ortholinear, which already makes it unique. As far as I can tell, there are currently no low-profile ortholinear keyboards you can buy.
  • One-piece split layout. For that sweet ergonomy.
  • Narrow, for easy access to all keys without moving your hands.
  • Now with a number row.
  • Programmed with CircuitPython, for easy customization.

Otherwise there isn't much experimental stuff going on in here, like in my previous keyboard projects. In fact, I simply took what I learned from them, and applied it in the simplest way possible.



Zip Archive - 1.21 MB - 12/22/2023 at 22:37


EasyEDA Design Files

Zip Archive - 1.56 MB - 12/22/2023 at 22:36



Zip Archive - 1.27 MB - 12/02/2020 at 10:07



Fritzing design

x-fritzing-fzz - 524.51 kB - 12/02/2020 at 10:06


  • 1 × ATSAMD21E18A-MU
  • 1 × AP2112K-3.3TRG1
  • 2 × 1µF 0604 capacitor
  • 65 × Diode
  • 65 × Kailh Choc Switch

View all 7 components

  • Kamina 3.1

    deʃhipu12/22/2023 at 22:51 0 comments

    As mentioned in the previous log, I decided to do one more version of this keyboard. The main change is that in place of a SAMD21 bare microcontroller, I'm now using a Raspberry Pi Pico or compatible microcontroller developer board. This makes this keyboard much easier to assemble and program by people who are not comfortable soldering tiny QFN footprints or flashing a bootloader over DAP.

    Other changes include optional hot-swap sockets, breakable last column, and four additional keys at the middle of the board. There is also a technical change: it's no longer a single PCB, but instead you need two identical PCBs, one half flipped, to make the full keyboard. This way it's much cheaper to fabricate the PCB.

    I did this, because I've seen a lot of interest in this kind of a middle ground between traditional keyboards and fully ergonomic ones.

    Note however, that because of the hot-swap sockets, you can easily turn this into a proper ergonomic board when you feel braver:

    To assemble the board, you still need to solder all those SMD diodes and hot-swap sockets, and to solder the dev board in place (or pins and a socket, if you want it to be removable, like in my examples). Version 3.0 also needs a bodge between the top jumpers on both sides, but the version 3.1 that I'm publishing already has that fixed.

  • Working on Version 3

    deʃhipu12/12/2023 at 00:40 0 comments

    We had recently a keyboard enthusiasts meetup in my city, and a surprising number of people were interested in the Kamina v2 keyboard – it seems to be a good stepping stone between a traditional keyboard and a proper ergo board. However, the fact that it uses a bare SAMD21 chip, which was hard to obtain due to chip shortage, has a scary small-pitch QFN footprint and requires a special programmer to flash the bootloader makes it difficult to build by beginning electronics hobbyists. Or at least the less confident ones.

    I also noticed that if I made the extra column breakable, it could easily be converted into a proper ergo board, very similar to the Klap v4 keyboard I'm using as my main driver. Especially if I made the switches hot-swappable, it could be a very good intro into the world of ergonomic keyboards.

    But how to make it easier to assemble? Simple, just use the raspberry pi pico microcontroller board for the brains, similar to how I did it for the #Steno Keyboard project. It's cheap, and there are easily enough pins. You can even get clones with additional features, like a USB-C connector or a small display! The rest is just soldering the hot-swap sockets, and all the diodes. Shouldn't be too hard.

    I started with some mock-ups in Inkscape. I initially want to also make the top row breakable. Oh, and I forgot, I also want to make it so that you use two of the same PCBs, one flipped over, so that they are cheaper to manufacture. Here is one of the steps:

    I also decided to not use Fritzing this time, as the stupid "donation" thing makes it difficult for people to download and install it. Instead, I switched to EasyEDA, because it runs in the browser and so people don't have to install anything. It also makes it very easy to order the boards, which is also a big plus. I spent a day fiddling with the design, and this is what I came up with:

    There is a bunch of 0Ω resistors, which should only be soldered on the bottom of the board, leaving the ones on the top open – to avoid shorting the pins of the microcontroller board that lie opposite each other. The five-pin header provides additional structural strength, and shares the row lines between the halves. The last column is breakable, and I even added two more keys in the center of the board, for those of us with exceptionally dexterous thumbs.

  • MBK Legend Glow Keycaps

    deʃhipu08/19/2021 at 13:52 0 comments

    While I still wait for the group buy for the regular MBK Legend key caps to finalize (they are now estimated somewhere around the end of this year), I noticed that MBK Legend Glow became available — not as a group buy, but as a product you can simply buy. So I went ahead and bought them as soon as they appeared in any European shop. They just arrived today.

    Very nice box and all that, but what about the key caps? As all MBK key caps, they are very nice, low-profile, with spherical profile for your fingers. The homing keys have a bit of a straight edge on the bottom, instead of a nub, but you can identify them by touch all the same. This set is called "glow", because it's doule-shot keys, with translucent legends, so that if your keyboard has backlight, you can see the legends glowing. Kamina doesn't, but they are decent keys, so I'm going to use them anyways.

    Apart from the usual alphanumeric keys and a bunch of modifiers both in text and symbol versions, you are also get individual digits (for a number pad?) and a bunch of 1.5U and 2U keys. There is also a set of alternate homing keys for weird layouts. A little bit of surprise was the lack for caps for "+" and "-" keys (both regular and number pad), as well as the "Ins" key. For now I replaced them with other random keys.

    I'm still getting used to the new shape, but they feel pretty good!

  • Update

    deʃhipu07/28/2021 at 18:53 0 comments

    I'm still using this keyboard as my everyday main keyboard, and of course there has been some development in the mean time.

    I've made two more modules for the center, and a "blank" one to just make it look better. I also replaced the buttons on those modules with buttons specifically made for mice, so they have the exact feel and click you know from clicking your mouse button. It seems like a small thing, but actually it's a huge improvement. The module with the silver knobs is a joystick and a scrollwheel, and both can be pushed down for clicking too. They are not particularly convenient.

    The last thing is a "trackpad" module from a smartphone that I am working on at #Home Button for Keyboards project — when I get it working, it will be another module for this keyboard.

    There have also been some other changes. I swapped the Ins and Del keys with the bracket keys eventually, so that they are on the same hand as on regular keyboard — that works better for me for copying and pasting. I also moved around the media keys (used witth the Fn key) to make them easier to remember. Oh, and Fn+Tab is now Compose.

    I also added the improvements that came with the new version of CircuitPython — matrix scanning done in C using the keypad module, disabling the USB drive and UART console unless a key was pressed when booting, and custom HID bitmap NKRO reports.

    Finally, I've also sent one spare PCB to a person interested in building this — haven't heard what they built with it yet.

    One thing that I hoped to do was replacing the keycaps with the MBK Legend ones, alas, the group buy is delayed and they are still working on producing them — the current estimate is shipping by the end of the year.

  • Module Code

    deʃhipu02/17/2021 at 21:55 0 comments

    I finally sat down today and wrote the firmware for that first module. It's rather simple, the joystick does mouse movement, with some dead zone in the middle (I can still improve the dead zone calculation, but it's good enough), the knob does scrolling (and I should add the ability to change volume using it with some function key), and the buttons are mouse buttons.

        def send_mouse_report(self):
            report = bytearray(4)
            report[0] = ((not self.lmb.value) << 0) | ((not self.rmb.value) << 1)
            knob = self.knob.position
            if self.last_knob != knob:
                report[3] = max(-127, min(127, knob - self.last_knob)) & 0xff
            self.last_knob = knob
            x = - 0x7fff + 200
            y = 0x7fff - + 500
            if x * x + y * y > 4000 * 4000:
                if x > 0:
                    x = max(0, x - 4000)
                    x = min(0, x + 4000)
                if y > 0:
                    y = max(0, y - 4000)
                    y = min(0, y + 4000)
                report[1] = min(max(-127, x >> 10), 127) & 0xff
                report[2] = min(max(-127, y >> 10), 127) & 0xff
                report[2] = 0
                report[1] = 0
            if report[0] or report[1] or report[2] or report[3]:
                self.mouse_move = False
            elif not self.mouse_move:
                self.mouse_move = True

    Not much to say, really. 

  • First Module

    deʃhipu02/08/2021 at 18:15 0 comments

    Remember how I tricked myself into not diving into the rabbit hole of what could be possibly placed in the middle of this keyboard by making an expansion module header in there? Well, it would be nice to actually have a module to place there. So I designed this:

    It's a basic set: a joystick for mouse emulation, two buttons for mouse clicks, and an encoder knob for scrolling. The PCB was super-basic:

    I also placed some LEDs for "backlight" in there, but since I ran out of pins to control it, I just added a simple mechanical switch:

    It doesn't work too great:

    Probably side-mounted LEDs would have been better.

    I still need to write the code for the encoder, but since CircuitPython has a ready library for it, it shouldn't be too hard.

  • Promises are Made to be Broken

    deʃhipu11/25/2020 at 14:49 0 comments

    I promised the last one Kamina will be the last try for my ultimate keyboard, and it was indeed so close to the ideal that for a time I considered the project done. However, I found just two little things that could be improved, so inevitably, when I was ordering PCBs, I added this one more to the order:

    So what changed? First, there is one more column on the right hand side of the keyboard, so that I can have my ";:" and "+=" keys on the base layer. Second, there is an extension header in the middle, which can be used to add a variety of modules, from a PSP joystick, through an encoder with a knob, a display, or even exotic stuff like a gesture sensor.

    I moved all the switches and components to the new PCB and amended the layout:

  • Last One, Promise

    deʃhipu11/04/2020 at 21:24 0 comments

    So I finished #Turbot Keyboard and while it is a fine keyboard, it turned out to be less convenient to me than the #Dorsch 48k Keyboard. The reason for that is that it's too big, meaning that I have to move my hands to reach keys like Esc or Backspace. Turns out that a large part of the magical touch-typing improvement I got with the Planck layout is not from it being ortholinear (though it certainly helps a lot), but from it being so small, that you don't move your hands sideways.

    Once I realized that, the solution is obvious: I need to take the Planck, break it in two so that I can have my hands farther apart, and add a number row, so that it's easier to program with it. So I went to the keyboard layout editor and made this:

    From there it was the usual process, I made a PCB with a SAMD21 MCU on it, and ordered it:

    The switches were on order already. I also found another set of keycaps that are compatible with the low-profile switches, and ordered them too. Today everything arrived all once, so I began assembling.

    The keycaps turned out to be a little bit too high and too small for my preference:

    So I swapped them with the PBT keycaps I had on my #Flatreus Keyboard:

    Then I had to use a few transparent key caps I had lying around, because I didn't have enough of the PBT ones:

    Once I had the keyboard all programmed and working, and I knew it's going to replace my Planck as my daily driver, I decided to swap the key caps with the Planck, so that now both of them have consistent keycaps:

    And that's pretty much it. I'm using that keyboard right now and it's great so far. I will probably keep it for a long time.

View all 8 project logs

Enjoy this project?



Tengux wrote 10/05/2021 at 12:14 point


I'm very interested in this keyboard, can you point me the way to make me one ?

My bigest problem is to solder the required small components. How ?

Sorry if it bother you or if it's easy

  Are you sure? yes | no

agilum wrote 12/10/2020 at 14:28 point

OMG, those polish commentators are never satisfied with Your ideas and results. Is a pity :(

  Are you sure? yes | no

deʃhipu wrote 12/10/2020 at 16:46 point

It's cultural, can't help it. It's how we express appreciation.

  Are you sure? yes | no

ostropest wrote 11/06/2020 at 09:20 point

brak podkładek z przodu, złożenie na sztywno utrudnia transport, może jakieś zawiasy wstaw?

brakuje mi podswietlania, które by coś dawało.  np. dioda do pokazywania czy wcisniety capslock, ale dlaczego nie dioda do pokazywania czy dziala ethernet? albo jaka jest godzina?

na środku aż prosi się dodać modyfikator do brakujacych klawiszy lub touchpad.

  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