Promethium51 Keyboard Build Log

These are my design goals. Now I must say not everything is working perfectly for now.

Trackpoint click doesn't work over Bluetooth yet. Bluetooth in general is working decently when connection is really good, i.e. when used on top of a laptop. But, if signal is weak, the keyboard might hang after a few keystrokes.

I haven't verified battery indicator is working correctly.

Trackpoint is usable but a little flaky when using interrupts. Using busywait appears to fix the problem which indicates problem with interrupt version of PS2 support in QMK, but using busywait introduces all sort of other problems. Using USART is not an option as the clock pin is not broken out by the Adafruit controller.

Attachable palm rest is still under development.

Opensourcing the design is not done yet, will do that after some cleanups. Firmware is already part of QMK.

Use Case

This is the intended use case, to be used on top of laptops.

Of course it can be used 'normally' too.

Component Diagram

Cross-sectional diagram of some of the components. The sandwich layers from top to bottom:

Aluminum plates are going to be anodized for electrical insulation, as it will be really tight inside the keyboard.

All applicable screw holes are countersunk like this one.

Faceplate is an acrylic mirror sheet. Indicator legends are done by laser etching the reflective backing of the acrylic mirror, making the etched area transparent.

Reverse side of the etched acrylic mirror.

The Adafruit small White LED Backlight Module. Used here for logo lighting.

The Adafruit Backlight Module seen from reverse side. It is covered in electrical tape to prevent light from bleeding to the underside, and also to keep it in place while I'm working.

These switches will serve as Trackpoint buttons. Those are Zealio 78gs, same as with the rest of the keyboard.

Switch pins are bent because of the way I'm wiring. In my design there's only 5mm of clearance between switch plate and middle plate. With straight pins and without sacrificing features, the keyboard would need to be at least 2mm thicker.

Trackpoint mounting screw holes. This should accommodate every Trackpoint module variations out there.

Ugly countersinking job there. Probably will need to use drill press on overlapping holes for more consistent result.

The Adafruit Feather 32u4 Bluefruit LE is installed. Using plastic nuts here, but they will be replaced by steel ones later. I find plastic nuts too weak to withstand the force from plugging and unplugging the MicroUSB connector.

A latching switch button. These are surprisingly rare and hard to find in this size. It is connected by a pair of magnet wire and routed to the bottom the plate using two holes I prepared before.

This is what it looks at the reverse side.

Trackpoint module is now installed, and covers the switch button holes, which is why I had to do the switch button first 😅.

The Trackpoint module is harvested from a used Thinkpad keyboard.

The view from reverse side.

Both the Adafruit controller and Trackpoint module are firmly attached to the plate using bolts.

My 31337 soldering skillz. This is the bottom of Trackpoint module. I connected each pin using 32AWG magnet wire. I'm using the same magnet wire almost everywhere else.

External circuitry for the Trackpoint module. They are basically an RC circuit for Trackpoint reset pin, and two pull up resistors for communication.

These are put into a 3M foam double tape for preparation.

They are now placed on the plate. 3M foam double tape is awesome.

The Adafruit 32u4 works in 3.3V, but Trackpoint module and LED strip operate in 5V. So, we need these guys in red to convert voltages.

The right one is the Sparkfun 5V Step-Up breakout board, this will convert 3.3V and make 5V available to us. The left one is the Sparkfun Logic Level Converter.

The power lines are connected using thicker 26AWG magnet wire. I probably need to use thinner wires. 26AWG is too rigid that when something connected to it is loose, the wires would exert too much force on the solder connection points, making connection unreliable and harder to troubleshoot.

The Adafruit 32u4 BLE doesn't have enough pins for my needs. So, I'm using a HC138 3-to-8 decoder to free up 5 pins, but firmware will require custom matrix later.

Wiring the HC138 is done. I find it easier to wire it up before I stick it to the plate.

The decoder is now attached to the plate using the 3M foam double tape.

