Close
0%
0%

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.

kamina-v2.zip

Gerbers

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

Download

kamina-v2.fzz

Fritzing design

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

Download

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

View all 7 components

  • 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, boot.py 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 = self.mx.value - 0x7fff + 200
            y = 0x7fff - self.my.value + 500
            if x * x + y * y > 4000 * 4000:
                if x > 0:
                    x = max(0, x - 4000)
                else:
                    x = min(0, x + 4000)
                if y > 0:
                    y = max(0, y - 4000)
                else:
                    y = min(0, y + 4000)
                report[1] = min(max(-127, x >> 10), 127) & 0xff
                report[2] = min(max(-127, y >> 10), 127) & 0xff
            else:
                report[2] = 0
                report[1] = 0
            if report[0] or report[1] or report[2] or report[3]:
                self.mouse_move = False
                self.mouse_device.send_report(report)
            elif not self.mouse_move:
                self.mouse_move = True
                self.mouse_device.send_report(report)

    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 6 project logs

Enjoy this project?

Share

Discussions

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