As I like my mechanical keyboard and the feel of Cherry blues quite a lot, I ended up at Deskthority, geekhack and /r/MechanicalKeyboards at some point to search for further improvements. As most keycaps available are either boring or expensive or both, I spent some time thinking about how to make some interesting ones myself. One essential aspect for me was not to make the same cap over and over with just a different image/color/nail polish on it, but to create a different haptic experience.
One way of doing this are 3D printers, and I was lucky to find a hackerspace close by that offered the equipment needed to get the job done. I found out that 3D printing is actually quite simple: You just have to model, slice and then print. Job done.
If you want something basic. A coat hook is basic. Unfortunately, a keycap turned out to be the opposite of basic. First of all, it is tiny, so you have to model and print precisely if you don’t want to end up with a clump of PLA afterwards. Second, it is actually connected to a gadget, not a standalone object which can have high tolerances. It has to fit and to work with the gadget. Nice looks is not everything.
Part 1: Modelling
So first, I had to get a model somewhere. Luckily, somebody had done some work before me, so I was able to modify the keycap I found here. After a bit of playing around to get along with OpenSCAD, I grabbed an emerald shape from thingiverse, put it on the keycap and had my first model together:
Part 2: Slice
The next task is to convert the model into gcode to tell the machine what to do exactly, which should actually be a trivial task with the right settings. So I checked the model for inconsistencies with netfabb Studio and used Slic3r to convert the model into gcode with some basic settings and seemed to be good to go.
Part 3: Print
After some initial Win8 driver problems with the Ultimaker, I was ready to produce my first-and-awesome keycap. I started the print and kept staring at the printer while it was getting the job done.
When it was finally done, I was kind of frustrated: There were support structures inside the cap which I could not get out, the peak of the emerald was molten and there was no hope I could ever get it on my keyboard. I even tried to repair it with a hot nail, but it just couldn’t be done. The picture above doesn’t look that bad, but the cap kept falling off instantly.
Chapter II: Adjustments
If there’s one thing I learned during this first experiment, then it is that 3D printing is an iterative process full of testing and adjusting. The cap may have actually been a nice decoration, but it was too bad to work WITH the device. So I had to tweak my model, and here’s my insights in brief:
The first source of frustration was to see that the inside of my first keycap was getting full of PLA lines I knew I could never get out. Why was there even an option for automatic generation if it only leads to bad solutions? As the stem of the cap ist 0.75 mm retracted into the cap, no supports weren’t an option neither. So I had to make my own that were able to be pulled out after printing, and this is how they look like:
So far, so good, it solved the problem for me. I the title picture, you can actually see those structures being generated (i set high retraction values to get them nice and clean). Key are easy to pull out using any tool available.
Critical Parts I: Pyramids
Another problem was the molten peak of the emerald. After some thinking, the reason for this was obvious: when the surface to print for a layer gets smaller and smaller, the layer does not havve enough time to cool down, so the head keeps printing in liquid mess when heading to the next layer. Possible solutions? Making the minimum layer time longer made the problem only worse, as the head continued his critical movements, just slowing down his speed. To fix it, it had to get the head away from the object. Possible? Yeah, you could print two objects at a time or build up some second waste object next to the one to print. So I started printing two objects at once. Problem solved? It should be, but the results already showed the another problem:
A slicer basically converts an object into machine movements with the use of some parameters. BUT WHY DOES HE CHANGE THE PRINTING ROUTES WHEN I PLACE ANOTHER IDENTICAL OBJECT NEXT TO IT? That did not make sense, Slic3r and Cura both had this problem (so it’s a Skeinforge problem, right?), which made the objects ugly as hell, so there had to be another way. Some Google-Fu quickly brought up KISSlicer, which seemed to create exceptionally good results for small objects. It took me a bit to get the basic settings for Ultimaker right, but then it worked. And worked and worked. No matter if I printed the object once or twice or the whole bed full, it always produced good results. And it has an incredible wiping cylinder feature which saves the pyramid tip from melting if you only print one object. The texture quality of the printed objects improved, too.
Problem fixed, so let’s go on to the next one:
Critical Parts II: Connector
Another critical part, if not the most important, was the connector, because not the looks, but the fitting plays the major role in this job. First, I did some iterations of only the stem itself to adjust the connector tolerances to my printer. After some tries, I got a nicely-fitting connector for hassle-free mounting of the cap.
And there was another problem with an unidentifyable source: The connector always had a slight clockwise rotation I could not get rid of. I tried a lot:
- Reviewing the gcode (should make perfectly straight lines, so not the problem)
- Slower speeds (even with 10 mm/sec for all speeds the problem still occurred)
- Finer print lines (went down to 0.25mm, increased the duration significantly, but didn’t show a better result)
- Scratching excess material away (PLA is way too durable for that)
So basically, the cause of this problem was nowhere to be found. In the end, I just resolved it with a quick hack: counter-rotating the stem in the model. And voila, no more problems! Yes, that’s bad style, but I tried every other possibility before doing that.
Here you can see how nice and smooth the connector finally turned out (upside-down printed keycap without angle, just taken out of the printer without any rework).
I also had great fights with the printer itself. Because of an unleveled bed, I had to start over more than a dozen times and yes, an experienced person would recognized this when it happens for the first time, but I was not one of those and still have much to learn. The 2mm high partly printed caps (I had many of those) were later distributed as Keycap-Dollars around the hackerspace.
So it finally seemed to work, and because I wanted the results to be clean and to require as little rework as possible (for me, even the removal of the supports is too much), the settings had to be optimized. So I set fast travel speeds, cranked up retraction and also pushed the other speeds a bit, and finally managed to create one great cap after the other. It currently takes around 25 minutes to create one, but I haven’t yet started to optimize the time.
Haven’t had the time for a posting on github yet, but here’s my modified model of the key, if you want to try for yourself. You’ll need OpenSCAD to adjust the parameters. Good luck with your experiments, I’ll be putting up this and more models on GitHub soon!
Of course, the surface doesn’t even come close to molded keycaps, but I definitely can live with it, as it’s an awesome result for a 3D print. And with so many possibilities I have in shape and material choice, I’m definitely not done with this topic and you can expect further great updates!
Last but not least, I’d like to thank everybody at the Raumfahrtagentur who helped me to get the project this far and everybody who had to listen to me talking about prints and caps for hours. And I’m also grateful for the existence of those freely available applications that made this possible (especially KISSlicer, the only help available when I got stuck with those other terrible solutions).
In the meantime, I already started some other prints, have a look: