Building a hand-wired Corne keyboard

· geekery · keyboards ·

It seems that building keyboards is addictive. After my first attempt, I made another, this time a version with LED lighting. At least, that was the plan. While the soldering for the keyboard itself went smoothly, soldering the LEDs (SK6812MINI 3228 LEDs) was enormously frustrating. These LEDs have tiny contact pads on the back of the unit, so to solder them into the openings in the PCB so that they shine through the switches, you are supposed to create solder bridges from the back of the LED to the PCB. Since the LEDs melt at temperatures quite close to those needed to melt lead-free solder this — to put it mildly — is quite a challenge. On one half of the keyboard, I got some of the underglow lights working, but none of the per-key lights. On the other half, none of the lights worked. I finished the keyboard and was pleased with the low-profile build, but the situation with the lights quietly nagged at me. Through a combination of curiosity and stubbornness, I felt compelled to have another go, and this third Corne keyboard is the result.

The layout

It is probably obvious by now (given that this is my third) that I love the key layout and form factor of this keyboard. I love the fact that every key is only one unit away when my fingers (and thumbs) are in their ‘home’ positions. The layout I have created for numbers, navigation and symbols makes it extremely easy to type everything without stretching or searching. I went the slightly unconventional route of placing the numbers in two rows on the left half of the keyboard (1-5 on the top row and 6-0 on the home row). I have been able to touch type for a while, but have never been able to accurately touch type numbers until now. I could go on, but the main point is that I wanted to stick with everything I had used for my previous builds (layout, Kailh Choc blue key switches, and so on) but use SK6812MINI-E 3228 LEDs instead of the frustrating SK6812MINIs.

The MINI-Es are very similar in size, and have the same capabilities, but instead of the fragile pads on the back of the LED, they have little copper legs which stick out either side. When you drop the LED into the PCB cut-out, the legs stop it falling through the hole, and sit flush with the pads on the back, so they are much easier to solder. The problem, however, is that despite the similar part code, MINI-Es have a different pin-out and so are wired up completely differently from the MINIs. This means that you can’t just substitute them unless the PCB has been designed especially for them. In Version 3 of the Corne PCB, the version for MX key switches is designed for the MINI-E, but the Choc version uses the MINI LEDs. I did toy with the idea of learning how to modify a PCB design using Kicad, but that seemed like too much of a leap in terms of my knowledge. I mean, I’ve only just learned how to use a multi-meter to test continuity, so my electronics knowledge is not exactly extensive! Instead, I decided to hand-wire the keyboard so that I could take into account the different pin-out of the LEDs.


Hand-wiring a keyboard isn’t that hard. There are a number of detailed guides available (this one by masterzen is very clear), and with a small keyboard like the Corne, you don’t have to do too much work. However, I wasn’t sure how neat I would be able to keep the LED wiring without a PCB, and how I would keep them in place, as well as anchoring the controller and TRRS jacks. While pondering this, I came across the MxLEDBit single key PCBs. These clever little things provide support for a single key switch (versions for MX and Choc are available), and provide breakout pads for wiring up the rows and columns, as well as data in and out and power/ground connections for LEDs. There are also dedicated pads for surface mounting diodes on each PCB. There are several similar versions out there, but the benefit of the MxLEDBit is that it is compatible with the MINI-Es. There’s also a board that houses the ProMicro compatible controller together with the reset switch and TRRS jack.

I really like these little PCBs, but there’s a reason people use standard PCBs: wiring everything up yourself takes so much longer, and the end result is inevitably more bulky (even if you carefully route the wiring) than a standard PCB would be. Once I had resigned myself to this being a multi-weekend project, I found it quite a mindful process. My first task (which turned out to be the quickest part of the project) was to solder a diode and LED to each PCB. I hadn’t used surface-mount diodes before, but apart from the challenge of actually seeing the things properly to check polarity, they weren’t too hard to solder. The MINI-E LEDs were a delight. I couldn’t be sure until I finished the project but — spoiler alert — it turned out that the soldering of each LED worked fine first time. I would never go back to trying to use the MINIs as the MINI-Es are so much less trouble. Once each of the PCBs had the components fitted, I separated them into individual units (they come as a 5x5 grid) and started on the assembly.

I re-used quite a few of the components from my first keyboard build, but I bought an acrylic sandwich case to build the keyboard around, as it enabled me to adjust the height by using more or less of the acrylic layers. Since I didn’t know quite how might height I would need to accommodate the wiring, it was useful to have this flexibility. The switch plate was a bit thicker than is ideal (3 mm). If I had been using hot-swap sockets for the key switches, I don’t think they would have held in place well, but with the MxLEDBit PCBs pushed tight against the underside of the acrylic, there was just enough of the switch pin protruding for me to solder them on. Before soldering the switches in, I created all the row and column wire connections and tested for continuity with a multi-meter.

Wiring the matrix and LEDs

I used solid core 22 AWG wire for the rows and columns, and then stranded core 22 AWG wire to connect the rows and columns to the controller, as its flexibility enabled me to move the wire around to provide room to solder the LED connections later. I cut a piece of the solid core wire, stripped one end, bent the stripped portion into a right angle and then figured out the length needed to the next connection before trimming, stripping the wire and bending it. Each connecting piece was therefore like a staple, and just long enough to reach from one pad to the next. When I started, I had to be careful not to dislodge the key switches (remember that I had not yet soldered them in), but as I soldered more of the matrix with the solid wires, the whole thing held together better. Once I was happy with the continuity of all the wires, I soldered the controller on to the controller PCB, connected up the controller to the rows and columns and tested each switch footprint with tweezers using the Via keyboard tester. I had to re-flow the solder one connection, but otherwise it all worked perfectly!

