As someone who types a lot everyday and suffers from repetitive strain injury, I'd like to have a keyboard that's tailored to my needs and help reducing the pain, features like flexible key mappings, ergonomic layout, cable-free would definitely help. I also want it to be portable and low profile thus it doesn't consume too much volume in my bag and I don't have to carry a pair of wrist-pads, it would also be nice the battery last long enough that I don't have to charge it every week, I am also a big fan of those encoders since they are nice to play with lol. So here is xobdox, the humble keyboard I designed for SeeedStudio XIAO mechanical keyboard contest
FeaturesSome features xobdox has to achieve the design goals mentioned above are:
- Reversible PCB for left and right halves
- 44/46/48 total switches
- Optional side push button
- Flexible battery configurations
- Configurable encoder location
- 1u or 1.25u key caps on *some* keys
Some other features that are quite common in the DIY keyboard community out there are also available on xobdox:
- Wireless (BLE) or Wired (USB)
- Ortho-linear (slightly modified) layout
- Hot swappable low profile switches (may add standard MX compatible switch support in the next rev)
- Encoders
- Power switch
Sorry, no RGB/Glow/Backlight/Display support (yet) because I want to maximize battery life
DesignOne of the things I want this keyboard to have is some flexibility in hardware configuration to accommodate different needs like battery life vs overall z-height, and below are some of the options available:
==Encoder==
One of two locations can be used to install an encoder, though not both of them can be used at the same time since they share the same GPIO pins.
ENC1 supports installing a knob up to 16mm diameter and ENC2 up to 25mm respectively.
ENC2 also supports encoders with push button (e.g. EC11)
==Battery==
Battery could be mounted on either side of the board.
If mounted on top, an idea size would be 25mm * 35mm * 50mm, such as a 502535 cell
If mounted on bottom, an alternative form factor of 18350 can be used, which also dubbed as the keyboard tilt support
Of course some combinations of Encoder and Battery are invalid due to their location conflicts
==Key caps==
Some key caps can use 1.25u/1.5u key caps in addition to the standard 1u size. Those are located on the edge columns and the last row.
First of all, the PCB is a reversible design, that way I can use the same PCB for both halves, just flip it over and populate components on the other side symmetrically.
Another requirement is to make the board as compact as possible, and well within the size of 150mm*150mm. This is party because that's the printing volume limit of my 10-year old 3D printer lol.
I also want the layout to be ergonomic and comfortable, so a ortholinear column it is, but with a slight modification where the further rows are spread out a little bit more, which seems more natural according to my very unscientific measurement of my fingers.
Now the components selection. Since I am making this for the contest, the available controller boards to choose from are all the XIAO series. I need the keyboard to be wireless so there goes SAMD and RP2040. The RISC-V chip (ESP32C3) could be interesting but the power consumption is too high, and I don't really need WiFi. Therefore nRF chip is the final choice, which is great since these chips do have one of the best BLE radio and its idle power consumption is pretty low.
A standard scan matrix is used for the switches. The matrix is setup to be 4 rows and 6 columns, that uses 10 GPIOs. XIAO board has 11 standard GPIOs, so far so good. But what about encoders? I do want it. Well luckily this specific XIAO board with nRF has two extra non-standard (in the sense of XIAO series) GPIOs for NFC that are exposed on the bottom side of the board, perfect, I will just use that.
PCB is designed in KiCad, and manufactured by SeeedStudio using their Fusion PCBA service. The whole process was smooth and shipping was fast. They also caught a design issue (a drill hole is slightly too small that will make the assembly a little bit hard) and I was able to fix it before it went to production.
A quick and dirty case is 3D printed, I also printed a low profile knob for the encoder, and a little side button cover. With keycaps installed now the keyboard looks a little bit better.
But can we do more? I found a slick knob that's CNC'ed anodized aluminum online, looks sharp, and who doesn't like red :) This knob feels great to the touch, though it is a little bit taller than the key caps, while my 3D printed knob is on the same height as everything else, so that's a little tradeoff :-(
The case color is lame, how about painting it in blue?
And let's add some random decoration for fun lol
So you said you want maximum battery life, and you even killed RGBs for it, how much battery life you are actually getting? While I have not test the power consumption of the board with an instrument, a quick estimation can be done using ZMK's power profiler, and the results are quoted here:
|Battery capacity |Central(Left) side |Peripheral(Right) side |
|-----------------|-------------------|---------------|
|400mAh | 1.3 | 4.8 |
|500mAh | 1.5 | 5.7 |
|1000mAh | 3.1 | 8.5 |
|2000mAh | 5.1 | 11.3 |
Isn't it impressive? Also, with the on/off power switch on the board I would imagine the number would go up if I switched it off every night, but even if I don't the number still looks awesome.
Here's a picture of a 400mAh battery installed on the top of the PCB.
And finally the firmware, yep, I am using ZMK, a Zephyr based wireless-first mechanic keyboard firmware, very nicely done, but the learning curve is slightly deeper than other open source projects mainly because Zephyr, but the good news is you don't need to learn Zephyr if all you want is to customize the keymaps, and the customization plus compiling and flashing are really easy with ZMK, as outlined here, you don't event need to setup any software environment on your machine, since there is a github action doing the compilation for you. Flashing the firmware is easy too thanks for the preloaded bootloader on XIAO board, all you have to do is download the compiled firmware (.uf2 file), connect the keyboard to the computer, hit the reset button twice, and it will show up as a mass storage device, then drag-n-drop the uf2 file over, you are good to go.
Comments