June 3, 2022

The Big L — Process

Custom handwired module for the Work Louder keyboard featuring 8 (!) rotary encoders — the Big L.

L is not only about the shape, it's a part of Work Louder abbreviation, as well as a meme abbreviation for Lose — because this is a Learning project and I expected to fail a lot. So let me tell you everything I learned!

Project timeline: 17.04.22-24.04.22 (1 week)

Design

My goal was to use as many encoders as possible yet keep the module usable. Also I just got some horizontal roller encoders so I was curious to try using them.

The source of inspiration for this project was a post in the Work Louder Discord: a keyboard consisting of encoders only. I wanted to make something practical and fun inspired by this.

Calculating the number of possible encoders

Before I began the design, I wanted to figure out how many encoders I can connect to the controller in the first place. Each encoder needs two pins for connection. Individual pins can be shared across pairs, however each pair of pins needs to be unique (otherwise it would be the same encoder — no way to identify which encoder exactly was turned if two pairs are the same). I wrote a little guide on this topic.

Hardware

Things I Learned in the process that are related to hardware.

Cardboard prototypes

I started with cardboard prototypes to figure out the dimensions of everything and the actual shape I want to use. Using the acrylic square piece from the Creator Board as a template.

After playing a bit with the cardboard, I landed on the L shape that I decided to use.

Widening washers

The encoders are fixed in the plate using a nut, but they don't come with washers which are important to not scratch the paint. I couldn't find any washers with 7mm holes so I bought M6 washers and a 7mm drill bit to drill through them. I tried clamping them and putting them in a vice but they always slipped away. A quick google search told me washers can be clamped between two pieces of wood. I only had one piece of scrap wood so I found a piece of steel with a hole in it which was exactly 7mm. This worked like a charm! I tried drilling through four washers at a time but they fell out so I tried 3 and they also were held fine. So I drilled all the washers I needed in batches of 3.

Drilling PVC sheets precisely

This is probably a noob drilling problem, but the holes I made always had rough edges. I found that having a guide piece of PVC with a hole at the top, a flat piece at the bottom and the actual piece being drilled sandwiched between produced perfect holes.

Roller mounting

Speaking of cutouts for encoders, it took me solid 2 days of head scratching to find the best mounting method. Their mounting system is hideous to say the least — very sad for such an expensive piece (EVQWGD001). While fiddling with them, I broke off the legs on one roller. 💀

I tried cutting a generic PCB to the size, but it required mounting the PCB somewhere too. So in the end I decided to simply mount them to the PVC plate using double-sided tape as a backup.

I spent some time figuring out the horizontal encoder pinout as different sources had different information. From my testing I found that the following is the correct EVQWGD001 roller pinout:

EVQWGD001 encoder pinout

Improvised knife

I didn't have a knife handle yet (I wanted a black one so I had to order online) but I bought some blades specifically for the cutouts for the roller encoders. They are very sharp and cut PVC like butter. So I got some small nuts, bolts and a metal scrap piece to create a temporary handle for the blade. It worked very well, no failures — except for accidentally cutting myself.

Acrylic paint

After making all the necessary cuts, I painted the base with about 5 layers of matte black acrylic paint. In the beginning I used a brush but it left noticeable stripes. So for the last couple of layers I tried using a sponge. Unfortunately the surface still was a bit uneven. I'm yet to learn how to achieve an even surface.

Work Louder Hub and JST pinout

The Creator keyboard is actually three separate keyboards connected by a single hub which then connects to your computer. The hub works like any other USB splitter, but instead of USB it uses JST-SH (1mm) connectors. To create a new module for it using the Pro Micro, I had to create a custom cable: JST to Micro USB. This way you can connect anything you want to the hub.

The problem I stumbled upon is not knowing the correct pinout for the JST connector. When I asked in the WL Discord community, the creators of the keyboard quickly gave me an answer. But when I connected the wires, the devices I connected didn't work. I disassembled the Micro USB connector as I thought something might be wrong with it. It was ok. So I thought the issue might be that this cable is made for host devices (because on the other end there was a female USB connector originally). I cut off the pin responsible for that connection but it still didn't work — later I realized what I did was useless and didn't have any effect.

So I investigated USB a bit more and thought the wiring might be incorrect. Turns out I indeed got the instructions wrong. When I connected the wires the correct way, everything started working! Here is the correct wire order if you want to create your own modules for Work Louder keyboards:

JST-SH to USB pinout

Figma plan

When I attached the encoders in their positions, I needed to plan the wiring. I did it in Figma by simply dropping in the photo of the module with the controller in its place and drawing all the wires. Each set of wires is in a different group so you can hide and show them as needed.

After I made the plan, I realized it would be much easier to put the controller upside down. This made the diagram tricky to work with. While wiring I kept forgetting that the left is on the right so I placed signs in addition to pin names as a reminder.

Wire wrapping

This was probably the most important lesson from this project! I bought some wires for wire wrapping when I built the Sexypad, but I used solder to connect them. This took about a minute for each contact as I used tweezers to twist wires and put them into place. For the Big L I wanted a better method since connecting so many encoders with solder and thin wires would make me wanna die. This led me to discover wire wrapping: using a special tool to tightly wrap the wire around the contact leg of the component instead of soldering.

The only issue is the special tool. It costs $20 and would take a month to arrive. I was afraid since all such tools have “patent” written on them I won't find any alternatives on the market. Well, turns out you can use a cotton swab, and it works just as well! Yes, a $20 patented tool can be replaced by a cotton swab. Here is a video I learned this from:

Great success! Here is the tool and the first wire I wrapped on the encoder leg: I was so happy I took a photo! I wrapped wires for all the encoders with this tool. The wrapping process takes about 5 seconds and a good wrap is 7 turns. Much faster and simpler than soldering!

When time came to wrap the pins on the Arduino Pro Micro, they were too short and the wire kept slipping off or breaking. I tried to cut the swab tube a bit shorter but it broke. So I had to improvise. I got an idea to use the syringe needle (14G: 1.55mm inner diameter, 1.84 outer) to create a stronger and thinner tool. Making a hole in it was tricky to say the least, but I managed to do it with an awl. Finally, I put the swab over the needle because the metal was too thin and it was cutting the wire.

Wire wrapping not only kept me from wanting to die due to soldering frustration, it also allowed me to quickly fix mistakes. I wired two encoders incorrectly the first time, so I simply removed the wrong wire with tweezers and added a new one.

Nailed it

Before wiring, I tested the board for flex and it bent a bit too much in the middle. I didn't want to add more holes for supports so to add stiffness, I glued a nail in there. I cut off the nail head using pliers and a vice. This damaged the pliers clipper part a bit, don't do it with good pliers. Using the knife I cut a little slot for the nail in the PVC, then got a bit of hot glue and used a soldering iron to warm up the nail and melt the glue. It worked better than I expected. Now there is no flex at all!

Wiring process

Final wiring — looks pretty cool if you ask me!

Attaching the Big L to the base

Side view, wires and encoder bases are visible underneath.

Software

Caterina vs DFU bootloader

I used Elite-C controller to prototype the firmware but as you know I used the Pro Micro clone for the actual device. Everything was fine one Elite-C but when I tried to flash the Pro Micro, I was not able to. I even thought it is broken but I had the same issue with the other one.

Turns out there were two reasons for this: the main one was the Cetarina bootloader which is used by the Pro Micro. The bootloader needs to be specified in the firmware when flashing, and I had it set to DFU. So setting the bootloader to Caterina solved one issue. The second issue was that I didn't flash the firmware immediately and the Pro Micro quits the bootloader mode after about 8 seconds. So it needs to be flashed immediately.

Encoder actions library

Controlling so many encoders with the regular switch expression or if/else provided in the QMK docs would be a huge pain if you want easy customization. Encoder Actions helper library to the rescue, read more about how I configured it in the 153 encoders article.

Here is the link to the firmware for the Big L in case you need it for reference: https://github.com/glebsexy/qmk_firmware/tree/sexypad_and_big_l/keyboards/gleb_sexy/big_l


Finished product


Thank you for reading!

Hope this post inspires you to make something fun — show me your creations! And feel free to share them in the Work Louder Discord too!