aug 1 1442 traveling west
thinking about making the gear meshing functional, i observed the
animations a little and it seems to me that the point where the involute
curve stops, distant from the gear, needs to be moving at most tangent to
the other tooth’s curve, when it does so. if it’s moving instead toward the
surface of the other tooth, then it will begin pressuring the tooth at a
different angle than designed.
this might give a function for the final radius of the involute curve,
which then could be converted to parameters …
1609
it makes more sense if i realize that the pitch point does not need to be
the middle of the involute curve … but then i’m not sure if that works …
1640 i guess there’s a point where the endpoints of the curve touch, and
the radiuses of the curve need to be such that the bases of triangles with
the angles to that point sum to the sum of the pitch radiuses of the to
gears 1642
2240 i was looking at
https://upload.wikimedia.org/wikipedia/commons/c/c2/Involute_wheel.gif briefly
and noting that they cut the gear teeth short such that the final contact
point does not reach the base of the opposing tooth … maybe there are a
handful of balanced properties in the animation, like the radii, but it’s
notable that with this tooth length, exactly one tooth is pressuring at any
point in time
for me, there is a significant portion of the rotation where one gear
cannot pressure the other, and that does seem to be where the lasercut
version gets stuck. i was thinking the helical shape would fix that by
providing other points in the rotation, but i never got a helical one to
print with free moving parts yet
…
i found
https://www.thingiverse.com/thing:53451 where there is an existing
parametric print-in-place helical gear bearing that has been remixed over
6,000 times. hadn’t found it before. theoretically there is openscad source
code somewhere
but i’m thinking the idea of having the helical property help the rotation
seems good, but i should also figure out my tooth radii.
the files of thing 53451 include a .scad
there are customizer apps online that let users reparameter scad files :)
2307 device going very slowly, hard to engage material
the attached file is the source from thingiverse above and is _not_ made by
karl. not sure whether my laptop runs openscad at this time …
2312
// Planetary gear bearing (customizable)
// outer diameter of ring
D=51.7;
// thickness
T=15;
// clearance
tol=0.15;
number_of_planets=5;
number_of_teeth_on_planets=7;
approximate_number_of_teeth_on_sun=9;
// pressure angle
P=45;//[30:60]
// number of teeth to twist across
nTwist=1;
// width of hexagonal hole
w=6.7;
DR=0.5*1;// maximum depth ratio of teeth
m=round(number_of_planets);
np=round(number_of_teeth_on_planets);
ns1=approximate_number_of_teeth_on_sun;
k1=round(2/m*(ns1+np));
k= k1*m%2!=0 ? k1+1 : k1;
ns=k*m/2-np;
echo(ns);
nr=ns+2*np;
pitchD=0.9*D/(1+min(PI/(2*nr*tan(P)),PI*DR/nr));
pitch=pitchD*PI/nr;
echo(pitch);
helix_angle=atan(2*nTwist*pitch/T);
echo(helix_angle);
phi=$t*360/m;
translate([0,0,T/2]){
difference(){
cylinder(r=D/2,h=T,center=true,$fn=100);
herringbone(nr,pitch,P,DR,-tol,helix_angle,T+0.2);
difference(){
translate([0,-D/2,0])rotate([90,0,0])monogram(h=10);
cylinder(r=D/2-0.25,h=T+2,center=true,$fn=100);
}
}
rotate([0,0,(np+1)*180/ns+phi*(ns+np)*2/ns])
difference(){
mirror([0,1,0])
herringbone(ns,pitch,P,DR,tol,helix_angle,T);
cylinder(r=w/sqrt(3),h=T+1,center=true,$fn=6);
}
for(i=[1:m])rotate([0,0,i*360/m+phi])translate([pitchD/2*(ns+np)/nr,0,0])
rotate([0,0,i*ns/m*360/np-phi*(ns+np)/np-phi])
herringbone(np,pitch,P,DR,tol,helix_angle,T);
}
module rack(
number_of_teeth=15,
circular_pitch=10,
pressure_angle=28,
helix_angle=0,
clearance=0,
gear_thickness=5,
flat=false){
addendum=circular_pitch/(4*tan(pressure_angle));
flat_extrude(h=gear_thickness,flat=flat)translate([0,-clearance*cos(pressure_angle)/2])
union(){
translate([0,-0.5-addendum])square([number_of_teeth*circular_pitch,1],center=true);
for(i=[1:number_of_teeth])
translate([circular_pitch*(i-number_of_teeth/2-0.5),0])
polygon(points=[[-circular_pitch/2,-addendum],[circular_pitch/2,-addendum],[0,addendum]]);
}
}
module monogram(h=1)
linear_extrude(height=h,center=true)
translate(-[3,2.5])union(){
difference(){
square([4,5]);
translate([1,1])square([2,3]);
}
square([6,1]);
translate([0,2])square([2,1]);
}
module herringbone(
number_of_teeth=15,
circular_pitch=10,
pressure_angle=28,
depth_ratio=1,
clearance=0,
helix_angle=0,
gear_thickness=5){
union(){
gear(number_of_teeth,
circular_pitch,
pressure_angle,
depth_ratio,
clearance,
helix_angle,
gear_thickness/2);
mirror([0,0,1])
gear(number_of_teeth,
circular_pitch,
pressure_angle,
depth_ratio,
clearance,
helix_angle,
gear_thickness/2);
}}
module gear (
number_of_teeth=15,
circular_pitch=10,
pressure_angle=28,
depth_ratio=1,
clearance=0,
helix_angle=0,
gear_thickness=5,
flat=false){
pitch_radius = number_of_teeth*circular_pitch/(2*PI);
twist=tan(helix_angle)*gear_thickness/pitch_radius*180/PI;
flat_extrude(h=gear_thickness,twist=twist,flat=flat)
gear2D (
number_of_teeth,
circular_pitch,
pressure_angle,
depth_ratio,
clearance);
}
module flat_extrude(h,twist,flat){
if(flat==false)
linear_extrude(height=h,twist=twist,slices=twist/6)child(0);
else
child(0);
}
module gear2D (
number_of_teeth,
circular_pitch,
pressure_angle,
depth_ratio,
clearance){
pitch_radius = number_of_teeth*circular_pitch/(2*PI);
base_radius = pitch_radius*cos(pressure_angle);
depth=circular_pitch/(2*tan(pressure_angle));
outer_radius = clearance<0 ? pitch_radius+depth/2-clearance :
pitch_radius+depth/2;
root_radius1 = pitch_radius-depth/2-clearance/2;
root_radius = (clearance<0 && root_radius1<base_radius) ? base_radius :
root_radius1;
backlash_angle = clearance/(pitch_radius*cos(pressure_angle)) * 180 / PI;
half_thick_angle = 90/number_of_teeth - backlash_angle/2;
pitch_point = involute (base_radius, involute_intersect_angle (base_radius,
pitch_radius));
pitch_angle = atan2 (pitch_point[1], pitch_point[0]);
min_radius = max (base_radius,root_radius);
intersection(){
rotate(90/number_of_teeth)
circle($fn=number_of_teeth*3,r=pitch_radius+depth_ratio*circular_pitch/2-clearance/2);
union(){
rotate(90/number_of_teeth)
circle($fn=number_of_teeth*2,r=max(root_radius,pitch_radius-depth_ratio*circular_pitch/2-clearance/2));
for (i = [1:number_of_teeth])rotate(i*360/number_of_teeth){
halftooth (
pitch_angle,
base_radius,
min_radius,
outer_radius,
half_thick_angle);
mirror([0,1])halftooth (
pitch_angle,
base_radius,
min_radius,
outer_radius,
half_thick_angle);
}
}
}}
module halftooth (
pitch_angle,
base_radius,
min_radius,
outer_radius,
half_thick_angle){
index=[0,1,2,3,4,5];
start_angle = max(involute_intersect_angle (base_radius, min_radius)-5,0);
stop_angle = involute_intersect_angle (base_radius, outer_radius);
angle=index*(stop_angle-start_angle)/index[len(index)-1];
p=[[0,0],
involute(base_radius,angle[0]+start_angle),
involute(base_radius,angle[1]+start_angle),
involute(base_radius,angle[2]+start_angle),
involute(base_radius,angle[3]+start_angle),
involute(base_radius,angle[4]+start_angle),
involute(base_radius,angle[5]+start_angle)];
difference(){
rotate(-pitch_angle-half_thick_angle)polygon(points=p);
square(2*outer_radius);
}}
// Mathematical Functions
//===============
// Finds the angle of the involute about the base radius at the given distance
(radius) from it's center.
//source:
http://www.mathhelpforum.com/math-help/geometry/136011-circle-involute-solving-y-any-given-x.html
function involute_intersect_angle (base_radius, radius) = sqrt (pow
(radius/base_radius, 2) - 1) * 180 / PI;
// Calculate the involute position for a given base radius and involute angle.
function involute (base_radius, involute_angle) =
[
base_radius*(cos (involute_angle) + involute_angle*PI/180*sin
(involute_angle)),
base_radius*(sin (involute_angle) - involute_angle*PI/180*cos
(involute_angle))
];