I was playing with sprockets and chain for driving L3-G0's motors (http://L3-G0.blogspot.com - My full size Lego R2D2, video on Youtube). Having difficulty finding a sprocket supplier, I decided to print some, but I wasn't able to find an OpenSCAD type sprocket library.
This "knows" about many types of ANSI chain, Motorcycle Chain, and maybe Bicycle chain, but I've only tested with ANSI #25 roller chain because that's what L3-G0 uses.
Sizes are: #25, #35, #40, #41, #50, #60 & #80 roller chain, and 420, 425, 428, 520, 525, 530 & 630 motorcycle chain. You can comment if the other sizes work for you (& if you had to tweak the fudges).
L3-G0's complete now, so check out his blog & share with friends. Also please give a thumbs up on his video channel!
Though I included a couple .stl files, Sprockets is intended for you make your own size sprocket using OpenSCAD. It's fairly easy to do your own thing, and if you forget, there're comments in the sprockets.scad file. Skip the first steps if you've played with OpenSCAD and know how libraries behave.
- Get OpenSCAD if you don't have it already, http://www.openscad.org/
- Copy sprockets.scad to some folder on your machine.
- Either use a real library location, or to KISS, just make a new document and save it in the same folder as sprockets.scad.
- Enter something like this into your OpenSCAD script (on the left)
// #25 chain, 9 tooth, sprocket with 5/16" bore.
sprocket(25, 9, 5/16);
- Press F5 (Design->Compile). You'll see a sprocket with 9 teeth for #25 chain
- To make OpenSCAD create an STL file, you have to render it first, press F6 (Design->Compile and Render)
- Design->Export the STL.
You may want to play with some of the fudge factors for your printer, or maybe for other chain sizes. The values I have hard-coded seem to work with my #25 chain, and replicator 1.
Sprockets.scad also seems to use a large # of elements. For 22 teeth, you'll probably have to bump up the preference for turn off rendering # of elements.
sprocket() takes a few parameters. First one is roller chain size, then # of teeth, then bore size (in inches). You can also add a hub
// size: ANSI Roller Chain Standard Sizes, default 25,
// or motorcycle sizes,
// or 1 for bike w/derailleur or 2 for bike w/o derailleur
// teeth: Number of teeth on the sprocket, default 9
// bore: Bore diameter, inches (Chain sizes seem to favor inches), default 5/16
// hub_diameter: Hub diameter, inches, default 0
// hub_height: Hub height TOTAL, default 0.
So, for an example with a hub look at Sprockets15_Hub.scad:
sprocket(25, 15, 1/4, 3/4, 1/4);
That's #25 chain, 15 tooth, 1/4" bore, 3/4" hub, 1/4" from the plate.
There's a mm2inches(mm) function if you want to use mm instead:
// 608 bearings are 7mm wide, 8mm ID and 22mm OD
// Make a hub big enough for a 608 bearing
sprocket(25, 19, bore, hubwidth, hubheight);
When openscad renders it, some info gets echo'd too. Add the "Thickness" to your hub height to get total thickness of the part.
ECHO: "Pitch=", 0.25
ECHO: "Pitch mm=", 6.35
ECHO: "Roller=", 0.065
ECHO: "Roller mm=", 1.651
ECHO: "Thickness=", 0.11
ECHO: "Thickness mm=", 2.794
ECHO: "Outside diameter=", 1.32616
ECHO: "Outside diameter mm=", 33.6844
ECHO: "Pitch Diameter=", 1.20243
ECHO: "Pitch Diameter mm=", 30.5418
The "fudge factors" I have built in, in case your parts are too tight follow. I'd try running the part back & forth in the chain a few times before tweaking these, just to rub off printing irregularities.
If your bores are too tight, you might try this. 0 works for me though, a bit stiff getting on a 5/16 rod with a 5/16 bore, but it fits with minimal wiggling. If not, bump this up (or down).
FUDGE_BORE=0; // mm to fudge the edges of the bore
If the rollers are stuck in the channels, try adjusting this. For my chain & printer, 0 seems to be fine. This is the bottom part of where the chain sits.
FUDGE_ROLLER=0; // mm to fudge the hole for the rollers
More likely, the printer doesn't want to print the tips of the teeth very round, at least I seem to have quite a bit of error here. This fudge factor decreases the diameter of the circle used to round the teeth. My printer seems to make them rather squarer than the image in OpenScad.
FUDGE_TEETH=1; // Additional rounding of the teeth (0 is theoretical, my rep 1 seems to need 1 on medium.)
Additionally, typically sprocket teeth are chopped off. If you want to keep the teeth, or use slightly different math for the distance they stick out, look at the lines following this comment:
// Trim outer points
Comment out all 3 lines to keep the teeth, or change to the other cylinder to have slightly shorter teeth, or do your own thing.
There're 3 functions that return some info about chain sizes:
get_pitch(size) returns the pitch of the chain in inches
get_roller_diameter(size) returns the roller diameter
get_thickness(size) returns the thickness of the sprocket (excluding any hub)
And don't forget to visit L3-G0 the Lego R2-D2's blog or Youtube channel. The gears I'm building are intended for his motorized feet....