Models / Spur gear pair

Spur gear pair

A pair of spur gears with involute teeth, cut from one sheet.

The cut file as the downloads lay it out: 158.9 × 108 mm, 2 parts on 1 sheet. Rendered by KerfScript 0.2.0 from the source below.

A pair of plywood gears

Source 65 lines

// A pair of spur gears with involute teeth, cut from one sheet.
 
/* [Gears] */
// Teeth on the large gear
teeth_large = 32; // [12:1:80]
// Teeth on the small gear
teeth_small = 14; // [8:1:40]
// Tooth size (module) in mm
tooth = 3; // [1.5:0.25:6]
// Pressure angle
pressure = 20; // [14.5, 20, 25]
 
/* [Hub] */
// Shaft hole diameter
bore = 6; // [2:0.5:20]
// Lightening holes in gears with this many teeth or more
spokes_from = 24; // [12:1:100]
 
/* [Hidden] */
$fn = 96;
 
function rad(d) = d * PI / 180;
function deg(r) = r * 180 / PI;
function inv(a) = tan(a) - rad(a);
 
// Point on the involute of a circle of radius rb, at roll parameter t (radians).
function flank_angle(t) = t - atan(t) * PI / 180;
 
module gear(z) {
  rp = tooth * z / 2;
  rb = rp * cos(pressure);
  ra = rp + tooth;
  rd = rp - 1.25 * tooth;
  half = 90 / z + deg(inv(pressure));
  t0 = rd > rb ? sqrt(pow(rd / rb, 2) - 1) : 0;
  t1 = sqrt(pow(ra / rb, 2) - 1);
  steps = 8;
  flank = [for (i = [0:steps]) let (t = t0 + (t1 - t0) * i / steps)
    [rb * sqrt(1 + t * t), deg(flank_angle(t))]];
  tooth_pts = concat(
    rd < rb ? [[rd, -half]] : [],
    [for (p = flank) [p[0], -half + p[1]]],
    [for (i = [steps:-1:0]) [flank[i][0], half - flank[i][1]]],
    rd < rb ? [[rd, half]] : []
  );
  pts = [for (k = [0:z - 1], p = tooth_pts)
    let (a = p[1] + k * 360 / z) [p[0] * cos(a), p[0] * sin(a)]];
  difference() {
    polygon(pts);
    circle(d = bore);
    if (z >= spokes_from) {
      r_in = bore + 4;
      r_out = rd - 2.5 * tooth;
      for (k = [0:4]) rotate(k * 72 + 36)
        hull() {
          translate([r_in + 4, 0]) circle(r = 2.5);
          rotate(-22) translate([r_out - 2.5, 0]) circle(r = 2.5);
          rotate(22) translate([r_out - 2.5, 0]) circle(r = 2.5);
        }
    }
  }
}
 
part("large gear") gear(teeth_large);
part("small gear") gear(teeth_small);