Advertisements

Proto Board Holder: 80×110 mm Version

A simple holder for 80×110 mm prototyping boards:

Random LED Dots - circuit board

Random LED Dots – circuit board

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:

Proto board holder

Proto board holder

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

Circuit Board Holder - Slic3r preview

Circuit Board Holder – Slic3r preview

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);
}
Advertisements

, ,

  1. #1 by Mike on 2015-05-15 - 05:13

    I think you have a sellable product with a modification to the wire port – make it wide enough for a 16 conductor ribbon cable, and tall enough that it clears RG-174 coax.

    • #2 by Ed on 2015-05-15 - 09:18

      a modification to the wire port

      Turns out RG-174 is about the same diameter as that tangle was tall, so changing the width to, say, 22 mm should do the trick for both coax and ribbon cable:
      WireChannel = [Flange[0],22.0,3.0 + PCBSize[2]];

      I gotta stop giving away my precious IP. [grin]

      If anybody wants one, send me whatever you think it’s worth, plus five bucks to cover (box + postage)…

  1. Random LED Dots: Hardware Layout | The Smell of Molten Projects in the Morning