Trying to work on the Halloween project.

I’ve had this idea in my head for a halloween project.   I never leave myself enough time when halloween approaches…  Anyway.  I want to have a pumpking rotate and do a Linda Blair with some candy…

I had made a rotary table last year using gears and a lasy susan type bearing  and I was unhappy with the results.  Basically the bearing had way to much endplay..  I’m thinking I probably be better off with some type of belt instead of a gear mesh.

Recently, I was a trade show and I picked up on these gear bearings.

It’s actually pretty cool.   The gear bearing sample that I had was of much higher quality.

So one of the things I want to do is to hack this thing up and put a mounting flange and a belt cog on the ring gear and extend the sun gear to make a mounting shaft.

To get this into freecad, I’ve been told the way to do this fire up scad and load bearing.scad and then export it from scad as a csg and then import it into free cad… Some info here

At somepoint, if I ever have time, I’d love to get this converted into a freecad python script… Anyway… here’s what it looks like in scad.

screenshotwnScad

So… I went Design=>Export as Csg…   That went ok…  I then tried to import into freecad… Even with

“If FreeCAD crashes when importing CSG, it is strongly recommended that you enable ‘automatically check model after boolean operation’ in Menu -> Edit -> Preferences -> Part Design -> Model setting”

I was still getting crashes…. ;(  Oh well.

This is scad script which generates the gear…

 

 

// 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))
];

 

This entry was posted in Uncategorized. Bookmark the permalink.

One Response to Trying to work on the Halloween project.

  1. pepe says:

    I also wanted to modify gear bearing,
    many many many many thanks 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *