Posts Tagged CNC

Overstuffed First Solid Infill Layer Debugging: FAIL

The first pass at the lip balm holders suffered from a grossly overstuffed first solid infill layer:

Overfilled layer 2

Overfilled layer 2

The skirt measured the usual scant 0.25 mm and was level all around, so the platform alignment and home position were just fine. That’s rarely a problem, but it’s good to verify before proceeding.

Previewing the G-Code didn’t show any problems; all the second-layer threads looked just fine. With that said, I did create an issue for pointing out that the profusion of thread colors wasn’t useful and suggesting some alternative methods.

The first layer requires 15-ish minutes to print, so I decided to reproduce the problem in a solid calibration box sliced with the same settings as the holder:

Calibration boxes - solid

Calibration boxes – solid

That still life represents these tests:

  • Solid 3 mm tall box, 20 mm square
  • 30 mm square
  • 25 mm square, with text in Arial
  • Again, because I can’t believe it hasn’t failed yet
  • With rectilinear first layer
  • Back to Hilbert with text in Zapf Chancery

All of those printed without trouble; every layer came out exactly as it should. In particular, the first solid infill layer atop the Hilbert Curve bottom layer had the precisely filled threads I’m used to seeing, each one butted against its neighbors without any excess plastic.

I modified the OpenSCAD source code to extract a 20x20x3 sample block from the lip balm holder model, including a snippet of the actual text. That worked fine.

Expanding the sample produced the irregular chunk in the front row, also 3 mm tall, including a section of the lilypads surrounding the tubes. Another successful print!

I’ll leave to your imagination a pile of half a dozen first layers topped with small sections of grossly overstuffed solid infill, printed in between the successful blocks and as a result of the variations mentioned below, with identical text and slicer settings. The test blocks work fine, but the actual holder and sections from it do not.

Having eliminated the obvious causes, it was time for more drastic measures.

I build OpenSCAD and Slic3r from the latest source files on GitHub. Nothing in this leads me to suspect the OpenSCAD models and using the most recent stable Slic3r version produced the same results.

Rebuilding the Slic3r configuration files from scratch produced the same results.

That’s where I gave up, set the 3D Honeycomb infill to start with Layer 2, and completed the mission.

Lacking any better ideas, I decided to throw all the balls in the air at once …



Thinwall and Solid Boxes for 3D Printer Calibration

A revision to my Fundamental Calibration Object adds some variations …

The classic thinwall open box:

Calibration Box - open - 1 thread - solid model

Calibration Box – open – 1 thread – solid model

A solid box:

Calibration Box - solid - solid model

Calibration Box – solid – solid model

A solid box with text embossed on the lower surface:

Calibration Box - solid text - solid model

Calibration Box – solid text – solid model

You must consider how the slicer settings interact with the solid model parameters, particularly now that slicers can produce adaptive infill for small gaps between perimeter threads. Previewing the slicer’s output will show you what assumptions it makes and prevent surprising results out there on the platform.

A single-thread wall comes out properly:

Thinwall open box - 0.40 wall - Slic3r

Thinwall open box – 0.40 wall – Slic3r

The results look just like the preview, with firmly bonded layers and no fluff:

Thinwall open box - 1 thread walls

Thinwall open box – 1 thread walls

This wall should be two threads wide, but Slic3r inserts very very thin infill thread:

Thinwall open box - 0.80 wall - Slic3r

Thinwall open box – 0.80 wall – Slic3r

I think that’s a result of forcing the two perimeter threads to sit with their centers exactly one thread width apart, making the (nominal, ideal) inner walls tangent to each other.  Setting the wall to 1.9 mm eliminates the hair-fine infill thread, at the cost of producing an object 0.1 mm smaller than it looks.

Unfortunately, that fine infill doesn’t produce enough plastic flow for a continuous thread. The PET I’m using accumulates on the nozzle until enough of a glob forms to stick on the previous layer, but hair-fine strands connect those globs to each other and the nozzle, producing awful results:

Thinwall open box - 2 thread walls

Thinwall open box – 2 thread walls

A triple-thread wall allows Slic3r to produce a fatter infill thread that works the way you’d expect:

Thinwall open box - 1.20 wall - Slic3r

Thinwall open box – 1.20 wall – Slic3r

The threads bond firmly in all directions:

Thinwall open box - 3 thread walls

Thinwall open box – 3 thread walls

It’s not obvious from that picture, but the bond between successive infill threads produces a glass-clear vertical plastic slab that relays images from the bottom to the top. The perimeter threads are also firmly bonded, albeit with not quite the same optical quality.

