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.
A 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:

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:

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

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();