Calibration Boxes for 3D Printing

The OpenSCAD script now produces either a thinwall open box or a solid box with the same outside shape and dimensions:

The rounded corners prevent edge glitches from throwing off the measurement, plus they verify that small segments print properly.

lengthy writeup on why I like the thinwall open box so much may be more than you want to know on the subject. Just do it, OK?

The solid box lets you check the outside dimensions (20 x 20 x 5 mm) and the slicer’s infill parameters.

The first few attempts with a new setup won’t look very good, but that’s the whole point:

M2 V4 Calibration Objects
M2 V4 Calibration Objects

Getting a workable profile and accurate Z-axis setting required maybe a dozen quick prints & parameter changes. After that, they’re good for verifying that any change you make hasn’t screwed up something beyond recovery.

Put five of them on the platform to verify overall alignment (“leveling”) and first-layer thickness:

Thinwall Calibration Cubes - 5 copies
Thinwall Calibration Cubes – 5 copies

A few iterations will generate plenty of show-n-tell tchotchkes:

Thinwall open boxes from platform leveling
Thinwall open boxes from platform leveling

As nearly as I can tell, if you can’t print these reliably, there’s no point in trying to print anything else.

Even better, when you suddenly can’t print anything else reliably, these simple boxes will tell you what’s gone wrong…

[Update: The revised version works better.]

The OpenSCAD source code:

// Calibration boxes
//  Thin wall open box - set Extrusion Multiplier
//  Solid box - verify infill settings
// Ed Nisley - KE4ZNU - 2015-03

Layout = "Open";					// Open Solid

//-------
//- Extrusion parameters must match reality!

ThreadThick = 0.25;
ThreadWidth = 0.40;

Protrusion = 0.1;           // make holes end cleanly

function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);

//-------
// Dimensions

Height = IntegerMultiple(5.0,ThreadThick);

WallThick = 1*ThreadWidth;

CornerRadius = 2.0;
CornerSides = 4*8;

SideLen = 20.0 - 2*CornerRadius;

Rotation = 45;

//-------

module ShowPegGrid(Space = 10.0,Size = 1.0) {

  Range = floor(50 / Space);

    for (x=[-Range:Range])
      for (y=[-Range:Range])
        translate([x*Space,y*Space,Size/2])
          %cube(Size,center=true);
}

//--------

module Solid() {
	hull() {
		for (i=[-1,1], j=[-1,1])
			translate([i*SideLen/2,j*SideLen/2,0])
				cylinder(r=CornerRadius,h=Height,$fn=CornerSides);
	}
}

module Thinwall() {
	difference() {
		Solid();
		hull() {
			for (i=[-1,1], j=[-1,1])
				translate([i*SideLen/2,j*SideLen/2,-Protrusion])
					cylinder(r=(CornerRadius - WallThick),h=(Height + 2*Protrusion),$fn=CornerSides);
		}
	}
}

//-------

//ShowPegGrid();

rotate(Rotation)
	if (Layout == "Open")
		Thinwall();
	else
		Solid();