To use these boxes:

  • Set the OpenSCAD extrusion parameters to match whatever the slicer will use
  • Set the wall height and thickness to whatever you like
  • Compile-and-render, export the result as a solid model in STL / AMF / whatever
  • Feed the solid model into your favorite slicer and save the G-Code
  • Feed the G-Code into your printer, watch it magically create a little box
  • Measure the printed results and compare with the ideal settings
  • Change the slicing configuration and iterate until satisfied

Verify these measurements before adjusting anything else:

  • Filament diameter: actual vs. nominal will be different
  • Extruder steps per millimeter: mark 100 mm on filament, extrude 100 mm, compare

Then you can verify / adjust some finicky settings:

  • Extrusion multiplier: does the actual single wall width match slicer’s nominal value?
  • Infill density: 100% infill should perfectly fill the solid box
  • Initial Z offset: does actual height match the model setting?
  • Platform alignment: print five boxes at platform center + corners, verify heights
  • First layer adhesion: if these don’t stick, the platform has weak adhesion
  • Minimum time per layer: if the walls slump, you’re printing too fast
  • Extrusion temperature: good bonding and no delamination along any axis

The OpenSCAD source code as a GitHub gist:


1 Comment

Knurled Inserts: Epoxy Anchoring

After taking the incandescent lamp socket off its base, I drilled the tapped (yeah, in plastic) 6-32 holes out to a firm press fit for the knurled 6-32 inserts, buttered the inserts with epoxy, and pressed them firmly in place:

Lamp Base - epoxy knurled insert

Lamp Base – epoxy knurled insert

Fast forward a day and they’re stuck in there like they were glued. You can see a bit of the epoxy around the right rim of the insert; I wiped a bit more off around the other one.

Putting The Right Amount of epoxy on the insert requires dialing back my “The bigger the blob, the better the job” enthusiasm, but wasn’t all that difficult. It’s certainly more tedious than just ramming the inserts into a printed hole and might actually produce better retention. I doubt that will make the least difference for (almost) anything I build.

On the whole, they look good…

, ,


Vacuum Tube LEDs: Noval Tube on a Platter

Replacing the hex nut traps with knurled insert cylinders slims the ends of the socket:

Noval Socket - knurled inserts - bottom - Slic3r preview

Noval Socket – knurled inserts – bottom – Slic3r preview

Making the raised part of the socket fit the 25 mm ID of a hard drive platter swells the midsection of the socket, but the platter won’t need any machining or punching:

Noval Socket - knurled inserts - top - Slic3r preview

Noval Socket – knurled inserts – top – Slic3r preview

The octal and duodecar sockets will require a punch to open up the platter hole and all sockets require two drilled clearance holes for the screws. Given that I’ll eventually do this on the Sherline, maybe milling the hole for the bigger tubes will be faster & easier than manually punching them.

I moved the screw centers to 35 mm (from the historically accurate 28 mm) to accommodate the larger center, not that anybody will ever notice, and enlarged the central hole to 7.5 mm (from 5.0 mm) to let more light into the tube base.

The support structures inside the (now much smaller) knurled insert cylinders might not be strictly necessary, but I left them in place to see how well they built. Which was perfectly, as it turns out, and they popped out with a slight push:

Noval socket - knurled inserts - support structures

Noval socket – knurled inserts – support structures

They’re just the cutest little things (those are 0.100 inch grid squares in the background):

Noval socket - support structures

Noval socket – support structures

Anyhow, the knurled inserts pressed into their holes with a slight shove:

Noval socket - installing knurled insert

Noval socket – installing knurled insert

The chuck jaws were loose on the screw cutoff stud and stopped at the surface, putting the knurled inserts perfectly flush with the socket:

Noval socket - knurled inserts - installed

Noval socket – knurled inserts – installed

The surface looks very slightly distorted around the inserts, although it’s still smooth to the touch, and I think the PETG will slowly relax around the knurls. Even without heat or epoxy, they’re now impossible to pull out with any force I’m willing to apply to the screws threaded into them. Given that the platter screws will (be trying to) pull the inserts through the socket, I think a dry install will suffice for my simple needs.

Match-mark, drill #27 6-32 clearance holes, and the screws drop right in:

Noval socket - installed

Noval socket – installed

Those stainless steel pan-head 6-32 screws seem a bit large in comparison with the socket. Perhaps I should use 4-40 screws, even though they’re not, ahem, historically accurate.

