MattSCAD/metric_bolts.scad

101 lines
3.4 KiB
OpenSCAD
Raw Normal View History

2021-10-17 19:21:17 +00:00
capSizeMSizeMultiplier = 1.66*1.01;
printingKerfMM = 0.6;
circleFacets = 60;
boltColour = "LightSkyBlue";
boltClearanceColour = "LightSteelBlue";
2021-08-18 23:45:53 +00:00
module metricBoltHex(mSize, structural=false, recessNut=0, chamfer=false){
// Hex diameter = mSize * 1.8, (or 2.0 if structural
// We add 1% to make the hex slip in better
2021-10-17 19:21:17 +00:00
hexDiameter = (mSize * (structural?2.0:1.8) * 1.01) + printingKerfMM;
2021-10-17 19:21:17 +00:00
color(boltColour)
2021-08-18 23:45:53 +00:00
translate([0,0,(mSize*0.7)/2])
cylinder(d=hexDiameter,h=mSize * 0.7, $fn=6, center=true);
if(recessNut > 0){
2021-10-17 19:21:17 +00:00
color(boltClearanceColour)
translate([0,0,(recessNut/2)*-1])
2021-10-17 19:21:17 +00:00
cylinder(d=hexDiameter,h=recessNut, $fn=6, center=true);
2021-08-18 23:45:53 +00:00
}
if(chamfer){
chamferHeight = mSize*1.5*0.595;
2021-10-17 19:21:17 +00:00
color(boltClearanceColour)
2021-08-18 23:45:53 +00:00
translate([0,0,(mSize * 0.7)+(chamferHeight/2)])
cylinder(d1=hexDiameter,d2=0,h=chamferHeight, center=true, $fn=6);
2021-08-18 23:45:53 +00:00
}
}
module metricSocketCap(mSize, length, structural=false,recessCap=0, chamfer=false){
//cap size = M number * 1.5.
// We add 1% to make the cap head spin nicely in the hole.
2021-10-17 19:21:17 +00:00
capSize = (mSize * capSizeMSizeMultiplier) + printingKerfMM;
color(boltColour)
translate([0,0,(length + ((mSize*1.25)/2))])
cylinder(d=capSize,h=mSize*1.25, center=true, $fn=circleFacets);
echo (str("cap size is ", capSize));
2021-08-18 23:45:53 +00:00
if(recessCap > 0){
2021-10-17 19:21:17 +00:00
color(boltClearanceColour)
2021-08-18 23:45:53 +00:00
translate([0,0,(length + ((recessCap/2)+(mSize*1.25)))])
2021-10-17 19:21:17 +00:00
cylinder(d=capSize,h=recessCap, center=true, $fn=circleFacets);
2021-08-18 23:45:53 +00:00
}
if(chamfer){
2021-10-17 19:21:17 +00:00
color(boltClearanceColour)
2021-08-18 23:45:53 +00:00
translate([0,0,(length-((mSize*1.5*0.595)/2))])
2021-10-17 19:21:17 +00:00
cylinder(d2=capSize,d1=0,h=mSize*1.5*0.595, center=true, $fn=circleFacets);
2021-08-18 23:45:53 +00:00
}
}
module metricShaft(mSize, length, structural=false){
2021-10-17 19:21:17 +00:00
color(boltColour)
translate([0,0,(length/2)])
cylinder(d=mSize+printingKerfMM, h=length+0.01, center=true, $fn=circleFacets);
2021-08-18 23:45:53 +00:00
}
module metricSocketScrew(mSize, length, structural=false, recessCap=0, chamfer=false){
metricSocketCap(mSize, length, structural=structural, recessCap=recessCap, chamfer=chamfer);
metricShaft(mSize, length, structural=structural);
}
module metricCapheadAndBolt(mSize, length=40, structural=false, recessCap=0, recessNut=0, chamfer=false){
2021-10-17 19:21:17 +00:00
capSize = (mSize * capSizeMSizeMultiplier) + printingKerfMM;
echo (str("Creating a M",mSize, " size, ", length, "mm long bolt with a ", capSize, "mm wide caphead and bolt ", chamfer?"with":"without", " chamfering."));
2021-08-18 23:45:53 +00:00
if(recessCap){
echo (str("It has a ", recessCap, "mm recessed cap"));
}
if(recessNut){
echo (str("It has a ", recessCap, "mm recessed nut"));
}
2021-10-17 19:21:17 +00:00
translate([0,0,((length/2)+((mSize*1.25)/2))*-1])
union(){
translate([0, 0, 0])
metricSocketScrew(mSize, length, structural=structural, recessCap=recessCap, chamfer=chamfer);
metricBoltHex(mSize,structural, recessNut=recessNut, chamfer=chamfer);
}
2021-08-18 23:45:53 +00:00
}
2021-10-17 19:21:17 +00:00
/**/
translate([0,10,0])
metricCapheadAndBolt(6, 40);
2021-08-18 23:45:53 +00:00
2021-10-17 19:21:17 +00:00
translate([20,10,0])
metricCapheadAndBolt(6, 40, recessNut=1, recessCap=1, chamfer=true);
/**/
/*
2021-08-18 23:45:53 +00:00
translate([0,10,0])
metricCapheadAndBolt(6, 20, recessNut=10, recessCap=10);
/*
2021-08-18 23:45:53 +00:00
translate([0,20,0])
metricCapheadAndBolt(6, 20, chamfer=true);
translate([20,0,0])
metricCapheadAndBolt(10, 40);
translate([20,20,0])
metricCapheadAndBolt(10, 40, recessNut=10, recessCap=10);
translate([20,40,0])
metricCapheadAndBolt(10, 40, chamfer=true);
*/