This converts signal from 3.3V to 5V and back again. It sits between the Adafruit controller and Trackpoint module, and later the RGB LED strip bus.

The Adafruit LED backlight module is also now connected to 3.3V.

The Sparkfun step-up breakout board, now connected to 3.3V input, and outputs 5V.

Messy stuff.

Diodes for matrix. I curled up the ends so they would connect better with magnet wires. Solder seems to prefer sticking to diode pins compared to magnet wire by far.

These diodes are there to connect Trackpoint buttons and make the buttons available to the matrix. Diodes are required because the buttons are also connected to the Trackpoint module (they also need another set of diodes there).

This is useful for faux clicky, and to make middle button act as a layer switcher, which is realistic considering the usage pattern of the Trackpoint middle button.

One diode is connected to the wrong pin, it should have been pin 6, not 5.

Physically, the keyboard has 12×4 matrix. But I'm arranging the keyboard to use 6x8 matrix logically in order to conserve precious pins. The 8 rows are connected to HC138.

In order to conserve vertical space, diodes and wires are routed around empty space between switches.

Wiring the 3 pins from HC138 to the controller.

The middle plate and a bunch of SK6812 mini RGB LED strip attached to it. Holes are there to allow Cherry switches to protrude, so we can have LEDs sit nearer to the switch and reduce overall height.

Some of you might notice that I have the switches put sideways. I arranged it that way so I don't have to connect more than 50 sets of pads. Now I can simply cut those in fours, and connect only about 15 of them. In other words I'm trading correct orientation of switches for my sanity 😅.

These LED strips are of 60 LEDs/m variety. They don't align perfectly with switches, but I don't mind. I wish they would make LED strips with the same spacing as keyboard keys.

WS2812 breakout board for indicator LEDs. WS2812s and SK6812minis are electrically compatible, so I can wire them in the same bus. Both GNDs seem to be already connected internally, so I don't have to make connection to one of it.

WS2812 boards are attached to the middle plate using 3M foam double tape.

Connecting RGB LED strip pads using magnet wire is a delicate business. They are only about 3mm wide. It took me maybe up to 30 minutes to connect a set of them.

WS2812 RGB LED strip breakout board, and a light cover to prevent light bleed to adjacent indicators. It is laser cut from a sheet of acrylic.

Testing RGB light strip using a Teensy and demo apps from the light_ws2812 library.

Indicator lights need some diffusion. Without diffusion they won't look as good.

Diffuser here is Rosco #3026. But diffuser can be easily obtained from everyday objects, like some plastic bag.

Light strip connection are complete. I keep the wires in place by paper adhesives.

I connected both ends of the RGB LED bus to Vcc and GND. So there are 2 lines of Vcc, 2 GNDs and 1 data, all routed to the bottom of the plate where they are connected to header pin receptacles.

This is the bottom view of the middle plate. There is piezo buzzer connected to header receptacles. The other 3 are connections from the RGB LED strip bus.

I have a much bigger piezo buzzer on the other side. I plan only to use one of them, but need to hear which one sounds better.

Cables with male headers are used to connect components on switch plate and to those attached to middle plate. These cables are relatively huge, but I found magnet wires too fragile for this purpose. I need something that will last more than a few times of connection-disconnection routine.

These three cable are used to connect to the RGB LED strip. Later, I will add another pair for the piezo buzzer.

Cable routing. Evil stuff.

The black square thingy is the battery. It needs to be less than 3mm thick.

This turned out to be far more cramped than what I planned before. So I dremeled out some of the material from the bottom acrylic plate.

And the other side.

I have to redo the cable routing all over again if I have to reach the main chamber. And I did that OFTEN during development.

Bottom of the keyboard after assembly

The four opposing holes are intended for 3rd party feet. So we got options for flat, positive inclination, negative inclination, or raised.

Top middle hole is the reset button hole.

Countersunk bolt in matching silver color next to a polyurethane feet.