The tube pin holes get hand-reamed with a #53 drill = 1.5 mm. That’s a bit over the nominal 1.1 mm pin diameter, but seems to provide both easy insertion and firm retention. For permanent installation, an adhesive would be in order.

Buff off the fingerprints, stick the tube in place, and it looks pretty good:

Noval socket - tube on platter

Noval socket – tube on platter

Yeah, those screws are too big. Maybe a brace of black M3 socket head screws would look better, despite a complete lack of historicity.

Now to wire it up and ponder how to build a base.

The OpenSCAD source code as a GitHub Gist:

, ,


Knurled Inch Inserts

Tagging along behind the metric inserts, a sack of knurled brass inch-size screw inserts arrived:

Threaded Inserts - metric and inch

Threaded Inserts – metric and inch

The nice stainless steel screws on the right range from 4-40 to 10-32, which suffice for nearly everything I build around here.

Unlike the splined metric inserts on the left, these inserts have actual knurls and ridges that should hold them firmly in place. The specs give hard-inch dimensions, of course, that (seem to) correspond to the root diameter of the knurls. You can find nice engineering drawings of precise tapered holes (by drilling down into the Heat-Set Inserts for Plastics item on that page), but a few metric measurements of the actual parts on hand should suffice for my simple needs.

Thread: overall length x small rim OD x (knurl length x larger knurl OD)

  • 4-40: 5.8 x 3.9 x (4.0 x 4.6)
  • 6-32: 7.1 x 4.7 x (4.6 x 5.5)
  • 8-32: 8.1 x 5.5 x (5.9 x 6.3)
  • 10-32: 9.5 x 6.3 x (7.0 x 7.1)

Rather than fussing with a tapered hole, just punch a cylinder with the small rim OD (to clear the screw) through the part and put a cylinder with the knurl OD x length at the surface.

Using cylinders without diameter correction will make them slightly undersized for heat bonding. The usual 3D printing tolerances don’t justify anything fussier than that.

Using PolyCyl diameter correction will make the holes nearly spot on for epoxy bonding: butter ’em up, ram ’em in, pause for curing, done.

That’s the plan, anyhow…

, ,


Vacuum Tube LEDs: Ersatz Heat Sink Plate Cap

I wanted a slightly larger “plate cap” to fit a big incandescent bulb and it seemed a fake heatsink might add gravitas to the proceedings:

Vacuum Tube LEDs - large incandescent bulb

Vacuum Tube LEDs – large incandescent bulb

Yeah, that antique ceramic socket holds the bulb at a rakish angle. Worse, even though I painstakingly laid out the position of the heatsink atop the bulb, it’s visibly off-center. Which wouldn’t be so bad, had I not epoxied the damn thing in place.

After reaming out the M2’s filament drive, the entire blue base printed without incident.

A closer look at the cap:

Vacuum Tube LEDs - ersatz heatsink plate cap

Vacuum Tube LEDs – ersatz heatsink plate cap

Memo to Self: Next time, line it up with the vertical glass support inside the bulb and ignore the external evidence.

The boss has a hole for the braid-enclosed cable to the knockoff Neopixel:

Vacuum Tube Lights - finned cap - Slic3r preview

Vacuum Tube Lights – finned cap – Slic3r preview

The cupped surface perfectly fits the bulb’s 3.75 inch diameter. While you wouldn’t mill out a real heatsink, it definitely looks better this way and (alas) gives the epoxy more footprint for a better grip.

I built the fins with a 1/8 inch cutter in mind, so the fin root radius allows for a G3/G3 arc without gouging. I doubt machining a fake heatsink from aluminum makes any sense, but the cheap extruded heatsinks on eBay don’t look very good. Plus, they sport completely unnecessary tapped holes for LED mounts and suchlike.

A cross-section shows the wiring channel and cable entry:

Vacuum Tube Lights - fin cap solid model - section

Vacuum Tube Lights – fin cap solid model – section

I epoxied the Neopixel in place, applied double-sided carpet tape to the whole thing, then painstakingly trimmed around the fins with an Xacto knife:

Vacuum Tube LEDs - Ersatz Heatsink plate cap - tape

Vacuum Tube LEDs – Ersatz Heatsink plate cap – tape

That looked better from the top side (where it was completely hidden) and came heartbreakingly close to working, but after about a day the cable + braid put enough torque on the cap to peel it off the bulb. Obviously, the tape holds much less enthusiastically after that.

Part of the problem came from the cable’s rather sharp angle just outside the cap:

Vacuum Tube LEDs - Ersatz Heatink plate cap - detail

Vacuum Tube LEDs – Ersatz Heatink plate cap – detail

