1
0
Fork 0
3d/lawnmower washer.scad
2024-11-20 21:28:34 -05:00

96 lines
No EOL
4 KiB
OpenSCAD

// Lawnmower washer square thing
// length units are millimeters
tolerance = 1.00;
topMetalWasherLength = 45.00 + tolerance; // this is (basically) square
innerShaftDiameter = 22.30;
bulbsLength = 32.40;
bulbsDiameter = 11.60;
bladeWidth = 44.40 + tolerance;
washerThickness = 3.00; // 2.00;
metalWasherThickness = 4.00; // 3.46;
bladeThickness = 2.50; // 2.24;
minGuideRidgeThickness = 8.00; // 3.00;
bladeBumpWidth = bladeWidth * 0.3333;
bladeBumpHeight = bladeThickness;
innerShaftRadius = innerShaftDiameter / 2;
bulbRadius = bulbsDiameter / 2;
washerLength = max(topMetalWasherLength, bladeWidth) + (minGuideRidgeThickness * 2);
bladeRidgeThickness = max(minGuideRidgeThickness, (washerLength - bladeWidth) / 2);
metalWasherRidgeThickness = max(minGuideRidgeThickness, (washerLength - topMetalWasherLength) / 2);
bladeBumpOffsetFromCenter = washerLength * 0.375;
circleResolution=360*4; // faces per rotation
zFightingOffset=0.01; // offset for shape subtraction
module shaft(height) {
cylinder(r=innerShaftRadius, h=height, $fn=circleResolution);
translate([-(bulbsLength - (bulbRadius * 2)) / 2,-bulbRadius,0])
cube([bulbsLength - (bulbRadius * 2), bulbRadius * 2, height]);
translate([innerShaftRadius, 0, 0])
cylinder(r=bulbRadius, h=height, $fn=circleResolution);
translate([-innerShaftRadius, 0, 0])
cylinder(r=bulbRadius, h=height, $fn=circleResolution);
}
module bump(length, width, height) {
translate([0, width/2, height])
scale([length, width / 2, height])
rotate([0, 90, 0])
cylinder(r=1, h=1, $fn=circleResolution);
translate([0, 0, height])
cube([length, width, height + zFightingOffset]);
}
//bump(washerLength, bladeBumpWidth + zFightingOffset, washerThickness);
difference() {
translate([-washerLength / 2, -washerLength / 2, 0]) {
cube([washerLength, washerLength, washerThickness]);
// blade ridges
translate([0, washerLength / 2, washerThickness - zFightingOffset]) {
translate([0, - (bladeWidth / 2) - bladeRidgeThickness,0])
cube([washerLength, bladeRidgeThickness, bladeThickness]);
translate([0, bladeWidth / 2,0])
cube([washerLength, bladeRidgeThickness, bladeThickness]);
}
// metal washer ridges (standard)
translate([washerLength / 2, 0, - metalWasherThickness + zFightingOffset]) {
translate([-(topMetalWasherLength / 2) - metalWasherRidgeThickness, 0,0])
cube([metalWasherRidgeThickness, washerLength, metalWasherThickness]);
translate([topMetalWasherLength / 2,0,0])
cube([metalWasherRidgeThickness, washerLength, metalWasherThickness]);
}
// metal washer ridges (optional)
translate([0, washerLength / 2, - metalWasherThickness + zFightingOffset]) {
translate([0, -(topMetalWasherLength / 2) - metalWasherRidgeThickness,0])
cube([washerLength, metalWasherRidgeThickness, metalWasherThickness]);
translate([0, topMetalWasherLength / 2,0])
cube([washerLength, metalWasherRidgeThickness, metalWasherThickness]);
}
}
translate([0,0,-zFightingOffset]) {
// shaft
rotate([0,0,0])
shaft(washerThickness + (zFightingOffset * 2));
// blade shaft bumps
translate([0, -bladeBumpWidth/2, washerThickness - bladeBumpHeight]) {
translate([-(washerLength + bladeBumpOffsetFromCenter), 0, 0])
bump(washerLength, bladeBumpWidth + zFightingOffset, washerThickness);
translate([bladeBumpOffsetFromCenter, 0, 0])
bump(washerLength, bladeBumpWidth + zFightingOffset, washerThickness);
}
}
/*
// blade stand-in
translate([-50, -bladeWidth/2, washerThickness])
#cube([100, bladeWidth, bladeThickness]);
// top metal washer stand-in
translate([-topMetalWasherLength/2, -topMetalWasherLength/2, -metalWasherThickness])
#cube([topMetalWasherLength, topMetalWasherLength, metalWasherThickness]);
*/
}