This project started out as a parameterized cross-hatched mesh cup of the right size to hold a soda can, for practice with the OpenSCAD software. A set of spiral arms is extruded from the base with a twist, and a second set of spiral arms with opposite twist overlaps the first set. I also put a hole in the bottom so the can could be pushed out from the bottom. It was a printer torture test, having to put millions of tiny dollops of plastic layer upon layer, but it came out satisfying. With a 67 mm inside diameter, it holds a can loosely.
With a cold can inside, it felt nearly as cold as the plain can. I supposed it might as well also insulate the can like a cool version of one of those thick foam things, so that it might actually have some value. I added solid walls and ribs inside. The ribs reinforce the wall, which can comfortably be just 1 mm thick. The ribs also keep the walls from touching the can to form an insulating air gap with restricted air circulation. I retained the decorative cross-hatch texture on the outside, although it also lends some additional strength.
I used the Cura slicing software to convert the STL file to G-Code for printing with a layer height of 0.2 mm. On the print shown above on the right, the bottom curled up from the bed a little because my nozzle was a hair too high. I had also reduced the inside diameter to 66.5 mm and found the fit to be ideally snug. This goes to show how close the tolerance is; only 0.5 mm makes the difference between quite loose and quite snug.
I noticed that if the wall is widened to 1.5 mm thick, and Cura is told to slice with a single wall outline (Wall Line Count = 1), then the wall becomes two very thin concentric shells with sparse infill between them. That amounts to a second air layer for even better insulating properties. The blue print shown above has was made this way.
Finally, I thought the bottom of the can was begging for some text to be engraved on it, so I implemented a radial text module for OpenSCAD. OpenSCAD is currently weak in this area, as there is no way to query font metrics, so it’s impossible to find the widths of individual characters as needed to space them out proportionally. The first result using a naïve constant rotation angle approach looked terrible — characters like i and W very much need significantly different spacing.
I found a third party library developed by Alexander Pruss in 2018. It’s basically a giant table of font metric data that can be imported into OpenSCAD and some functions to look up detailed information on individual characters. To this library I added an extra function that gets the horizontal character offsets of each character in a line of text all in one go, which is far more efficient than retrieving the information one character at a time.
I printed the can insulator above with text engraved 2/3 of the way through the bottom. That was fine, but then I wondered about engraving the text all the way through. The problem is that certain glyphs contain holes where the center of the holes would be detached so they would fall out if printed. I was able to solve this problem by skewering those characters with vertical lines down the middle, and incorporated that feature into my radial text module. Some of the characters in question are “ABDOPQRabdegopq”, but I tried to include support for the Extended Latin code set. The percent sign (%) is an outlier. Here is a partial print I used to test radial printing with hole support.
The code for printing radial text is available in this repository:
and consists of
Note: this code uses function literals, a feature requiring OpenSCAD 2021.01 or later.
This can insulator is extensively parameterized with ~19 settings. Not only can the dimensions of different cans be accommodated, but details about the borders and texture can be tuned, as can the radial label text, font face and font size. When using OpenSCAD to open the file, be sure to check out the customizer window.
This object is available on Thingiverse here:
including all three of the needed .scad files and the rendered STL for a standard U.S. 12 oz (355 ml) soda can.