
gears
thingiverse
function main(params) { var dist = (params.numTeeth*params.circularPitch/8.28) +(params.numTeeth2*params.circularPitch2/8.28); var gear = Gear(params).translate([dist,dist,0]); params.numTeeth = numTeeth; params.circularPitch = circularPitch; params.pressureAngle = pressureAngle; params.clearance = clearance; params.thickness = thickness; function involuteGear(numTeeth, circularPitch, pressureAngle, clearance, thickness) { var addendum = circularPitch / Math.PI; var dedendum = addendum + clearance; var pitchRadius = numTeeth * circularPitch / (2 * Math.PI); var baseRadius = pitchRadius * Math.cos(Math.PI * pressureAngle / 180); var outerRadius = pitchRadius + addendum; var rootRadius = pitchRadius - dedendum; var maxtanlength = Math.sqrt(outerRadius*outerRadius - baseRadius*baseRadius); var maxangle = maxtanlength / baseRadius; var tl_at_pitchcircle = Math.sqrt(pitchRadius*pitchRadius - baseRadius*baseRadius); var angle_at_pitchcircle = tl_at_pitchcircle / baseRadius; var diffangle = angle_at_pitchcircle - Math.atan(angle_at_pitchcircle); var angularToothWidthAtBase = Math.PI / numTeeth + 2*diffangle; var resolution = 5; var points = [new CSG.Vector2D(0,0)]; for(var i = 0; i <= resolution; i++) { var angle = maxangle * i / resolution; var tanlength = angle * baseRadius; var radvector = CSG.Vector2D.fromAngle(angle); var tanvector = radvector.normal(); var p = radvector.times(baseRadius).plus(tanvector.times(tanlength)); points[i+1] = p; radvector = CSG.Vector2D.fromAngle(angularToothWidthAtBase - angle); tanvector = radvector.normal().negated(); p = radvector.times(baseRadius).plus(tanvector.times(tanlength)); points[2 * resolution + 2 - i] = p; } var tooth3d = new CSG.Polygon2D(points).extrude({offset: [0, 0, thickness]}); var allteeth = new CSG(); for(var i = 0; i < numTeeth; i++) { var angle = i*360/numTeeth; var rotatedtooth = tooth3d.rotateZ(angle); allteeth = allteeth.unionForNonIntersecting(rotatedtooth); } points = []; var toothAngle = 2 * Math.PI / numTeeth; var toothCenterAngle = 0.5 * angularToothWidthAtBase; for(var i = 0; i < numTeeth; i++) { var angle = toothCenterAngle + i * toothAngle; var p = CSG.Vector2D.fromAngle(angle).times(rootRadius); points.push(p); } var rootcircle = new CSG.Polygon2D(points).extrude({offset: [0, 0, thickness]}); var result = rootcircle.union(allteeth); return result; } function Gear(params) { if(arguments.length < 3) pressureAngle = 20; if(arguments.length < 4) clearance = 0; if(arguments.length < 5) thickness = 1; var addendum = circularPitch / Math.PI; var dedendum = addendum + clearance; var pitchRadius = numTeeth * circularPitch / (2 * Math.PI); var baseRadius = pitchRadius * Math.cos(Math.PI * pressureAngle / 180); var outerRadius = pitchRadius + addendum; var rootRadius = pitchRadius - dedendum; var maxtanlength = Math.sqrt(outerRadius*outerRadius - baseRadius*baseRadius); var maxangle = maxtanlength / baseRadius; var tl_at_pitchcircle = Math.sqrt(pitchRadius*pitchRadius - baseRadius*baseRadius); var angle_at_pitchcircle = tl_at_pitchcircle / baseRadius; var diffangle = angle_at_pitchcircle - Math.atan(angle_at_pitchcircle); var angularToothWidthAtBase = Math.PI / numTeeth + 2*diffangle; var resolution = 5; var points = [new CSG.Vector2D(0,0)]; for(var i = 0; i <= resolution; i++) { var angle = maxangle * i / resolution; var tanlength = angle * baseRadius; var radvector = CSG.Vector2D.fromAngle(angle); var tanvector = radvector.normal(); var p = radvector.times(baseRadius).plus(tanvector.times(tanlength)); points[i+1] = p; radvector = CSG.Vector2D.fromAngle(angularToothWidthAtBase - angle); tanvector = radvector.normal().negated(); p = radvector.times(baseRadius).plus(tanvector.times(tanlength)); points[2 * resolution + 2 - i] = p; } var tooth3d = new CSG.Polygon2D(points).extrude({offset: [0, 0, thickness]}); var allteeth = new CSG(); for(var i = 0; i < numTeeth; i++) { var angle = i*360/numTeeth; var rotatedtooth = tooth3d.rotateZ(angle); allteeth = allteeth.unionForNonIntersecting(rotatedtooth); } points = []; var toothAngle = 2 * Math.PI / numTeeth; var toothCenterAngle = 0.5 * angularToothWidthAtBase; for(var i = 0; i < numTeeth; i++) { var angle = toothCenterAngle + i * toothAngle; var p = CSG.Vector2D.fromAngle(angle).times(rootRadius); points.push(p); } var rootcircle = new CSG.Polygon2D(points).extrude({offset: [0, 0, thickness]}); var result = rootcircle.union(allteeth); return result; } }
With this file you will be able to print gears with your 3D printer. Click on the button and save the file on your computer to work, edit or customize your design. You can also find more 3D designs for printers on gears.