A simple holder for 80×110 mm prototyping boards:

It’s similar to the holder for the LED current controller board, minus the center screws, plus nicely rounded corners and a cutout for wires emerging from underneath:

Slic3r’s Hilbert Curve infill definitely looks better than the usual straight-line pattern:

The OpenSCAD source code:
// Test support frame for Hall Effect LED Blinky Light // Ed Nisley KE4ZNU - Sept 2013 Layout = "Fancy"; // Fancy Plain PlainColor = "LightBlue"; ClampFlange = true; //- Extrusion parameters - must match reality! ThreadThick = 0.25; ThreadWidth = 0.40; function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit); Protrusion = 0.1; HoleWindage = 0.2; //- Screw sizes inch = 25.4; Tap4_40 = 0.089 * inch; Clear4_40 = 0.110 * inch; Head4_40 = 0.211 * inch; Head4_40Thick = 0.065 * inch; Nut4_40Dia = 0.228 * inch; Nut4_40Thick = 0.086 * inch; Washer4_40OD = 0.270 * inch; Washer4_40ID = 0.123 * inch; //- PCB sizes PCBSize = [110.0,80.0,1.5]; PCBShelf = 2.0; Clearance = 2*[ThreadWidth,ThreadWidth,0]; WallThick = IntegerMultiple(5.0,ThreadWidth); FrameHeight = 8.0; ScrewOffset = 0.0 + Clear4_40/2; OAHeight = FrameHeight + Clearance[2] + PCBSize[2]; FlangeExtension = 5.0; FlangeThick = IntegerMultiple(2.0,ThreadThick); Flange = PCBSize + 2*[ScrewOffset,ScrewOffset,0] + 2*[Washer4_40OD,Washer4_40OD,0] + [2*FlangeExtension,2*FlangeExtension,(FlangeThick - PCBSize[2])] ; echo("Flange: ",Flange); NumSides = 4*5; WireChannel = [Flange[0],15.0,3.0 + PCBSize[2]]; WireChannelOffset = [Flange[0]/2,25.0,( + FrameHeight + PCBSize[2] - WireChannel[2]/2)]; //- Adjust hole diameter to make the size come out right module PolyCyl(Dia,Height,ForceSides=0) { // based on nophead's polyholes Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2); FixDia = Dia / cos(180/Sides); cylinder(r=(FixDia + HoleWindage)/2,h=Height,$fn=Sides); } //- Put peg grid on build surface module ShowPegGrid(Space = 10.0,Size = 1.0) { RangeX = floor(100 / Space); RangeY = floor(125 / Space); for (x=[-RangeX:RangeX]) for (y=[-RangeY:RangeY]) translate([x*Space,y*Space,Size/2]) %cube(Size,center=true); } //- Build it ShowPegGrid(); difference() { union() { // body block and screw bosses translate([0,0,OAHeight/2]) color(PlainColor) cube(PCBSize + Clearance + [2*WallThick,2*WallThick,FrameHeight],center=true); for (x=[-1,1], y=[-1,1]) { translate([x*(PCBSize[0]/2 + ScrewOffset), y*(PCBSize[1]/2 + ScrewOffset), 0]) color((Layout == "Fancy") ? "Orchid" : PlainColor) cylinder(r=Washer4_40OD,h=OAHeight,$fn=NumSides); } if (ClampFlange) color((Layout == "Fancy") ? "SeaGreen" : PlainColor) linear_extrude(height=Flange[2]) hull() for (i=[-1,1], j=[-1,1]) { translate([i*(Flange[0]/2 - Washer4_40OD/2),j*(Flange[1]/2 - Washer4_40OD/2)]) circle(d=Washer4_40OD,$fn=NumSides); } } for (x=[-1,1], y=[-1,1]) { // screw holes and washer recesses translate([x*(PCBSize[0]/2 + ScrewOffset), y*(PCBSize[1]/2 + ScrewOffset), -Protrusion]) rotate((x-1)*90) PolyCyl(Tap4_40,(OAHeight + 2*Protrusion)); translate([x*(PCBSize[0]/2 + ScrewOffset), y*(PCBSize[1]/2 + ScrewOffset), OAHeight - PCBSize[2]]) PolyCyl(1.2*Washer4_40OD,(PCBSize[2] + Protrusion),NumSides); } translate([0,0,OAHeight/2]) // through hole below PCB cube(PCBSize - 2*[PCBShelf,PCBShelf,0] + [0,0,2*OAHeight],center=true); translate([0,0,(OAHeight - (PCBSize[2] + Clearance[2])/2 + Protrusion/2)]) // PCB pocket on top cube(PCBSize + Clearance + [0,0,Protrusion],center=true); translate(WireChannelOffset) // clearance for cable on solder side cube(WireChannel + [0,0,Protrusion],center=true); }