Intro
I've been using a Cornish-Zen for quite a while now. I bought in during R1 and it's a neat keyboard. But I have two issues with it:
Displays are still useless in my opinion, but this time the eInk blocks some actions. If the keyboard goes to sleep, it takes 5-10sec because the eInk refreshes several times. Without eInks that usually takes 2-4secs.
To combat this, I increased the sleep timer, which doesn't help the mediocre battery life. The 180mAh battery lasts 2-3 weeks with my usage, and I'm used to >800mAh keyboards.
On top of that the battery reporting is inaccurate, after a week the Zen will report 10% and then last another two weeks. So a lot of times one side (weirdly the right side) will just die on me while using it.
Because of this, I've been thinking more and more about going back to my Microdox Bud, but not without improving it first.
Goals
Spacing
The thing I liked the most about the Zen is Choc spacing. The Microdox has MX support, that's why it needs MX spacing.
Changing the spacing doesn't just impact the plate, it also changes the PCB, so it's not a small update.
Solution:
3d print a new plate with the 17x18mm Choc spacing and handwire it
Stagger
The stagger on the Microdox is moderate, but I prefer something more aggressive.
I really liked the amount of stagger on the Draculad, so that's what I'll be stealing. It's more aggressive than the default Microdox and less aggressive than the Kyria.
Solution:
I'll have to do design a plate anyways, easy enough to be a bit more aggressive
Connectivity
The Microdox Bud is an alu case, and ever since replacing the old FR4 case I've had connectivity issues.
The right side would sometimes just not send anything to the left side until I reboot it, mostly when I place stuff between the halves.
It wasn't often enough to bother me that much, but if I'm already working on it, then why not fix it.
The right MCU faces downwards, so that would be my best guess as to why they lose connection. The controller facing downwards into the alu case just isn't helping the signal strength.
Solution:
replace the nice!nano v1 with v2s, and have both MCUs face up
Protection
The MCU on the Microdox sits on top of the plate. Boardsource ships kits with an acrylic cover, but they get in the way when using Chocs.
I don't think I've damaged the controllers while using the keyboard (could be that that's the reason for bad connectivity), but it would be nice to not have them that exposed.
Solution:
mount the MCU underneath the plate
Power switch
My Microdox Bud has a power switch already, right underneath the USB C port of the MCU.
I worked well enough to quickly switch the halves on and off, but the switch only stuck out 1mm or so.
Solution:
mount the power switch on the plate, not in the case
CADing
The plate of the Microdox Bud is incredibly simple, just a rectangle with two different chamfers.
Putting some rectangles for switches into it is also not difficult.
Sketching a rectangle; setting the right dimensions for the stagger, cutout, spacing and screws; extruding; chamfering and done.
But in reality, no CAD survives first contact with the 3D printer. It'll take a few iterations to iron out the kinks.
aPrototype 1
Issue 1
Quickly realized that 1.2mm thick plastic is not that sturdy.
Hitting keys in the middle would bend the whole by a few millimeters.
Having the 830mAh battery in the middle of the case helped, but there was still some flex around it.
Solution:
Supports on the bottom of the plate
Issue 2
Then I noticed that the controller wasn't in the right position.
I had to move the MCU a bit to get the Draculad's pinky stagger, turns out I moved it a bit too much.
On top of that, the Bud case has a 2.5mm thick, meaning I can't mount it directly at the edge of the plate if I want to keep the controller underneath it. Recessing the MCU 2.5mm inwards solves this issue, plugging it in shouldn't be an issue though.
Solution:
move all keys 2mm further up and recess the MCU 2.5mm inwards
Issue 3
With the first iteration, all the pins are only reachable from underneath. Great for most pins, but I still want access to GND and RST. I don't intent to mount a dedicated reset switch, but I still want to flash keymaps without having to open the keyboard every time.
Solution:
make a 5.5x2.5mm cutout for those two pins
Issue 4
Last and not least, the position I had planned for the power switch was a no-go.
The inside lip of the alu case meant the power switch sat too close to the switches, making it just as difficult to reach as the old position underneath the USB C port.
Solution:
move the switch to the gap between the thumb-row and the middlefinger-column
Just gained 2mm there, and the MCU doesn't protrude anymore. The 3d print finishing tool was pretty handy for this kind of stuff, melting holes into the plastic is fast, and it's possible to push stuff into the still malleable plastic.
Prototype 2
The second iteration already looked a lot better.
The power switch now has a cutout, and two plastic pins that I can melt down later to keep it in place. This isn't really necessary as the power switch already bottoms out in the case, but better safe than sorry.
The MCU cutout is now at the right position, and the backcover that keeps it in place works well.
I was afraid that it'd be difficult to remove the support material, just because the layers don't have very much to hold on to.
But they're reasonably strong, removing the support material was a bit tricky, but I managed to keep everything in one piece.
The standoffs also worked well enough, there still is some flex if I push hard enough. But I use gChocs with O rings, so during use I never apply that much force.
Final issue
The only thing that didn't fit perfectly was the spacing. The nice!nano's PCB is 1.6mm thick, which is what I used in Fusion360.
But the tolerances were a bit too tight and getting the MCU in was rather tricky, especially since the top side has some incredible tiny SMD stuff on it.
For the final print, I'll give it another .3mm of clearance, just so the MCU fits inside easily.
I'll use some double sided tape to fill some of the excess space, and on top of that it'll help keep the controller in its position.
Endresult
Now onto the final print. I'll use Jake3D's Yellow PLA this time, to match my MT3 Serika set. Always have some Serika on the macropad and on one of my flavor of the month
keyboards.
Another full-on black keyboard would be boring, so yellow gives the build a bit of color.
Power Switch
Mounting the power switches was pretty simple with the design I put into the CAD.
Print issues
The print itself printed well, but the perimeters aren't that clean. It's not a huge issue around the switches, but it's visible around the power switch.
On top of that, the plate dimensions could've still been a bit larger. The plate wiggles around .8mm if it's not screwed in.
It's not an issue once it's screwed down, but there is still a visible tiny gap between the plate and the alu frame.
Pinout issue
Like always, one tiny detail is off. This time it's the pins on the left side.
Didn't think too much about the fact that the MCU on the left side is flipped 180deg, which meant the reset pins weren't accessible, and some of the row pins were hidden underneath some plastic as well.
Got my trusty 3d modeling tool and melted some of the plastic away, it's now usable, so all good.
But it means the CAD design needs some minor changes.
Hand wiring
The Microdox pinout
All the improvements I made to the Microdox didn't change anything fundamentally.
I can reuse the old firmware by maintaining the wiring of the original PCB.
To do that I need to figure out how the original is wired, in ZMK that's fairly easy.
Each keyboard is a so-called shield
, if we open the Microdox-folder we'll see a bunch of config files. Somewhere in there the pins are buried.
The microdox.dtsi contains the rows and the diode direction.
The microdox_left.overlay and microdox_right.overlay contain the cols for each side.
The pins within ZMK are not the ones we'll find on the controller's pinout. ZMK adds this layer of abstraction for each controller, that way shields
and boards
(controllers) are independent.
To get the actual pin numbers we'll need to check the nice!nano config files, which is the same as a Pro Micro since it's designed to be a wireless drop-in replacement for it.
But that isn't the last step, the labels on the nice!nano itself aren't the Pro Micro ones, for that we'll need to reference the nice!nano pinout schematics.
Left side
ZMK Pin | Pro Micro Pin | Nice!Nano Pin | |
---|---|---|---|
Row 1 | 16 | D16 | 010 |
Row 2 | 10 | D10/A10 | 009 |
Row 3 | 8 | D8/A8 | 104 |
Row 4 | 9 | D9/A9 | 106 |
Col 1 | 21 | D21/A3 | 031 |
Col 2 | 20 | D20/A2 | 029 |
Col 3 | 19 | D19/A1 | 002 |
Col 4 | 18 | D18/A0 | 115 |
Col 5 | 15 | D15 | 113 |
Right side
ZMK Pin | Pro Micro Pin | Nice!Nano Pin | |
---|---|---|---|
Row 1 | 16 | D16 | 010 |
Row 2 | 10 | D10/A10 | 009 |
Row 3 | 8 | D8/A8 | 104 |
Row 4 | 9 | D9/A9 | 106 |
Col 1 | 15 | D15 | 113 |
Col 2 | 18 | D18/A0 | 115 |
Col 3 | 19 | D19/A1 | 002 |
Col 4 | 20 | D20/A2 | 029 |
Col 5 | 21 | D21/A3 | 031 |
With those tables, we have everything we need to know for the soldering.
Soldering
Any wire will do the job, I gave bare copper wire a shot this time around.
Always felt like stripping the insulation is anoying since I'd sometimes cut too deep and tear the wires apart.
But the solder wouldn't stick to the wire, even after roughing up the surface.
That's why I went back to normal 24awg wires after doing the rows. Only this time I used a xacto knife, did a tiny cut and then used my finger nail to expose a few mm of wire.
Worked better than using a wire stripper.
Result
My Microdox now is a combination of the things I liked about other keyboards:
- Zen's Choc spacing
- Draculad's stagger
- Microdox Bud case with a decently sized battery
- easily accessible power switch
- plate color goes well with my MT3 Serika set
Files
For anyone interested, here are the Fusion 360 and .STL files