Rakish angle, indeed. Two of ’em, in fact.

Unlike the smaller cap on the halogen bulb, this time I didn’t bother with a brass tube ferrule, mostly to see how it looks. I think it came out OK and the black braid looks striking in person. Conversely, a touch of brass never detracts from the appearance.

Obviously, the cable wasn’t long enough, either. Part of that problem came from underestimating the braid length: it shortens dramatically when slipped over the cable, even when you expect shortening. Somehow I managed to overlook that, despite cutting the cable quite long enough, thankyouverymuch. There’s a tradeoff between gentle angles and having the cable stick out too far for comfort.

Memo to Self: Use a cable at least four inches longer than necessary, measure the combined cable + braid assembly after screwing the bulb in the socket, and don’t epoxy anything before all the parts are ready for assembly.

That’s why it’s a prototype made out of blue PETG…

Protip: running old ceramic sockets through the dishwasher greatly simplifies their subsequent cleanup.

All in all, I like it.

The OpenSCAD source code as a GitHub gist:

, ,


Vacuum Tube LEDs: Ersatz Tube Sockets

Even vacuum tubes destined to be decorations need sockets:

Vacuum Tube Bases - solid models

Vacuum Tube Bases – solid models

They’re entirely plastic, of course, but they match the dimensions of “real” tube sockets pretty closely. The bosses around the pins have hard-inch dimensions, so you (well, I) can unleash Genuine Greenlee Radio Chassis Punches on sheet metal.

All the key dimensions come from a table, so you can build whatever sockets you need. These four seem to cover the most common relics of the Hollow State Empire:

T_NAME = 0;                                             // common name
T_NUMPINS = 1;                                          // total, with no allowance for keying
T_PINBCD = 2;                                           // tube pin circle diameter
T_PINOD = 3;                                            //  ... diameter
T_PINLEN = 4;                                           //  ... length (overestimate)
T_HOLEOD = 5;                                           // nominal panel hole from various sources
T_PUNCHOD = 6;                                          // panel hole optimized for inch-size Greenlee punches
T_TUBEOD = 7;                                           // envelope or base diameter
T_PIPEOD = 8;                                           // light pipe from LED to tube base
T_SCREWOC = 9;                                          // mounting screw holes

//    Name      pins     BCD   dia  length   hole            punch       env  pipe screw
TubeData = [
    ["Mini7",     8,    9.53, 1.016,   7.0,  16.0,        11/16 * inch,  18.0,  5.0, 22.5],
    ["Octal",     8,   17.45, 2.36,   10.0,  36.2,    (8 + 1)/8 * inch,  32.0, 11.5, 39.0],
    ["Noval",    10,   11.89, 1.1016,  7.0,  22.0,          7/8 * inch,  21.0,  5.0, 28.0],
    ["Duodecar", 13,   19.10, 1.05,    9.0,  32.0,         1.25 * inch,  38.0, 12.5, 39.0],

Given that the tubes lack electrical connections, I omitted the base keying: plug them in for best visual effect.

The hole through the middle passes light from a knockoff Neopixel on a 10 mm OD PCB:

Vacuum Tube LEDs - Octal base - top

Vacuum Tube LEDs – Octal base – top

Seen from the bottom, each base traps a pair of 6-32 nuts for chassis mounting and has a Neopixel press-fit in the middle:

Vacuum Tube LEDs - Duodecar base - bottom

Vacuum Tube LEDs – Duodecar base – bottom

Those recesses require support structures:

Vacuum Tube Bases - solid models - support

Vacuum Tube Bases – solid models – support

The Miniature 7-pin socket has the least space for the 10 mm OD Neopixel PCB and shows the thin layer between the bottom of the pin holes and the top of the openings.

Vacuum Tube Base - Mini7 - solid model section

Vacuum Tube Base – Mini7 – solid model section

You see half of the eight holes in the “7 pin” socket, because it has the eighth hole where a standard socket has a gap between pins 1 and 7.

Somewhat to my surprise, punching the support spiders out with a 6-32 stud (grabbed in the drill press) worked perfectly:

Vacuum Tube Base - nut trap overhang - detail

Vacuum Tube Base – nut trap overhang – detail

They look like I intended to build tiny decorations:

Vacuum Tube Base - support structure - detail

Vacuum Tube Base – support structure – detail

The cookies held on tenuously, then released with a loud bang! as I gradually increased the pressure. A PETG support structure in a blind recess wouldn’t pop out nearly so well.

The OpenSCAD source code as a GitHub gist: