module sprocket(teeth=20, roller=3, pitch=17, thickness=3, tolerance=0.2){ //$fs=0.5; roller=roller/2; //We need radius in our calculations, not diameter distance_from_center=pitch/(2*sin(180/teeth)); echo(distance_from_center); angle=(360/teeth); pitch_circle=sqrt((distance_from_center*distance_from_center) - (pitch*(roller+tolerance))+((roller+tolerance)*(roller+tolerance))); echo(pitch_circle); difference(){ union(){ cylinder(r=pitch_circle,h=thickness); for(tooth=[1:teeth]){ intersection(){ rotate(a=[0,0,angle*(tooth+0.5)]){ translate([distance_from_center,0,0]){ cylinder(r=pitch-roller-tolerance,h=thickness); } } rotate(a=[0,0,angle*(tooth-0.5)]){ translate([distance_from_center,0,0]){ cylinder(r=pitch-roller-tolerance,h=thickness); } } } } } for(tooth=[1:teeth]){ rotate(a=[0,0,angle*(tooth+0.5)]){ translate([distance_from_center,0,-1]){ cylinder(r=roller+tolerance,h=thickness+2); } } } } } // hole in center module hole(){ translate([0,0,-1]) cylinder (r=2*25.4/2, h=50); } //measurements in inches //sprocket(number_of_teeth,roller_diameter,pitch_length,thickness,tolerance); mrollerdia=25.4*0.13; mpitchlen=25.4*0.25; mthickness=25.4*0.1; mtolerance=25.4*0.001; difference(){ sprocket(40,mrollerdia,mpitchlen,mthickness,mtolerance); hole(); } /* difference(){ cylinder(r=3/8*25.4/2+10,h=10+mthickness); hole(); } */