Last active
February 24, 2020 14:26
-
-
Save mdekrey/46bfabac8997de8a917bce83362f18a4 to your computer and use it in GitHub Desktop.
Table Saw Mitre Angle Guide
This file contains hidden or 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
$fn = 120; | |
$fnHole = 360; | |
inch = 25.4; | |
diskHeight = 8; | |
radius = 4.8 * inch; | |
maxDegrees = 30; | |
step = 1; | |
fenceThickness = 10; | |
fenceHeight = inch*2; | |
tickHeight = 0.4; | |
tickWidth = 0.8; | |
fontSize = 10; | |
lockDistance = 3*inch; | |
settingInset = 1 * inch; | |
settingSize = 5.6; | |
settingBoltDiameter = 5.1; | |
settingRaisedEdge = 3; | |
originBoltHoleDiameter = 0.141*inch; | |
mountingHoleDiameter = 1/4*inch; | |
trimWidth = radius * cos(maxDegrees)*2; | |
distanceToSetting = radius - settingInset; | |
%translate([0, distanceToSetting, 0]) | |
cylinder(fenceHeight * 5, r=settingBoltDiameter / 2); | |
echo("distanceToSetting", distanceToSetting); | |
module base() { | |
difference() { | |
union() { | |
intersection() { | |
cylinder(diskHeight, r = radius, $fn = $fn); | |
translate([0, radius, diskHeight / 2]) | |
cube([trimWidth, radius * 2, diskHeight], center = true); | |
} | |
// setting rim, main | |
translate([0,0,settingRaisedEdge]) | |
rotate([0,0, (90 - maxDegrees) / 2]) | |
rotate_extrude(angle = (90 - maxDegrees) * 2, convexity = 10, $fn = $fn) | |
offset(settingRaisedEdge) | |
translate([radius - settingInset - settingSize / 2, 0]) | |
square([settingSize, (diskHeight - settingRaisedEdge)]); | |
// setting rim, left side | |
rotate([0,0, (90 - maxDegrees)]) | |
translate([0, radius - settingInset, 0]) | |
translate([-settingSize, -settingSize/2, 0]) | |
minkowski() { | |
translate([settingSize/2, settingSize/2, (diskHeight-1)/2]) | |
cylinder(1, r = settingSize / 2, center=true); | |
translate([settingSize/2, 0, diskHeight/2]) | |
sphere(r=settingRaisedEdge, $fn=$fn); | |
} | |
// setting rim, right side | |
rotate([0,0, (maxDegrees - 90)]) | |
translate([0, radius - settingInset, 0]) | |
translate([-settingSize, -settingSize/2, 0]) | |
minkowski() { | |
translate([settingSize/2, settingSize/2, (diskHeight-1)/2]) | |
cylinder(1, r = settingSize / 2, center=true); | |
translate([settingSize/2, 0, diskHeight/2]) | |
sphere(r=settingRaisedEdge, $fn=$fn); | |
} | |
} | |
union() { | |
// setting slot | |
translate([0,0,-diskHeight/2]) | |
rotate([0,0, (90 - maxDegrees) / 2]) | |
rotate_extrude(angle = (90 - maxDegrees) * 2, convexity = 10, $fn = $fnHole) | |
translate([radius - settingInset - settingSize / 2, 0]) | |
square([settingSize, (diskHeight + settingRaisedEdge)*2]); | |
// setting slot rounded, left side | |
rotate([0,0, (90 - maxDegrees)]) | |
translate([0, radius - settingInset, 0]) | |
cylinder((diskHeight + settingRaisedEdge) * 3, r = settingSize / 2, center=true, $fn = $fnHole); | |
// setting slot rounded, right side | |
rotate([0,0, (maxDegrees - 90)]) | |
translate([0, radius - settingInset, 0]) | |
cylinder((diskHeight + settingRaisedEdge) * 3, r = settingSize / 2, center=true, $fn = $fnHole); | |
} | |
} | |
} | |
module fence() { | |
difference() { | |
translate([-trimWidth / 2, -fenceThickness/2, 0]) | |
cube([trimWidth, fenceThickness, fenceHeight]); | |
translate([-trimWidth/3,0, fenceHeight/2]) | |
rotate([90,0,0]) | |
cylinder(fenceThickness * 3, r = mountingHoleDiameter, $fn = $fnHole, center=true); | |
translate([trimWidth/3,0, fenceHeight/2]) | |
rotate([90,0,0]) | |
cylinder(fenceThickness * 3, r = mountingHoleDiameter, $fn = $fnHole, center=true); | |
} | |
} | |
module ticks() { | |
color("grey") | |
union() { | |
for (i = [(maxDegrees - 90):step:(90 - maxDegrees)]) { | |
tickLength = | |
i % 10 == 0 ? 10 | |
: i % 5 == 0 ? 5 | |
: i % 1 == 0 ? 3 | |
: 1; | |
rotate([0,0,i]) | |
translate([0, radius - 1 - tickLength / 2, diskHeight]) | |
cube([tickWidth, tickLength, tickHeight], center=true); | |
if (i % 10 == 0) { | |
rotate([0,0,i]) | |
translate([0, radius - 1 - tickLength / 2, diskHeight]) | |
rotate([0,0,180]) | |
linear_extrude(height = 0.5) { | |
text(text = str(90 - abs(i)), size = fontSize, valign = "bottom", halign = "center"); | |
} | |
} | |
} | |
} | |
} | |
module originbolthole() { | |
cylinder(fenceHeight*3, r=originBoltHoleDiameter/2, center=true, $fn=$fnHole); | |
} | |
difference() { | |
union() { | |
base(); | |
fence(); | |
} | |
originbolthole(); | |
} | |
ticks(); |
This file contains hidden or 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
inch = 25.4; | |
$fn = 360; | |
guidelock_width = 23.5; | |
guidelock_height = 4; | |
main_width = 19; | |
full_height = 11; | |
protractorInset = 1*inch; | |
settingInset = 1*inch; | |
distanceBetweenSettingAndOrigin = 96.52; | |
settingBoltDiameter = 5.1; | |
originBoltDiameter = 0.141 * inch; | |
originNutHeight = 1/8 * inch; | |
originNutDiameter = 7/16 * inch; | |
//slideSample(); | |
//slide(200); | |
slideWithBoltHoles(200); | |
module slideSample() { | |
difference() { | |
slide(inch); | |
translate([inch / 3, 0, 0]) | |
settingBolt(); | |
translate([-inch / 4, 0, 0]) | |
pivotBolt(); | |
} | |
} | |
module slideWithBoltHoles(length) { | |
difference() { | |
slide(length); | |
translate([length / 2 - protractorInset - settingInset, 0, 0]) | |
settingBolt(); | |
translate([length / 2 - protractorInset - settingInset - distanceBetweenSettingAndOrigin, 0, 0]) | |
pivotBolt(); | |
} | |
} | |
module slide(length) { | |
translate([0,0, (guidelock_height - full_height) / 2]) | |
cube([length, guidelock_width, guidelock_height], center=true); | |
cube([length, main_width, full_height], center=true); | |
} | |
module settingBolt() { | |
cylinder(full_height * 3, r=settingBoltDiameter/2, $fn=$fn, center = true); | |
} | |
module pivotBolt() { | |
union() { | |
translate([0, 0, 0]) | |
cylinder(full_height * 3, r=originBoltDiameter/2, $fn=$fn, center = true); | |
translate([0, 0, (originNutHeight - full_height - 1)/2]) | |
cylinder(originNutHeight + 1, r=originNutDiameter/2, $fn=$fn, center = true); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment