Page 1 of 1

Promethium51 Keyboard Build Log

Posted: 27 Apr 2017, 21:57
by priyadi
Hi fellow Deskthorian! Let me share my build log of my keyboard, dubbed Promethium51.

Project page: https://promethium.keyboard.id

Image

Those 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.

Warning: lots of pics follow.

Part 1:
Spoiler:
Image

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

Of course it can be used 'normally' too.

Image

Cross-sectional diagram of some of the components. The sandwich layers from top to bottom:
  • faceplate: acrylic mirror, 3mm
  • switch plate: aluminum plate, 1.5mm
  • middle case: acrylic, 5mm
  • middle plate: aluminum plate, 1.5mm
  • bottom case: acrylic, 3mm
  • bottom plate: aluminum plate, 1.5mm
Image

6 layer of plates from laser cutting shop. One acrylic mirror, 3 aluminum plates, and 2 black acrylic plates.

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

Image

All applicable screw holes are countersunk like this one.

Image

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.

Image

Reverse side of the etched acrylic mirror.

Image

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

Image

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.

Image

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

Image

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.
Part 2
Spoiler:
Image

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.

Image

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.

Image

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.

Image

This is what it looks at the reverse side.

Image

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.

Image

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

Image

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.

Image

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.

Image

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

Image

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.
Part 3
Spoiler:
Image

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.

Image

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

Image

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

Image

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.

Image

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

Image

Messy stuff.

Image

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.

Image

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.

Image

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.

Image

Wiring the 3 pins from HC138 to the controller.
Part 4
Spoiler:
Image

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.

Image

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.

Image

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

Image

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.

Image

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.

Image

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

Image

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.

Image

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

Image

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.

Image

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.
Part 5
Spoiler:
Image

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.

Image

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.

Image

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.

Image

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.

Image

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.

Image

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

Image

Using black bolts on the darker colored faceplate.

Image

This is an attachment point for palm rest, or at least it will be.

Image

Notice the slot at the bottom of the case? That will be another palm rest attachment point. But that will have to come much later.

Image

I'm using Suka's 3D printed Trackpoint extension. They are designed for older version of Trackpoint, and I prefer a newer version with metal plate, so I glued them together using cyanoacrylate glue. The top of the extension, though, is a perfect fit for Trackpoint cap.

Suka's extension comes with several different length of extension. Here I have the tallest keycap (SA), and the shortest (DSA) to see which Trackpoint height I prefer for both. Because the Trackpoint extension is glued, I don't have the option to change them afterwards.
Part 6
Spoiler:
Image

Trackpoint with cat's tongue cap.

Image

Indicator LEDs. From left to right: battery level, capslock, GUI layer, function layer, number layer, punctuation layer, emoji layer, greek layer.

Image

And the other side. From left to right: Linux/Apple/Windows Unicode input method, QWERTY or alternative layout, faux clicky, Bluetooth, USB.

Legends are a little off here, probably caused by some problems with laser cutting.

Image

All indicator lights are on.

Image

MicroUSB port from the controller. It is flush with the case, so any cable is compatible. The upper plate should not have the notch, but that will do for now.

Image

Only 12.5mm from the bottom of the keyboard to switch plate. To put it into perspective:

- Whitefox: 12mm
- TEX aluminum case + Sentraq S60X plate: about 12.5mm
- Planck: 13mm

I can squeeze about 1mm of height if I use thinner aluminum for middle and bottom plates. But getting plates in two different thickness for small scale projects is not economical, at least from my perspective. Using thinner plates could mean some countersinking will need to extend to the acrylic parts.

It is probably possible to squeeze 0.5mm from the upper chamber if I can find acrylic sheets in 4.5mm thickness. If going that route, then it will be necessary to replace the 5mm M2 hex spacers with 4mm ones.

If a thinner battery is available, then it should be possible to reduce bottom chamber to match the thickness of the battery.

If thinness is paramount, then it is possible to forego battery and piezo buzzer; remove bottom chamber and make the middle plate the bottom plate. I can get 8mm bottom to switch plate thickness. And this is still not including the optimizations above. It may be necessary to remove the protruding JST-PH battery connector from the Adafruit controller, but if rubber feet are being used and they are in adequate height, then it might not be required.

The faceplate is 3mm in height, but it doesn't add to overall height (it sits on the switch plate). So, it is not critical to optimize thickness here, but thinner acrylic mirrors are available, though choices of colors are far more limited.

Image

Keyset requirement is exactly the same as Planck, plus 3 1U keycaps for Trackpoint buttons.

Image

There's an RGB LED under each switch, inclucing Trackpoint buttons. Switch LEDs and indicator LEDs are connected in a single WS2812/SK6812 bus.

Image

Appearance can be easily customized by changing faceplate. This one is dressed with GMK Carbon keyset together with a matching faceplate.

Image

Thanks for reading!

Posted: 27 Apr 2017, 22:08
by DarKou
Really great look!

Nice job

Posted: 27 Apr 2017, 22:24
by Wazazaby
Impressive

Posted: 27 Apr 2017, 22:44
by j0d1
The light strips idea is very nice, even if they don't align correctly.
I tried to create a hand-wired RGB keyboard (https://imgur.com/a/g5kuz) and it was crazy difficult, with a mixed result (fleaky connections, 32mm tall case, sigh).

I also like the countersunk bolts, it's a nice touch.

Some questions:

* Can you go into specifics why the trackpoint doesn't work over Bluetooth and how you intend to make it work?
* What is the power usage with the LEDs on?

Posted: 27 Apr 2017, 22:51
by [esc]
This is simply incredible!

Posted: 27 Apr 2017, 23:32
by priyadi
j0d1 wrote: * Can you go into specifics why the trackpoint doesn't work over Bluetooth and how you intend to make it work?
* What is the power usage with the LEDs on?
Trackpoint doesn't work over Bluetooth because the required code simply hasn't been written yet. The code should have been straightforward, but it didn't work on my first attempt, and I didn't have a logic level analyzer to debug wire level protocol.

According to USB meter, it consumes 0.3A with most LEDs on, and with full battery. With it charging the battery, it should consume 100mA more, according the manufacturer's spec.

Posted: 29 Apr 2017, 21:23
by obfuscated
The bolts and spacer idea is pretty neat. It solves one problem with the acrylic keyboard designs.
Do you glue the spacer in the middle plate? Do you use a hexagonal spacer?

Posted: 30 Apr 2017, 07:44
by priyadi
obfuscated wrote: The bolts and spacer idea is pretty neat. It solves one problem with the acrylic keyboard designs.
Do you glue the spacer in the middle plate? Do you use a hexagonal spacer?
I don't use glue in spacer. Yes, I'm using hex spacer to prevent spinning. The exception is the middle 2 holes, the acrylic case doesn't extend to that area, so impossible to avoid spacer from spinning there. I thought about gluing, but then it would risk stepping on wires when assembling.

Posted: 02 May 2017, 19:05
by Vizir
very cool design!

Posted: 07 May 2017, 03:38
by dellamorte
was there anything special you had to do to get qmk working on the feather?
I have the same one and i am struggling to get it working :(

Posted: 07 May 2017, 08:02
by Wodan
That build is absolutely insane. The amount of trouble you went through to make this happen is incredible ... logic level conversion, adding smd leds to a handwire build, and then wiring it all up with this PITA magnet wire. #dta7

Posted: 07 May 2017, 17:55
by vvp
Magnet wire is fine to work with. One just needs to get something around Ø 0.15 mm (35 AWG) or thinner.

Posted: 08 May 2017, 17:36
by Phenix
this is an brilliant build. Looks exactly like what I would like to have for use on the go..
Really congrats on it

plus 1 DTA vote..

Posted: 11 Feb 2018, 17:18
by achikin
Hi! Could you please tell a little bit more about demultiplexer wiring?

Posted: 12 Feb 2018, 14:08
by __red__
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.
I know you know, but for those who haven't worked with magnet wire before it may help them understand why there's a learning curve for soldering to it.

Magnet wire is wire (duh) with a thin layer of lacquered insulation on it. In order to solder to it you have to heat the wire past the temperature that the lacquer vaporizes at. The difficulty that priyadi is referring to if you try to directly solder it is that by the time the temperature is reached on the wire where the lacquer vaporizes, your flux has likely already vaporized too, leaving you trying to solder a flux-less joint.

The trick to soldering with magnet wire is to pre-tin the end before you solder. It's less about the tinning (actually, the less solder left on the end the better) and more that you're JUST removing the insulation. Once the insulation has gone, use of your normal fluxed solder will create easy, quick, and solid joints.

Stunning work by the way, I love your use of all the things in your workshop ;-) Laser / CNC / 3D printing too ;-)

Posted: 03 Mar 2018, 09:12
by Dilettant
This is just an awesome polished keyboard! I have a bunch of broken Thinkpad keyboards (X31/32 and T/R/Z60) which I'm trying to harvest trackpoints from. I connected some to a PS/2 cable, which works, but only for a while. It seems some additional circuitry is key to really make it work:
priyadi wrote: Image
External circuitry for the Trackpoint module. They are basically an RC circuit for Trackpoint reset pin, and two pull up resistors for communication.
Can you give more info or sources concerning this? I'd love to make the trackpoints work reliably over PS/2 (only basic movement, no click/scroll) before using them in any projects.

Posted: 25 Apr 2018, 21:31
by FletchINKy
Is the intent to share build files eventually?

This thing looks incredible.

Posted: 19 Jun 2018, 08:42
by semaj4712
If you don't mind me asking, where did you get the mirror back Acrylic made?