use use use use shaftd=9.49; // 3/8" shaftback=21.41 + shaftd/2; shaftz=21.75+shaftd/2; flat=9.30; ringh=3; ringw=2; GMod=.8; module shaft(h, shaftd) { difference() { cylinder(d=shaftd, h=h, $fs=.1); for (r=[0,120,240]) rotate([0,0,r]) translate([flat/2,-shaftd/2,-.05]) cube([shaftd/2,shaftd, h + .1]); } } module drive_gear() { difference() { spur_gear(m=2, n=12, z=ringh, chamfer=10); translate([0,0,-(ringh+2)/2]) shaft(h=ringh+2, shaftd=4); } } module planet_gear(nt=10, gh, sh=4, m, ha=30) { gfn = $preview ? 9 : 18; difference() { rotate([0,0,36/2]) spur_gear(m=m, n=nt, z=gh, chamfer=20, helix_angle=-ha, $fn=gfn, x=-.2); cylinder(d=sh, h=gh+.1, $fs=.1, center=true); } } module planet_carrier(nt=7, np=7, ns=49, m=GMod, incolor=true, pcolor="blue", ccolor="green", ha=30, rh=ringh) { gfn = $preview ? 9 : 15; cfs = $preview ? .1 : 2; ratio = ns/np; meshd = m*(ns+nt)/2; planet_r = [ for (i = [0: 360/np : 360]) i + 90]; //planet_w = 180/-m*(nt/ns); planet_w = ns % nt; bodr = m*(ns+2*nt) - 4; echo("Carrier Body Radius: ", bodr); planet_color = incolor ? pcolor : undef; carrier_color = incolor ? ccolor : undef; color(planet_color) for (r=planet_r) { rotate([0,0,r]) translate([meshd,0]) rotate([0,0,planet_w-r]) planet_gear(nt=nt, sh=4, m=m, gh=rh, ha=herringbone(helix=30, $fn=gfn)); } color(carrier_color) translate([0,0,0]) difference() { union() { rotate([0,0,30]) cylinder(d=bodr, h=rh+2.4, center=true,$fs=cfs); } translate([0,0,ringh+1.2]) cylinder(d=309, h=2.3, center=true, $fs=cfs); // Planet Orbits for (r=planet_r) { rotate([0,0,r]) translate([meshd,0]) difference() { cylinder(d=2+m+nt*m, h=rh+.4, center=true, $fs=cfs); cylinder(d=4-.4, h=rh+.6, center=true, $fs=cfs); } } // Sun void cylinder(d=2+m+ns*m, h=rh+.4, center=true, $fs=cfs); cylinder(d=10, h=rh+.4, center=false, $fs=cfs); } } module motor_gear(GMod=.8, z=8.25) { //z=2*ringh; // translate([0,0]) spur_gear(m=GMod, n=5, z=z, helix_angle=-30); linear_extrude(height=z, twist=72*z/8.25) projection() spur_gear(m=GMod, n=5, z=1, helix_angle=0); } module sun_gear(GMod=.8, nt=49, ha=30, h=2*ringh) { gfn = $preview ? 9 : 15; sd = 5.1; spur_gear(m=GMod, n=nt, z=h, chamfer=20, helix_angle=ha, x=-.2, $fn=gfn); cylinder(d=7.9, h=h+9.2, center=false, $fs=.1); translate([0,7.9/2,h+6 +.2]) cube([2.95,2,6], center=true); color("red") translate([0,0,h/2+3+sd]) input_gear(nt=55, ha=-30); } module input_gear(GMod=.8, nt=49, ha=30, h=2*ringh) { spur_gear(m=GMod, n=nt, z=h, chamfer=00, helix_angle=ha); } module ring_gear(np=14, ns=49, m=GMod, ww=1.5, rh=ringh) { n=2*np + ns; bodr = m*(ns+np/2) + .2; bd = n*m + 2*ww; ha = herringbone(helix=-30, $fn=9); gfn = $preview ? 9 : 15; cfs = $preview ? .1 : 2; ch= rh; difference() { intersection () { cylinder(h=ch+2*ww, d=bd, center=true); //translate([-4,0,-5]) cube([50,60,20]); } //#translate([0,0,ringh/2+.7]) // middle clearance cylinder(h=ch+.6, d=bd-2*ww-2, center=true, $fs=cfs); cylinder(h=ch+.6+2, d=bodr, center=true, $fs=cfs); spur_gear(m=m, n=n, z=rh+.2, chamfer=00, helix_angle=ha, type=1, x=.3, ded=-.2, add=.2, $fn=gfn); // Top Opening translate([0,0,(ch/2 +ww/2)]) cylinder(h=ww+.1, d=11, center=true); // Bottom Opening translate([0,0,-(ch/2 +ww/2)]) cylinder(h=ww+.1, d=11, center=true); } } module gearbox(ww) { motor_r = 3*360/14 -90; m=GMod; ns=9; np=7; nt=24; nr=ns+2*nt; R=-nr/ns; echo("R= ", R); echo("Output: ", (1/(1+R))); echo("Ring Size: ", nr); color(sun_color) sun_gear(nt=ns, h=ringh, ha=herringbone(helix=30, $fn=9)); planet_carrier(incolor=incolor, ns=ns, np=3, nt=nt); difference() { //rr = 180/(ns+2*nt); rr=0; rotate([0,0,rr]) ring_gear(np=nt,ns=ns, ww=5); translate([0,-shaftz-1,0]) cube([20,2,ringh+2*ww+.2], center=true); } } incolor=true; drive_color = incolor ? "green" : undef; sun_color = incolor ? "yellow" : undef; ww=5; translate([0,shaftz,0]) { difference() { gearbox(ww=ww); //translate([-30,-30]) //cube([60,60,40]); //translate([0,-shaftz-1,0]) cube([20,2,ringh+2*ww+.2], center=true);2 } // Input Drive mgt=5; tgt=49; igt=55; im=.8; mmd=-im*(tgt+mgt)/2; imd=-im*(igt+tgt)/2; translate([0,0,5.1+3+ringh/2]) { //color("red") input_gear(nt=igt, ha=-30); echo("Motor Transmission D: ", mmd); translate([imd,0]) color("darkslategrey") input_gear(); echo("Motor Drive D: ", mmd+imd); translate([mmd+imd,0,-5]) rotate([0,0,5/8.25*72]) color("white") motor_gear(); } // Input Body Ri(D); } // Base Plate translate([-60,0,-5]) cube([90,3,10]); // Drive gear //%rotate([0,0,motor_r]) translate([-m*(49+5)/2,0]) color(drive_color) { // z=8.25; // rotate([0,0,(ns-np) * motor_r *.8 +180]) { // translate([0,0,0]) motor_gear(z=z); // translate([0,0,-z]) motor_gear(z=z); // } //} //rotate([0,0,36]) %sun_gear(); //translate([20,0,0]) spur_gear(m=.64, n=13, z=ringh, chamfer=10, helix_angle=30); //rotate([0,0,0]) spur_gear(m=.64, n=13, z=ringh, chamfer=10, helix_angle=-30);