* Gears DLC (free) Using the involuteCircular fn to create a variety of cylindrical gearsets * Delete public/kcl-samples/gear directory * Update main.kcl fixing gear meshing * new samples Signed-off-by: Jess Frazelle <github@jessfraz.com> * add link Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com> Co-authored-by: Jess Frazelle <jessfraz@users.noreply.github.com> Co-authored-by: Jess Frazelle <github@jessfraz.com>
100 lines
3.5 KiB
Plaintext
100 lines
3.5 KiB
Plaintext
// Helical Gear
|
|
// A helical gear is a type of cylindrical gear where the teeth are slanted at an angle relative to the axis of rotation. This greatly reduces noise and wear when transmitting torque across meshed spinning gears
|
|
|
|
// Set units
|
|
@settings(defaultLengthUnit = mm)
|
|
|
|
// Define a function to create a helical gear
|
|
fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) {
|
|
// Calculate gear parameters
|
|
pitchDiameter = module * nTeeth
|
|
addendum = module
|
|
deddendum = 1.25 * module
|
|
baseDiameter = pitchDiameter * cos(pressureAngle)
|
|
tipDiameter = pitchDiameter + 2 * module
|
|
|
|
// Define the constants of the keyway and the bore hole
|
|
keywayWidth = 2
|
|
keywayDepth = keywayWidth / 2
|
|
holeDiam = 7
|
|
holeRadius = holeDiam / 2
|
|
startAngle = asin(keywayWidth / 2 / holeRadius)
|
|
|
|
// Sketch the keyway and center hole
|
|
holeWithKeyway = startSketchOn(XY)
|
|
|> startProfile(at = [
|
|
holeRadius * cos(startAngle),
|
|
holeRadius * sin(startAngle)
|
|
])
|
|
|> xLine(length = keywayDepth)
|
|
|> yLine(length = -keywayWidth)
|
|
|> xLine(length = -keywayDepth)
|
|
|> arc(angleStart = -1 * startAngle + 360, angleEnd = 180, radius = holeRadius)
|
|
|> arc(angleStart = 180, angleEnd = startAngle, radius = holeRadius)
|
|
|> close()
|
|
|
|
// Define a function to create a rotated gear sketch on an offset plane
|
|
fn helicalGearSketch(offsetHeight) {
|
|
// Calculate the amount to rotate each planar sketch of the gear given the gear helix angle and total gear height
|
|
helixCalc = acos(offsetHeight * tan(helixAngle) / (tipDiameter / 2))
|
|
|
|
// Using the gear parameters, sketch an involute tooth spanning from the base diameter to the tip diameter
|
|
helicalGearSketch = startSketchOn(offsetPlane(XY, offset = offsetHeight))
|
|
|> startProfile(at = polar(angle = helixCalc, length = baseDiameter / 2))
|
|
|> involuteCircular(
|
|
startRadius = baseDiameter / 2,
|
|
endRadius = tipDiameter / 2,
|
|
angle = helixCalc,
|
|
tag = $seg01,
|
|
)
|
|
|> line(endAbsolute = polar(angle = 160 / nTeeth + helixCalc, length = tipDiameter / 2))
|
|
|> involuteCircular(
|
|
startRadius = baseDiameter / 2,
|
|
endRadius = tipDiameter / 2,
|
|
angle = -(4 * atan(segEndY(seg01) / segEndX(seg01)) - (3 * helixCalc)),
|
|
reverse = true,
|
|
)
|
|
|
|
// Position the end line of the sketch at the start of the next tooth
|
|
|> line(endAbsolute = polar(angle = 360 / nTeeth + helixCalc, length = baseDiameter / 2))
|
|
|
|
// Pattern the sketch about the center by the specified number of teeth, then close the sketch
|
|
|> patternCircular2d(
|
|
%,
|
|
instances = nTeeth,
|
|
center = [0, 0],
|
|
arcDegrees = 360,
|
|
rotateDuplicates = true,
|
|
)
|
|
|> close()
|
|
|> subtract2d(tool = holeWithKeyway)
|
|
return helicalGearSketch
|
|
}
|
|
|
|
// Draw a gear sketch on the base plane
|
|
gearSketch001 = helicalGearSketch(offsetHeight = 0)
|
|
|
|
// Draw a rotated gear sketch on a middle interstitial plane
|
|
gearSketch002 = helicalGearSketch(offsetHeight = gearHeight / 2)
|
|
|
|
// Draw a rotated gear sketch at the gear height offset plane
|
|
gearSketch003 = helicalGearSketch(offsetHeight = gearHeight)
|
|
|
|
// Loft each rotated gear sketch together to form a helical gear
|
|
helicalGear = loft([
|
|
gearSketch001,
|
|
gearSketch002,
|
|
gearSketch003
|
|
])
|
|
|
|
return helicalGear
|
|
}
|
|
|
|
helicalGear(
|
|
nTeeth = 21,
|
|
module = 2,
|
|
pressureAngle = 20,
|
|
helixAngle = 35,
|
|
gearHeight = 7,
|
|
)
|