Created
September 19, 2022 17:56
-
-
Save ednisley/f31187e750aaf49051e42fce7ef69e5a to your computer and use it in GitHub Desktop.
OpenSCAD source code: Sheet holder block for laser cutter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
More details on [my blog]{https://softsolder.com/) at https://wp.me/poZKh-bi3