After soldering the key switches and testing again, I moved to the LEDs. I had wired the rows and columns of the keyboard in exactly the same way as the standard Corne to make life easier as I did not have to touch those aspects in the firmware. I could not really do the same for the LEDs, as I was not using underglow LEDs at all (so I had fewer units), and it also made more sense to wire them in a different order because of the location of the pads. I wasn’t absolutely sure it was going to work, but after looking at the firmware, I was fairly confident that I could specify a different number and layout order of LEDs. Each PCB has a DIN and DO pad for data in and data out respectively. I started by connecting the LED pin on the controller with the DIN pad of the top row key nearest to the controller, then worked my way along the row, down to the next row, back towards the controller, and so on, connecting the DO of one key with the DIN of the next.

By this time, the board was fairly congested with wire, and I still had to connect each of the keys to 5V power and ground. I decided to use very fine magnet wire for this job to save space. This is enamelled to provide insulation, but if you dip the tip in hot solder, the enamel burns off and tins the wire in one go. The wire is 0.1 mm diameter (so literally as thick as a human hair), and was fairly challenging to see, let alone solder. It was so fine that it blew about in the draft from my ventilation fan. I had to manipulate it with my fingers rather than tweezers, as I had read that tweezers can scratch the enamel coating, leading to shorts. I think this was the part that I found the most difficult, but I went slowly, testing as I went with the multimeter to make sure that I was creating proper electrical connections.

Eventually, I had one side of the keyboard completely connected, and held my breath as I plugged in the USB cable. Initially, only the first few LEDs lit up, and were flickering different colours. I found that the connection from the controller to the first key had a bit of a cold solder, and re-flowing that joint made all the LEDs light up properly — celebration time!

With the knowledge that my wiring actually worked, the second half went a bit quicker. I cut and placed the wire for each row and column before soldering in one go, which was more efficient. I was also able to organise the wires from the controller in a more compact way for the second half, learning from the experience with the first. This time, the LED wiring worked perfectly first time.

The case

The final task was to assemble the acrylic case. It came with M2 screws and standoffs, but I bought some nicer hex socket screws and some different lengths of standoffs so that I could organise the layers in the order I wanted. I ended up using all the layers to give myself enough space for the wiring, but the end product still feels very low profile compared to a standard keyboard. The only thing I haven’t solved is anchoring the controller PCB to the case. It has four holes to fix it to the case with standoffs or screws, but the acrylic case was not designed for it and does not have screw holes. I reckoned that my chances of drilling acrylic without cracking it were basically nil. I had thought that I might be able to use blobs of Sugru to attach the boards to the base of the case, but it turns out that the only thing that Sugru doesn’t stick to is acrylic. For now the boards are just wedged into the case and I have to be very careful when attaching the TRRS or USB cable. Since this board is going to live on my desk at home1, that’s not too much of a problem. I may eventually be able to figure out a way of securing it a bit more solidly though. I do like the way that the coloured light shines out through the sides and base of the case. The transparent bottom also means that I can admire my hand-wiring when I feel like it too!

Bonus extra - custom cables

There was one other project that I had half-completed. Some way through building the other keyboards, I had bought a custom USB cable kit and some angled TRRS connectors with the idea of building custom cables to go with my new keyboard. These have paracord sleeves with an extra Techflex sleeve on top for durability and extra fanciness. I had already made the USB-C cable without too much trouble. The heatshrink tubing application could have been a bit neater, but otherwise it wasn’t too difficult and works well. I like having a cable that is exactly the right length for my set up so that I don’t have untidy loose wire to coil up.

The TRRS was another matter entirely. In the past, I have looked at the prices charged by companies making custom USB and TRRS cables and thought that they were quite expensive. Now I think that they don’t charge nearly enough money, particularly for TRRS cables. Even soldering with magnet wire is easier than trying to get those tiny wires into the right spots, avoiding melting the insulation, and not getting any shorts. I tried twice and failed completely, but decided after finishing this keyboard that I would have one last go. This time I abandoned the idea of putting heatshrink under the metal sleeve which screws on to the connector itself. This made it too bulky and impossible to fix when shorts developed after screwing the thing together. Instead I wrapped the assembly with electrical tape, then tested for shorts once it was screwed together. I had to repeat this several times, undoing the tape, fixing shorts and re-assembling before I got it all to work. Then I put the heatshrink on over the outside of the metal sleeve to strengthen everything up. This time it was third time lucky and the cable works! Again, I designed it to be just the right length to loop around the Apple Magic Trackpad that I place between the halves of my keyboard. I had intended it to be oriented so that the loop went over the top edge of the Trackpad, but the section of the case next to the controllers is just a bit too bulky to allow the jack to be fully inserted when it is in that orientation. I’ll have to live with it being oriented around the bottom edge instead. It isn’t a practical problem, but it looks a little odd. Anyway, I don’t really care — I’m just jubilant that I finally got that cable assembled!

I’m so happy with my new keyboard. It might seem ridiculous to go to such lengths to have coloured lights on my keyboard, but every time I go to my desk to work, the pretty lights cheer me up no end. I haven’t played with that aspect of my layout yet, but they could also have a functional role: you can change the colour of the lights when particular layers are activated, or when caps lock is engaged, or you can change the colour of particular keys to highlight groups of keys on layers. I’m happy with it just being pretty though, and the keyboard is as delightful to type on as my other Cornes, and has a more solid, robust feel.

  1. As the first one I built donated its parts, the second will be the one I take to work once I am back in the office full time. ↩︎