Skip to content

Instantly share code, notes, and snippets.

@ednisley
Created September 19, 2022 17:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ednisley/f31187e750aaf49051e42fce7ef69e5a to your computer and use it in GitHub Desktop.
Save ednisley/f31187e750aaf49051e42fce7ef69e5a to your computer and use it in GitHub Desktop.
OpenSCAD source code: Sheet holder block for laser cutter
// Bracket for sheet holder
// Ed Nisley KE4ZNU 2022-09-09
Layout = "Show"; // [Show, Build, Blade]
/* [Hidden] */
ThreadThick = 0.25;
ThreadWidth = 0.40;
HoleWindage = 0.2;
Protrusion = 0.1; // make holes end cleanly
ID = 0;
OD = 1;
LENGTH = 2;
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);
}
// Sizes
Magnet = [10,30,0.5]; // magnetic sheet size
//Magnet = [10,14,0.5];
MagnetRim = 1.0;
Screw = [3.0,5.5,3.0]; // SHCS OD=head LEN=head
MakerBeam = 10.0; // beam size, screw = half height
BeamRecess = 0.5; // slight overhang for alignment
BladeSlot = 0.15 * 4; // slot with plenty of clearance
BladeSocket = 5.0; // recess to hold miniblind
BladeWidth = 24.6; // miniblind width
BladeM = 1.6; // height of miniblind curve
BladeSides = 12*8;
BladeRadius = (pow(BladeM,2) + pow(BladeWidth,2)/4)/(2*BladeM);
BladeAngle = 2*asin(BladeWidth/(2*BladeRadius));
echo(BladeRadius = BladeRadius);
echo(BladeAngle = BladeAngle);
Block = [Magnet.x + 2*MagnetRim + ceil(BladeRadius*(1 - cos(BladeAngle)) + 2.0),
Magnet.y + 2*MagnetRim,
BladeRadius*sin(BladeAngle)];
echo(Block = Block);
// Cutter for spline recess
// approximately correct and good enough
module BladeRing() {
rotate([90,0,0])
translate([0,0,-BladeSocket])
linear_extrude(height=2*BladeSocket,convexity=2)
difference() {
circle(r=BladeRadius,$fn=BladeSides);
circle(r=BladeRadius - BladeSlot,$fn=BladeSides);
}
}
// Overall bracket
module Bracket() {
difference() {
translate([0,-Block.y/2,0])
cube(Block,center=false);
translate([Magnet.x/2 + MagnetRim,0,Block.z - Magnet.z/2 + Protrusion/2])
cube(Magnet + [0,0,Protrusion],center=true);
for (j=[-1,1])
translate([0,j*Block.y/2,MakerBeam/2 - Protrusion/2])
cube([3*Block.x,2*BeamRecess,MakerBeam + Protrusion],center=true);
for (j=[-1,1])
translate([Magnet.x + 2*MagnetRim + BladeRadius,j*Block.y/2,Block.z])
BladeRing();
for (j=[-1,1])
translate([Block.x - 2.0 - BladeSlot,j*Block.y/2,5*ThreadThick/2 - Protrusion/2])
cube([2*BladeSlot,2*BladeSocket,5*ThreadThick + Protrusion],center=true);
translate([MakerBeam/2,Block.y,MakerBeam/2])
rotate([90,0,0])
PolyCyl(Screw[ID],2*Block.y,6);
for (j=[-1,1])
translate([MakerBeam/2,j*(Block.y/2 - Screw[LENGTH] - 1.0),MakerBeam/2])
rotate([-j*90,0,0])
PolyCyl(Screw[OD] + HoleWindage,2*Block.y,6);
}
}
//----------
// Build it
if (Layout == "Blade")
BladeRing();
if (Layout == "Show")
Bracket();
if (Layout == "Build")
Bracket();
@ednisley
Copy link
Author

More details on [my blog]{https://softsolder.com/) at https://wp.me/poZKh-bi3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment