Loading

MakerBot Print is our newest print-prepration software, which supports native CAD files and STL assemblies,
allows you to interact with all your printers via the Cloud, and many other exciting new features.

Download Now

droftarts

Parametric pulley - lots of tooth profiles

by droftarts Jan 28, 2012
Download All Files

Thing Apps Enabled

Please Login to Comment

i can't get the customizer to work, tried firefox,chrome and IE. still nothing working on my system.... trying to make a gt2 pulley set for a 20mm wide and a standard gt2 pulley with motor shaft of 1mm. for 12v dc motors to make a small project for school... this is getting frustrating. DM me if anybody willing to help. it be appricated

This is amazing! Now do a Fusion360 version!

Hi, I was wondering if you can send the solid design too?

Thanks for sharing this library.

hello, I need your help. where I can find standard for pulley HTD 5mm, I want to know parameters with that I can will quality control.
Thanks

Hi. See the thread a few comments down, first post by sensedsp on Apr 29, 2019, where HTD is discussed. Basically, we haven't found much 'standard' information about HTD. The best we've found is in https://www.sdp-si.com/PDFS/Technical-Section-Timing.pdf (page T-5), which says you want more backlash on small pulleys and less on larger ones. HTD is not designed for positional accuracy, it's designed for power transfer (HTD = High Torque Drive), where backlash is less of a problem. I suspect you'll have to experiment to find acceptable levels of tooth fit and backlash for your application.

Im trying to get a GT2 with 80 tooth for a 6mm belt but I get a Frisbee :) It's HUGE , fills my build bed

If you mean your Customizer version here https://www.thingiverse.com/thing:3621410 you used profile == 6, which is T5 (5mm tooth pitch) belt. You need to use one of the GT2 profiles, depending on the pitch of the belt teeth (the distance between them), usually 2mm, 3mm or 5mm. See notes on Thing details page. I’m guessing your belt is 6mm wide?

Tried again, with profile 12 but it keeps making then to tall, theres no where to set the belt size to 6mm

Do you know how to calculate belt sizes and pulley sizes ? I'm trying to follow a design on here for dual drive on a 3D printer. But the parts I orderd , well the belt, is to big. He said use 36 tooth pulleys, but I'm thinking 70 tooth ones are needed for my belt. it might be easier if I can find someone who can tell me what belt and pulleys to get that WILL work rather then this hit and miss method I'm using now :)

Yer I'm thinking it's 2 mm. I'll try again. Theres to many settings to change and no clear diagram showing what they correspond to

This script was created in 2012, before Customizer was available, so there's no descritption of what each of the settings are. However, you should see a preview of the pulley as you change the settings (I do in Chrome, but not in Firefox, for some reason), and the variables have reasonably sensible names (see definition from script below; these don't show up in Customizer). To get the toothed part of the belt to 6mm, set 'Pulley T Ht' (Pulley Teeth Height) to 6mm. If you don't want a base, set 'Pulley B Ht' (Pulley Base Height) to 0mm. It has a lot of options to allow for lots of variation!

If you want to know the Pulley diameter, use OpenSCAD to open the script; when you compile, it shows the diameter. If you don't know, or don't want to learn, OpenSCAD, look at the Excel document for pulley diameter for a given number of teeth (you can't set it the other way around, as the diameter is set by the number of teeth, not the other way around), or look for pulley data online.

If you have a link to the dual drive design that you're trying to follow, I may be able to suggest some settings. Or ask the designer of that to suggest what pulleys and belt to get.

// tuneable constants

teeth = 8; // Number of teeth, standard Mendel T5 belt = 8, gives Outside Diameter of 11.88mm
profile = 6; // 1=MXL 2=40DP 3=XL 4=H 5=T2.5 6=T5 7=T10 8=AT5 9=HTD_3mm 10=HTD_5mm 11=HTD_8mm 12=GT2_2mm 13=GT2_3mm 14=GT2_5mm

motor_shaft = 5.2; // NEMA17 motor shaft exact diameter = 5
m3_dia = 3.2; // 3mm hole diameter
m3_nut_hex = 1; // 1 for hex, 0 for square nut
m3_nut_flats = 5.7; // normal M3 hex nut exact width = 5.5
m3_nut_depth = 2.7; // normal M3 hex nut exact depth = 2.4, nyloc = 4

retainer = 0; // Belt retainer above teeth, 0 = No, 1 = Yes
retainer_ht = 1.5; // height of retainer flange over pulley, standard = 1.5
idler = 0; // Belt retainer below teeth, 0 = No, 1 = Yes
idler_ht = 1.5; // height of idler flange over pulley, standard = 1.5

pulley_t_ht = 12; // length of toothed part of pulley, standard = 12
pulley_b_ht = 8; // pulley base height, standard = 8. Set to same as idler_ht if you want an idler but no pulley.
pulley_b_dia = 20; // pulley base diameter, standard = 20
no_of_nuts = 1; // number of captive nuts required, standard = 1
nut_angle = 90; // angle between nuts, standard = 90
nut_shaft_distance = 1.2; // distance between inner face of nut and shaft, can be negative.

Thanks for that help,

This is the thingi I'm sort of following. My lead screw centres are 355 apart.

https://www.thingiverse.com/thing:2569379

CR-10 Dual Z axis with single stepper. Low cost high precision.
by Caster

It seems the HTD-8M profile is incorrect?

I'm getting a tooth depth of approx. 3.73mm.
The drawings and references I'm able to find all specify 3.4mm.
Checking vendor reference CAD models also seem to confirm 3.4mm.

Hi. I never had all of the belts to test all the sizes of pulley, including HTD-8, so it was created by pulling data and a CAD model from the internet, but it should be accurate (look at the source documents and spreadsheets). How are you determining that the tooth depth is 3.73mm? By measuring the stl, or an actual print? I built into the model a scaling factor for the tooth to take into account the 'feature' of FDM printers that often causes the outline to be bigger than expected, particularly in tight corners and small holes; ie when you want a 5mm hole in a part, you often have to specify it as 5.2mm. This is the 'Additional tooth width' parameter, and is set to 0.2 as standard. This allows the fit to be tuned for individual printers. So if the depth is 3.4mm, with the scaling factor at 0.2mm, I'd expect the depth to be around 3.6mm. However, I seem to remember the scaling factor doesn't quite work linearly or entirely accurately, so I wouldn't be surprised if it is a little more, or less, than expected! From the OpenSCAD file:

// ****
// Scaling tooth for good fit
// ****
/ To improve fit of belt to pulley, set the following constant. Decrease or increase by 0.1mm at a time. We are modelling the BELT tooth here, not the tooth on the pulley. Increasing the number will decrease the pulley tooth size. Increasing the tooth width will also scale proportionately the tooth depth, to maintain the shape of the tooth, and increase how far into the pulley the tooth is indented. Can be negative /

additional_tooth_width = 0.2; //mm

// If you need more tooth depth than this provides, adjust the following constant. However, this will cause the shape of the tooth to change.

additional_tooth_depth = 0; //mm

So if you want an accurate CAD model, setting this to 0mm should help, but unless you have a very accurate printing printer, you'll probably have to adjust this to get good fit. Let me know if that helps. If not, can you post an accurate CAD file of the tooth shape, and I'll check it against what I used. (Or you can follow the links and check my sources for yourself!)

Looking at the data that I used to make the tooth shape (in 2012), I got the tooth shape from http://oem.cadregister.com/asp/PPOW_Entry.asp?company=915217&elementID=07807803/METRIC/URETH/WV0025/F and checked the tooth profiles against https://www.sdp-si.com/D265/HTML/D265T015.html for dimensions (though this does NOT have the HTD-8M) and pulley dimensions from https://www.sdp-si.com/D265/HTML/D265T016.html (page T-30 to T-31). The CAD drawing (attached) gives the tooth height at 3.61mm. With the 'additional_tooth_width' scaling, this will come out a bit bigger.

If you have a more accurate dxf, and/or a drawing from another reputable source, I'm happy to update the script.

I understand. I had incorrectly assumed that offsetting the outline was the job of the slicer. I am using CNC milling, which is typically very accurate, and was hoping to use your excellent SCAD Design to provide an easy to accurately model various timing wheel solutions. I was therefore measuring the generated STL file, not a physical object.

For reference, to get an adequate fit for a 35T wheel I had to use additional_tooth_width 0.66 and additional_tooth_depth of 0.35.
This however, results in an oblong shape of the tooth, which is ok mechanically (but changes the compression profile slightly), but appears to be very uncommon in production wheels. In any case, I decided that a mesh was not the perfect solution for me - so I designed my own wheel using parameters from your excellent spreadsheet, while also taking the time to verify your data (which is spot on down to 0.01mm accuracy). Thank you for your excellent work.

The high additional_tooth_width is required to prevent "gripping" when a belt tooth enters or leaves a wheel groove. This is vaguely referenced, but not explained, in the SDP/SI "Handbook of Timing Belts, Pulleys, Chains and Sprockets" page T-5: "The HTD design requires substantial belt tooth to pulley groove clearance (backlash) to perform". The correct groove diameter inflation (resulting in this backlash) is hard (at least for me) to calculate and I found it easier to simulate the system to find the minimal inflation that prevents gripping.

Still wondering though, regarding the offset - should the printing process not result in an offset at both the peaks and valleys of each tooth, thus cancelling each other out (in regards to tooth depth)? It seems to me that to account for this, the entire outside profile should be deflated (negatively offset) by some value for a perfect fit? Perhaps this is beyond the accuracy requirements for this project, and the printers it was designed for?

Thanks for the dive into HTD belt limitations! I think I was vaguely aware of this problem when I wrote the script, but as it didn't relate to the other belt types, I kind of forgot about it. HTD seems much better suited to power transmission, where backlash is less of a problem, while most of the other belt types appear to be suited to positional accuracy, where low backlash is essential. Sorry my script led you in the wrong direction, but at least the data was useful!

Regarding the offset, the problem is that 3D printer slicers don't deal well with concave, especially sharply concave perimeters (ie small diameter holes, or, in this case, the tooth cut-outs in the pulley). The slicer usually offsets the nozzle to the midpoint of the line of extrusion, but when you go around a circle, the inside of the circle has less area than the outside, so plastic is squeezed into the hole. The effect is exponential, so worse on small diameter holes than larger ones, and to account for it would require the slicer to examine every curve and decide how much extra to offset the nozzle. Not impossible, but quite computationally intensive, I would imagine! Add in inaccurately metered extrusion (which can be positive or negative on any particular machine), and some way of tweaking the 'hole' size is needed, hence the 'additional tooth width' fudge! It's much less of a problem on convex perimeters, and the convex pulley diameter will be much greater than the concave diameter of the tooth cut out. Hope that makes sense!

On a CNC, you should get accurate shapes without using the fudge factor, but then as you say, with HTD it NEEDS some extra tooth space, rather than a perfect fit. Added that the output format of stl is tessellated triangles, and the 'bumpiness' (which 3D printers tend to smooth out) probably means you don't get a nice finish with CNC. I did write a version of the script that used Bezier curves for the tooth profile, but it took an absolute age to render! Perhaps I'll look at that again one day...

You are still committed to supporting this after 6 years - I have to say I am quite impressed.

You are quite right about HTD - it is after all an abbreviation of High Torque Drive. It is well suited for high torques, specifically due to the way that forces are smoothly distributed along the leading edge and subsequently throughout each belt tooth, ensuring that much higher forces can be transferred without damaging the teeth. It seems mostly used for unidirectional drives and accuracy is not typically a requirement - the only exception I know of being applications where the load always presents unidirectional belt tensioning (such as vertical lifting applications with accelerations always below that of gravity 9.8 m/s2 minus headroom).

I do not have a more accurate datasheet or PDF, sorry. As you've already found, accurate information on the fine-grained details of gears and belts is difficult to find and that most suppliers have their own take on exact tooth profile - combining manufacturers can be sub-optimal for highly demanding applications. Such details seem to be guarded secrets. Over the years, I've done several GT, HTD and involute gears - and each profile comes with their own set of mathematical and physical quirks that are rarely well specified or documented, such as the exact required clearance for HTD in this case; "substantial clearance" is not engineering terminology ;)

I do get the occasional tip, so feel it's worth keeping in contact with it! And I keep meaning to release an update that produces a better variety of pulleys (though there's only a couple more profiles I can find info for) and the features people have asked for (better mesh output; flats, slots and keyways on the drive shaft; features that make them easier to print; dxf output; better customizer integration), which I've done most of, but it's not quite fully working. Maybe even that bezier version, if I can refine it a bit, for ultimate pulleys! I think most people who run 3D printers generally use metal pulleys now, but I think the script is still used by people prototyping mechanisms. I think some CAD programs now have built-in libraries for making pulley profiles, too.

One thought crossed my mind regarding HTD's backlash requirement; for each tooth goove on the pulley, rather than using a tooth scaling factor to get the backlash, subtracting a second tooth profile from the pulley blank that is slightly rotated around the pulley centre from the first tooth profile, would create a longer tooth space in the pulley, without increasing depth or changing the profile. This would be relatively trivial to code into the script; a 'backlash' amount would effectively offset a second tooth groove from the first, around the pulley diameter. As it says in https://www.sdp-si.com/PDFS/Technical-Section-Timing.pdf (page T-5) you'd want more backlash on small pulleys (sharper angle of engagement to get the tooth into the pulley) and less on larger ones. The only reference to how much is at the bottom of page T-9, but simply shows that HTD is worse than GT3! So I see your problem with trying to find any useful info on this. Let me know if you'd like to try a version of the script with a configurable backlash amount.

The dimensions of the output appear to be 10x the input. Is there a bug?

Hi, which input? Also, remember that the stls that the script produces are scaled in millimetres, not inches. Stl files are unit agnostic, so you can bring them into a program that is set up to expect inches, and the file will import 1mm = 1 inch, which is about 25 times larger!

Thanks for your response. My Fusion360 default units are set to mm. Thing 3434062 is a good example. I've given it a diameter of about 53mm and when I open the STL in Fusion 360, it has a diameter of about 530mm. Can you confirm this doesn't happen for you and is there any other setting which might cause this difference?

This is a Fusion 360 issue. It's how you're importing the stl file; don't just 'File > Open', or if you've uploaded the stl to Fusion 'Insert into Current Design'. Doing this DOES place the mesh at x10 size. Use the 'Insert > Insert mesh' menu option, which allows you to specify the units for the imported mesh, and have other controls over the mesh import and placement. I guess doing the File > Open sets it to centimetres automatically. I've tested this, and it then imports the correct size.
Discussion about it (there are plenty of others): https://forums.autodesk.com/t5/fusion-360-support/3d-model-10x-scale-when-imported-into-fusion-360/td-p/7039118
Good video about dealing with meshes: https://www.youtube.com/watch?v=yO6hboYWnfM
Hope that helps!

Thank you very much for taking the time to help me with this!

Thank you for all the info. I need some help with the Customizer.
I’m a novice at this and have to ask for some help. Trying to create 2 pulleys with 8mm shaft to get 20:1
Using GT2 belt. If you would be so kind to tell me what to inter in the customizer.
Thank you
Dale

Hi!
Here are some minor changes to export to DXF.

DXF = 0 - 3D model.
DXF = 1 - 2D model. Ready to export to DXF

Comments deleted.

Экспотртнул во фьюжин таким образом файлик HTD8 54t
У меня фьюжин вылетает оттого солько там линий получается.
Шкив на 18 зубов худо бедно сделал.

Есть такое дело.
GT2-2 60 зубов делал нормально, но деталь сначала делал болванкой, а с профилем делал отдельно. Чтобы фьюжен не грузить.
Если для 3д печати, можно деталь делать склеиваемую, отдельно зубчатую из стл файла, отдельно остальное, если есть. Оптимальный вариант.

Thanks for this amazing file, it works great so far.
Is there a set of option to create a smooth version though? Same diameters and design, but "no teeth"?

This absolutely ROCKS. You're a lifesaver. Thousand of robot pulleys owe their life to you.

Thank you for this thing! Thumbs up to you!

  • Posted with 3D Geeks Thingiverse Browser App

Can these mount onto drone motors? I want to wrap a timing belt around all of them then attach propellers to the timing belt.

Probably - you'll just need to find the shaft diameter of your motors. But this may not be a good idea - if you tie two motors together to force them to run in sync, that's not going to be good for the ESC..

Comments deleted.

Took a bit to work out but fabulous stuff thanks

Comments deleted.

Hello. What is the pitch of the T5 pulley?
thanks in advance

Comments deleted.

Hi, I added an option to make grooves, which is especialy handy for 3d printes pulleys. Since you have weak layer bonding in 3d prints,
I am not sure if it is called groove or keyway. However, with a key and this groove you can drive your pulley with force applied to the whole length of the pulley.

Just add
groove_enable = 1; // 0 = no groove
groove_width = 5; // Width of the groove
groove_height = 5; // Height of the groove above shaft

and later in the code

// Groove through pulley
if (groove_enable>0){
translate([-groove_width/2,0,-1])
cube([groove_width,motor_shaft/2+groove_height,pulley_b_ht + pulley_t_ht + retainer_ht + 2],false);
}

Hello, If I need GT2 pulley with 22T and 5mm bore,can you draw it? Thank you

It seems the Customiser app is working again, so you can do this using that tool rather than using OpenSCAD. This should make it easier. I simply set the Teeth = 22 and Profile = 12 to create this thing: https://www.thingiverse.com/thing:2999098
Hope that helps!
(Note: I forgot to change the bore size, so it's still 5.2mm)

GT2 22T 5mm bore Parametric pulley - lots of tooth profiles

Any chance of adding GT2 8mm pitch (Gates' 8MGT)?

Unfortunately, adding other tooth sizes is quite a complex process, and depends on finding quality information about tooth shape and spacing. This can take a considerable amount of time! At present, I don't really have time to do this out of purely altruistic intentions, ie unpaid. The sources for the information, and how I created this, are all available in the 'Thing Details' and files attached to the thing, so you should be able to follow my work and add it yourself. Happy to roll it into this version if you decide to share.

No worries man. If I find the info I'll see about incorporating it and sending you a revision. I really appreciate the work you put in, btw. Has allowed me to mock up a number of mechanisms lickety split. Sent a little appreciation your way - I often forget that the option is available.

Thanks so much for your generosity! I actually have an update to this over-six-year-old thing, that I keep meaning to upload, but still have a few bugs to work out, when I get time to. It includes some new features such as motor shaft flats and/or key ways, chamfering of top and bottom faces for easier printing, works better with Customizer, and draws quicker with less polygon errors. But no extra tooth profiles!

Do you have the code ready to push? I do need a keyed pulley. ;-D

I'm totally lost :( Tried some combinations, without success.
Can anybody help me to create a idler for GT2 belt and 608 bearing? The height is 10mm (total, including retainer). It's exactly the same of file "T5-18T-608-idler.stl", but for GT2 and with height of 10mm.
Thank you very much!

Pretty easy to do.
notes:

  1. You need alot of teeth to clear the 22mm of the bearing od. 50 works.
  2. In the Line pulley_t_ht = 10 - (retainer_ht + idler_ht); Note the extra math here. you could do this manually in the customizer yourself. This just keeps the total height 10mm.

// tuneable constants

teeth = 50; // Number of teeth, standard Mendel T5 belt = 8, gives Outside Diameter of 11.88mm
profile = 12; // 1=MXL 2=40DP 3=XL 4=H 5=T2.5 6=T5 7=T10 8=AT5 9=HTD_3mm 10=HTD_5mm 11=HTD_8mm 12=GT2_2mm 13=GT2_3mm 14=GT2_5mm

motor_shaft = 22; // Bearing OD this will need adjusted for a good fit.
m3_dia = 3.2; // 3mm hole diameter
m3_nut_hex = 1; // 1 for hex, 0 for square nut
m3_nut_flats = 5.7; // normal M3 hex nut exact width = 5.5
m3_nut_depth = 2.7; // normal M3 hex nut exact depth = 2.4, nyloc = 4

retainer = 1; // Belt retainer above teeth, 0 = No, 1 = Yes
retainer_ht = 1.5; // height of retainer flange over pulley, standard = 1.5
idler = 1; // Belt retainer below teeth, 0 = No, 1 = Yes
idler_ht = 1.5; // height of idler flange over pulley, standard = 1.5

pulley_t_ht = 10 - (retainer_ht + idler_ht); // Note the math here.
pulley_b_ht = 1.5; // pulley base height, standard = 8. Set to same as idler_ht if you want an idler but no pulley.
pulley_b_dia = 20; // pulley base diameter, standard = 20
no_of_nuts = 0; // number of captive nuts required, standard = 1
nut_angle = 90; // angle between nuts, standard = 90
nut_shaft_distance = 1.2; // distance between inner face of nut and shaft, can be negative.

Genius and tremendously helpful. Thanks!!!

Hello.. Im not an openscad person, but I did attempt to create what I needed. Ive included the code below.

basically im trying to create a gt2-2mm pulley with a base height of 20mm and the nut height set more towards the pulley side. The problem I have is that the the opening for the nut in the base is missing. If you can help, that would be great or maybe make some suggestions on how to fix.

Also, how difficult would it be t include a second set screw/nut at the opposite end of the pulley base?
thanks

Dave Taylor

// Parametric Pulley with multiple belt profiles
// by droftarts January 2012

// Based on pulleys by:
// http://www.thingiverse.com/thing:11256 by me!
// https://github.com/prusajr/PrusaMendel by Josef Prusa
// http://www.thingiverse.com/thing:3104 by GilesBathgate
// http://www.thingiverse.com/thing:2079 by nophead

// dxf tooth data from http://oem.cadregister.com/asp/PPOW_Entry.asp?company=915217&elementID=07807803/METRIC/URETH/WV0025/F
// pulley diameter checked and modelled from data at http://www.sdp-si.com/D265/HTML/D265T016.html

/**

// tuneable constants

teeth = 16; // Number of teeth, standard Mendel T5 belt = 8, gives Outside Diameter of 11.88mm
profile = 12; // 1=MXL 2=40DP 3=XL 4=H 5=T2.5 6=T5 7=T10 8=AT5 9=HTD_3mm 10=HTD_5mm 11=HTD_8mm 12=GT2_2mm 13=GT2_3mm 14=GT2_5mm

motor_shaft = 5.5; // NEMA17 motor shaft exact diameter = 5
m3_dia = 3.2; // 3mm hole diameter
m3_nut_hex = 0; // 1 for hex, 0 for square nut
m3_nut_flats = 5.7; // normal M3 hex nut exact width = 5.5
m3_nut_depth = 2.7; // normal M3 hex nut exact depth = 2.4, nyloc = 4

retainer = 1; // Belt retainer above teeth, 0 = No, 1 = Yes
retainer_ht = 1.5; // height of retainer flange over pulley, standard = 1.5
idler = 1; // Belt retainer below teeth, 0 = No, 1 = Yes
idler_ht = 1.5; // height of idler flange over pulley, standard = 1.5

pulley_t_ht = 7; // length of toothed part of pulley, standard = 12
pulley_b_ht = 20
; // pulley base height, standard = 8. Set to same as idler_ht if you want an idler but no pulley.
pulley_b_dia = 20
; // pulley base diameter, standard = 20
no_of_nuts = 1; // number of captive nuts required, standard = 1
nut_angle = 90; // angle between nuts, standard = 90
nut_shaft_distance = 1.3; // distance between inner face of nut and shaft, can be negative.

// ****
// Scaling tooth for good fit
// ****
/ To improve fit of belt to pulley, set the following constant. Decrease or increase by 0.1mm at a time. We are modelling the BELT tooth here, not the tooth on the pulley. Increasing the number will decrease the pulley tooth size. Increasing the tooth width will also scale proportionately the tooth depth, to maintain the shape of the tooth, and increase how far into the pulley the tooth is indented. Can be negative /

additional_tooth_width = 0.2; //mm

// If you need more tooth depth than this provides, adjust the following constant. However, this will cause the shape of the tooth to change.

additional_tooth_depth = .2; //mm

// calculated constants

nut_elevation = pulley_b_ht/1.4;
m3_nut_points = 2*((m3_nut_flats/2)/cos(30)); // This is needed for the nut trap

// The following set the pulley diameter for a given number of teeth

MXL_pulley_dia = tooth_spacing (2.032,0.254);
40DP_pulley_dia = tooth_spacing (2.07264,0.1778);
XL_pulley_dia = tooth_spacing (5.08,0.254);
H_pulley_dia = tooth_spacing (9.525,0.381);
T2_5_pulley_dia = tooth_spaceing_curvefit (0.7467,0.796,1.026);
T5_pulley_dia = tooth_spaceing_curvefit (0.6523,1.591,1.064);
T10_pulley_dia = tooth_spacing (10,0.93);
AT5_pulley_dia = tooth_spaceing_curvefit (0.6523,1.591,1.064);
HTD_3mm_pulley_dia = tooth_spacing (3,0.381);
HTD_5mm_pulley_dia = tooth_spacing (5,0.5715);
HTD_8mm_pulley_dia = tooth_spacing (8,0.6858);
GT2_2mm_pulley_dia = tooth_spacing (2,0.254);
GT2_3mm_pulley_dia = tooth_spacing (3,0.381);
GT2_5mm_pulley_dia = tooth_spacing (5,0.5715);

// The following calls the pulley creation part, and passes the pulley diameter and tooth width to that module

if ( profile == 1 ) { pulley ( "MXL" , MXL_pulley_dia , 0.508 , 1.321 ); }
if ( profile == 2 ) { pulley ( "40 D.P." , 40DP_pulley_dia , 0.457 , 1.226 ); }
if ( profile == 3 ) { pulley ( "XL" , XL_pulley_dia , 1.27, 3.051 ); }
if ( profile == 4 ) { pulley ( "H" , H_pulley_dia ,1.905 , 5.359 ); }
if ( profile == 5 ) { pulley ( "T2.5" , T2_5_pulley_dia , 0.7 , 1.678 ); }
if ( profile == 6 ) { pulley ( "T5" , T5_pulley_dia , 1.19 , 3.264 ); }
if ( profile == 7 ) { pulley ( "T10" , T10_pulley_dia , 2.5 , 6.13 ); }
if ( profile == 8 ) { pulley ( "AT5" , AT5_pulley_dia , 1.19 , 4.268 ); }
if ( profile == 9 ) { pulley ( "HTD 3mm" , HTD_3mm_pulley_dia , 1.289 , 2.27 ); }
if ( profile == 10 ) { pulley ( "HTD 5mm" , HTD_5mm_pulley_dia , 2.199 , 3.781 ); }
if ( profile == 11 ) { pulley ( "HTD 8mm" , HTD_8mm_pulley_dia , 3.607 , 6.603 ); }
if ( profile == 12 ) { pulley ( "GT2 2mm" , GT2_2mm_pulley_dia , 0.764 , 1.494 ); }
if ( profile == 13 ) { pulley ( "GT2 3mm" , GT2_3mm_pulley_dia , 1.169 , 2.31 ); }
if ( profile == 14 ) { pulley ( "GT2 5mm" , GT2_5mm_pulley_dia , 1.969 , 3.952 ); }

// Functions

function tooth_spaceing_curvefit (b,c,d)
= ((c pow(teeth,d)) / (b + pow(teeth,d))) teeth ;

function tooth_spacing(tooth_pitch,pitch_line_offset)
= (2((teethtooth_pitch)/(3.14159265*2)-pitch_line_offset)) ;

// Main Module

module pulley( belt_type , pulley_OD , tooth_depth , tooth_width )
{
echo (str("Belt type = ",belt_type,"; Number of teeth = ",teeth,"; Pulley Outside Diameter = ",pulley_OD,"mm "));
tooth_distance_from_centre = sqrt( pow(pulley_OD/2,2) - pow((tooth_width+additional_tooth_width)/2,2));
tooth_width_scale = (tooth_width + additional_tooth_width ) / tooth_width;
tooth_depth_scale = ((tooth_depth + additional_tooth_depth ) / tooth_depth) ;

// ****
// uncomment the following line if pulley is wider than puller base
// ****

// translate ([0,0, pulley_b_ht + pulley_t_ht + retainer_ht ]) rotate ([0,180,0])

difference()
 {   
    union()
    {
        //base

        if ( pulley_b_ht < 2 ) { echo ("CAN'T DRAW PULLEY BASE, HEIGHT LESS THAN 2!!!"); } else {
            rotate_extrude($fn=pulley_b_dia*2)
            {
                    square([pulley_b_dia/2-1,pulley_b_ht]);
                    square([pulley_b_dia/2,pulley_b_ht-1]);
                    translate([pulley_b_dia/2-1,pulley_b_ht-1]) circle(1);
            }
        }

    difference()
        {
        //shaft - diameter is outside diameter of pulley

        translate([0,0,pulley_b_ht]) 
        rotate ([0,0,360/(teeth*4)]) 
        cylinder(r=pulley_OD/2,h=pulley_t_ht, $fn=teeth*4);

        //teeth - cut out of shaft

        for(i=[1:teeth]) 
        rotate([0,0,i*(360/teeth)])
        translate([0,-tooth_distance_from_centre,pulley_b_ht -1]) 
        scale ([ tooth_width_scale , tooth_depth_scale , 1 ]) 
        {
        if ( profile == 1 ) { MXL();}
        if ( profile == 2 ) { 40DP();}
        if ( profile == 3 ) { XL();}
        if ( profile == 4 ) { H();}
        if ( profile == 5 ) { T2_5();}
        if ( profile == 6 ) { T5();}
        if ( profile == 7 ) { T10();}
        if ( profile == 8 ) { AT5();}
        if ( profile == 9 ) { HTD_3mm();}
        if ( profile == 10 ) { HTD_5mm();}
        if ( profile == 11 ) { HTD_8mm();}
        if ( profile == 12 ) { GT2_2mm();}
        if ( profile == 13 ) { GT2_3mm();}
        if ( profile == 14 ) { GT2_5mm();}
        }

        }

    //belt retainer / idler
    if ( retainer > 0 ) {translate ([0,0, pulley_b_ht + pulley_t_ht ]) 
    rotate_extrude($fn=teeth*4)  
    polygon([[0,0],[pulley_OD/2,0],[pulley_OD/2 + retainer_ht , retainer_ht],[0 , retainer_ht],[0,0]]);}

    if ( idler > 0 ) {translate ([0,0, pulley_b_ht - idler_ht ]) 
    rotate_extrude($fn=teeth*4)  
    polygon([[0,0],[pulley_OD/2 + idler_ht,0],[pulley_OD/2 , idler_ht],[0 , idler_ht],[0,0]]);}

    }

    //hole for motor shaft
    translate([0,0,-1])cylinder(r=motor_shaft/2,h=pulley_b_ht + pulley_t_ht + retainer_ht + 2,$fn=motor_shaft*4);

    //captive nut and grub screw holes

    if ( pulley_b_ht < m3_nut_flats ) { echo ("CAN'T DRAW CAPTIVE NUTS, HEIGHT LESS THAN NUT DIAMETER!!!"); } else {
    if ( (pulley_b_dia - motor_shaft)/2 < m3_nut_depth + 3 ) { echo ("CAN'T DRAW CAPTIVE NUTS, DIAMETER TOO SMALL FOR NUT DEPTH!!!"); } else {

        for(j=[1:no_of_nuts]) rotate([0,0,j*nut_angle])
        translate([0,0,nut_elevation])rotate([90,0,0])

        union()
        {
            //entrance
            translate([0,-pulley_b_ht/4-0.5,motor_shaft/2+m3_nut_depth/2+nut_shaft_distance]) cube([m3_nut_flats,pulley_b_ht/2+1,m3_nut_depth],center=true);
//translate([0,-5,4.525]) 
            cube([m3_nut_flats,pulley_b_ht/2+1,m3_nut_depth],center=true);
            //cube([5.7,10,2.7],center=true);
            //nut
            if ( m3_nut_hex > 0 )
                {
                    // hex nut
                    translate([0,0.25,motor_shaft/2+m3_nut_depth/2+nut_shaft_distance]) rotate([0,0,30]) cylinder(r=m3_nut_points/2,h=m3_nut_depth,center=true,$fn=6);
                } else {
                    // square nut
                    translate([0,0.25,motor_shaft/2+m3_nut_depth/2+nut_shaft_distance]) cube([m3_nut_flats,m3_nut_flats,m3_nut_depth],center=true);
                }

            //grub screw hole
                rotate([0,0,22.5])cylinder(r=m3_dia/2,h=pulley_b_dia/2+1,$fn=8);
        }
    }}
 }

}

// Tooth profile modules

module MXL()
{
linear_extrude(height=pulley_t_ht+2) polygon([[-0.660421,-0.5],[-0.660421,0],[-0.621898,0.006033],[-0.587714,0.023037],[-0.560056,0.049424],[-0.541182,0.083609],[-0.417357,0.424392],[-0.398413,0.458752],[-0.370649,0.48514],[-0.336324,0.502074],[-0.297744,0.508035],[0.297744,0.508035],[0.336268,0.502074],[0.370452,0.48514],[0.39811,0.458752],[0.416983,0.424392],[0.540808,0.083609],[0.559752,0.049424],[0.587516,0.023037],[0.621841,0.006033],[0.660421,0],[0.660421,-0.5]]);
}

module 40DP()
{
linear_extrude(height=pulley_t_ht+2) polygon([[-0.612775,-0.5],[-0.612775,0],[-0.574719,0.010187],[-0.546453,0.0381],[-0.355953,0.3683],[-0.327604,0.405408],[-0.291086,0.433388],[-0.248548,0.451049],[-0.202142,0.4572],[0.202494,0.4572],[0.248653,0.451049],[0.291042,0.433388],[0.327609,0.405408],[0.356306,0.3683],[0.546806,0.0381],[0.574499,0.010187],[0.612775,0],[0.612775,-0.5]]);
}

module XL()
{
linear_extrude(height=pulley_t_ht+2) polygon([[-1.525411,-1],[-1.525411,0],[-1.41777,0.015495],[-1.320712,0.059664],[-1.239661,0.129034],[-1.180042,0.220133],[-0.793044,1.050219],[-0.733574,1.141021],[-0.652507,1.210425],[-0.555366,1.254759],[-0.447675,1.270353],[0.447675,1.270353],[0.555366,1.254759],[0.652507,1.210425],[0.733574,1.141021],[0.793044,1.050219],[1.180042,0.220133],[1.239711,0.129034],[1.320844,0.059664],[1.417919,0.015495],[1.525411,0],[1.525411,-1]]);
}

module H()
{
linear_extrude(height=pulley_t_ht+2) polygon([[-2.6797,-1],[-2.6797,0],[-2.600907,0.006138],[-2.525342,0.024024],[-2.45412,0.052881],[-2.388351,0.091909],[-2.329145,0.140328],[-2.277614,0.197358],[-2.234875,0.262205],[-2.202032,0.334091],[-1.75224,1.57093],[-1.719538,1.642815],[-1.676883,1.707663],[-1.62542,1.764693],[-1.566256,1.813112],[-1.500512,1.85214],[-1.4293,1.880997],[-1.353742,1.898883],[-1.274949,1.905021],[1.275281,1.905021],[1.354056,1.898883],[1.429576,1.880997],[1.500731,1.85214],[1.566411,1.813112],[1.625508,1.764693],[1.676919,1.707663],[1.719531,1.642815],[1.752233,1.57093],[2.20273,0.334091],[2.235433,0.262205],[2.278045,0.197358],[2.329455,0.140328],[2.388553,0.091909],[2.454233,0.052881],[2.525384,0.024024],[2.600904,0.006138],[2.6797,0],[2.6797,-1]]);
}

module T2_5()
{
linear_extrude(height=pulley_t_ht+2) polygon([[-0.839258,-0.5],[-0.839258,0],[-0.770246,0.021652],[-0.726369,0.079022],[-0.529167,0.620889],[-0.485025,0.67826],[-0.416278,0.699911],[0.416278,0.699911],[0.484849,0.67826],[0.528814,0.620889],[0.726369,0.079022],[0.770114,0.021652],[0.839258,0],[0.839258,-0.5]]);
}

module T5()
{
linear_extrude(height=pulley_t_ht+2) polygon([[-1.632126,-0.5],[-1.632126,0],[-1.568549,0.004939],[-1.507539,0.019367],[-1.450023,0.042686],[-1.396912,0.074224],[-1.349125,0.113379],[-1.307581,0.159508],[-1.273186,0.211991],[-1.246868,0.270192],[-1.009802,0.920362],[-0.983414,0.978433],[-0.949018,1.030788],[-0.907524,1.076798],[-0.859829,1.115847],[-0.80682,1.147314],[-0.749402,1.170562],[-0.688471,1.184956],[-0.624921,1.189895],[0.624971,1.189895],[0.688622,1.184956],[0.749607,1.170562],[0.807043,1.147314],[0.860055,1.115847],[0.907754,1.076798],[0.949269,1.030788],[0.9837,0.978433],[1.010193,0.920362],[1.246907,0.270192],[1.273295,0.211991],[1.307726,0.159508],[1.349276,0.113379],[1.397039,0.074224],[1.450111,0.042686],[1.507589,0.019367],[1.568563,0.004939],[1.632126,0],[1.632126,-0.5]]);
}

module T10()
{
linear_extrude(height=pulley_t_ht+2) polygon([[-3.06511,-1],[-3.06511,0],[-2.971998,0.007239],[-2.882718,0.028344],[-2.79859,0.062396],[-2.720931,0.108479],[-2.651061,0.165675],[-2.590298,0.233065],[-2.539962,0.309732],[-2.501371,0.394759],[-1.879071,2.105025],[-1.840363,2.190052],[-1.789939,2.266719],[-1.729114,2.334109],[-1.659202,2.391304],[-1.581518,2.437387],[-1.497376,2.47144],[-1.408092,2.492545],[-1.314979,2.499784],[1.314979,2.499784],[1.408091,2.492545],[1.497371,2.47144],[1.581499,2.437387],[1.659158,2.391304],[1.729028,2.334109],[1.789791,2.266719],[1.840127,2.190052],[1.878718,2.105025],[2.501018,0.394759],[2.539726,0.309732],[2.59015,0.233065],[2.650975,0.165675],[2.720887,0.108479],[2.798571,0.062396],[2.882713,0.028344],[2.971997,0.007239],[3.06511,0],[3.06511,-1]]);
}

module AT5()
{
linear_extrude(height=pulley_t_ht+2) polygon([[-2.134129,-0.75],[-2.134129,0],[-2.058023,0.005488],[-1.984595,0.021547],[-1.914806,0.047569],[-1.849614,0.082947],[-1.789978,0.127073],[-1.736857,0.179338],[-1.691211,0.239136],[-1.653999,0.305859],[-1.349199,0.959203],[-1.286933,1.054635],[-1.201914,1.127346],[-1.099961,1.173664],[-0.986896,1.18992],[0.986543,1.18992],[1.099614,1.173664],[1.201605,1.127346],[1.286729,1.054635],[1.349199,0.959203],[1.653646,0.305859],[1.690859,0.239136],[1.73651,0.179338],[1.789644,0.127073],[1.849305,0.082947],[1.914539,0.047569],[1.984392,0.021547],[2.057906,0.005488],[2.134129,0],[2.134129,-0.75]]);
}

module HTD_3mm()
{
linear_extrude(height=pulley_t_ht+2) polygon([[-1.135062,-0.5],[-1.135062,0],[-1.048323,0.015484],[-0.974284,0.058517],[-0.919162,0.123974],[-0.889176,0.206728],[-0.81721,0.579614],[-0.800806,0.653232],[-0.778384,0.72416],[-0.750244,0.792137],[-0.716685,0.856903],[-0.678005,0.918199],[-0.634505,0.975764],[-0.586483,1.029338],[-0.534238,1.078662],[-0.47807,1.123476],[-0.418278,1.16352],[-0.355162,1.198533],[-0.289019,1.228257],[-0.22015,1.25243],[-0.148854,1.270793],[-0.07543,1.283087],[-0.000176,1.28905],[0.075081,1.283145],[0.148515,1.270895],[0.219827,1.252561],[0.288716,1.228406],[0.354879,1.19869],[0.418018,1.163675],[0.477831,1.123623],[0.534017,1.078795],[0.586276,1.029452],[0.634307,0.975857],[0.677809,0.91827],[0.716481,0.856953],[0.750022,0.792167],[0.778133,0.724174],[0.800511,0.653236],[0.816857,0.579614],[0.888471,0.206728],[0.919014,0.123974],[0.974328,0.058517],[1.048362,0.015484],[1.135062,0],[1.135062,-0.5]]);
}

module HTD_5mm()
{
linear_extrude(height=pulley_t_ht+2) polygon([[-1.89036,-0.75],[-1.89036,0],[-1.741168,0.02669],[-1.61387,0.100806],[-1.518984,0.21342],[-1.467026,0.3556],[-1.427162,0.960967],[-1.398568,1.089602],[-1.359437,1.213531],[-1.310296,1.332296],[-1.251672,1.445441],[-1.184092,1.552509],[-1.108081,1.653042],[-1.024167,1.746585],[-0.932877,1.832681],[-0.834736,1.910872],[-0.730271,1.980701],[-0.62001,2.041713],[-0.504478,2.09345],[-0.384202,2.135455],[-0.259708,2.167271],[-0.131524,2.188443],[-0.000176,2.198511],[0.131296,2.188504],[0.259588,2.167387],[0.384174,2.135616],[0.504527,2.093648],[0.620123,2.04194],[0.730433,1.980949],[0.834934,1.911132],[0.933097,1.832945],[1.024398,1.746846],[1.108311,1.653291],[1.184308,1.552736],[1.251865,1.445639],[1.310455,1.332457],[1.359552,1.213647],[1.39863,1.089664],[1.427162,0.960967],[1.467026,0.3556],[1.518984,0.21342],[1.61387,0.100806],[1.741168,0.02669],[1.89036,0],[1.89036,-0.75]]);
}

module HTD_8mm()
{
linear_extrude(height=pulley_t_ht+2) polygon([[-3.301471,-1],[-3.301471,0],[-3.16611,0.012093],[-3.038062,0.047068],[-2.919646,0.10297],[-2.813182,0.177844],[-2.720989,0.269734],[-2.645387,0.376684],[-2.588694,0.496739],[-2.553229,0.627944],[-2.460801,1.470025],[-2.411413,1.691917],[-2.343887,1.905691],[-2.259126,2.110563],[-2.158035,2.30575],[-2.041518,2.490467],[-1.910478,2.66393],[-1.76582,2.825356],[-1.608446,2.973961],[-1.439261,3.10896],[-1.259169,3.22957],[-1.069074,3.335006],[-0.869878,3.424485],[-0.662487,3.497224],[-0.447804,3.552437],[-0.226732,3.589341],[-0.000176,3.607153],[0.226511,3.589461],[0.447712,3.552654],[0.66252,3.497516],[0.870027,3.424833],[1.069329,3.33539],[1.259517,3.229973],[1.439687,3.109367],[1.608931,2.974358],[1.766344,2.825731],[1.911018,2.664271],[2.042047,2.490765],[2.158526,2.305998],[2.259547,2.110755],[2.344204,1.905821],[2.411591,1.691983],[2.460801,1.470025],[2.553229,0.627944],[2.588592,0.496739],[2.645238,0.376684],[2.720834,0.269734],[2.81305,0.177844],[2.919553,0.10297],[3.038012,0.047068],[3.166095,0.012093],[3.301471,0],[3.301471,-1]]);
}

module GT2_2mm()
{
linear_extrude(height=pulley_t_ht+2) polygon([[0.747183,-0.5],[0.747183,0],[0.647876,0.037218],[0.598311,0.130528],[0.578556,0.238423],[0.547158,0.343077],[0.504649,0.443762],[0.451556,0.53975],[0.358229,0.636924],[0.2484,0.707276],[0.127259,0.750044],[0,0.76447],[-0.127259,0.750044],[-0.2484,0.707276],[-0.358229,0.636924],[-0.451556,0.53975],[-0.504797,0.443762],[-0.547291,0.343077],[-0.578605,0.238423],[-0.598311,0.130528],[-0.648009,0.037218],[-0.747183,0],[-0.747183,-0.5]]);
}

module GT2_3mm()
{
linear_extrude(height=pulley_t_ht+2) polygon([[-1.155171,-0.5],[-1.155171,0],[-1.065317,0.016448],[-0.989057,0.062001],[-0.93297,0.130969],[-0.90364,0.217664],[-0.863705,0.408181],[-0.800056,0.591388],[-0.713587,0.765004],[-0.60519,0.926747],[-0.469751,1.032548],[-0.320719,1.108119],[-0.162625,1.153462],[0,1.168577],[0.162625,1.153462],[0.320719,1.108119],[0.469751,1.032548],[0.60519,0.926747],[0.713587,0.765004],[0.800056,0.591388],[0.863705,0.408181],[0.90364,0.217664],[0.932921,0.130969],[0.988924,0.062001],[1.065168,0.016448],[1.155171,0],[1.155171,-0.5]]);
}

module GT2_5mm()
{
linear_extrude(height=pulley_t_ht+2) polygon([[-1.975908,-0.75],[-1.975908,0],[-1.797959,0.03212],[-1.646634,0.121224],[-1.534534,0.256431],[-1.474258,0.426861],[-1.446911,0.570808],[-1.411774,0.712722],[-1.368964,0.852287],[-1.318597,0.989189],[-1.260788,1.123115],[-1.195654,1.25375],[-1.12331,1.380781],[-1.043869,1.503892],[-0.935264,1.612278],[-0.817959,1.706414],[-0.693181,1.786237],[-0.562151,1.851687],[-0.426095,1.9027],[-0.286235,1.939214],[-0.143795,1.961168],[0,1.9685],[0.143796,1.961168],[0.286235,1.939214],[0.426095,1.9027],[0.562151,1.851687],[0.693181,1.786237],[0.817959,1.706414],[0.935263,1.612278],[1.043869,1.503892],[1.123207,1.380781],[1.195509,1.25375],[1.26065,1.123115],[1.318507,0.989189],[1.368956,0.852287],[1.411872,0.712722],[1.447132,0.570808],[1.474611,0.426861],[1.534583,0.256431],[1.646678,0.121223],[1.798064,0.03212],[1.975908,0],[1.975908,-0.75]]);
}

T5 & XL Parametric Pulley
Mendel Pulley with 3 captive M3 nuts
Mendel Pulleys
by nophead

posting with "@category" really confused me when I looked at my dashboard

@Category - It's in the OpenSCAD file, which he's decided to reproduce... in full.

@dapmco - please don't post the entire file as text in the comments. Use https://pastebin.com/ or something similar and copy the link to it into your comment, or use the comments 'Add file' feature. I tried to copy your text into OpenSCAD to find out what you're trying to do, but there are errors in it, I guess because of the way you've pasted it into the comments. I don't have time to work out what needs fixing. Make it easier for people to help you! Please edit your original post to remove the wall of text, too.

Thanks a lot for this script!!!)

Comments deleted.

Do you plan to add the option to generate a support ring in the middle for use with normal
Ball Bearings?

Or is is already implemented and i overlooked it?

Regards, Chris

I've downloaded recently and had no issues.

Thank you very much! This tool is so badass!

any idea when this will be working again?

It's the Customiser version that doesn't work; you can still download the files, and open it with OpenSCAD. I filed a bug report with Thingiverse about Customiser, but I haven't heard back. I don't think it's a problem with the file; even a really simple OpenSCAD parametric file, like https://www.thingiverse.com/thing:271736 doesn't work. Sorry, but not much I can do!

Hollow Calibration Cube
by 3D-ME

is there a reason this tool has stopped working? no matter what i try i get an error.
perhaps something changed on thingiverse and this isn't maintained any more?

Same here. I've tried two customizer models in the past few days and they both simply return errors instead of objects.

I've just tried making a pulley, and have the same problem. Customizer loads for me (Firefox 57.0.4 on Mac OS X 10.12.6), and I can set the options for the pulley and see it drawn in 3D. I can click 'Create thing', and it says it's doing it, but when I go to my queue, I get an error like sylentbob3. Clicking on 'See details' about the error, it says "#<RuntimeError: Failed to get https://www.thingiverse.com/download:62708 403: Forbidden>". I looked back through the history, and the last time anyone created a pulley using Customizer was on January 4th. Usually there's around 5 to 10 pulleys made per day using Customizer, so I'd guess they changed something at that time that causes it to fail. I've sent a message to the site admins using the contact form. In the meantime, I'd suggest getting acquainted with OpenSCAD!

Interestingly, the file it's trying to get in the error message is the OpenSCAD file that generates the pulleys, "Pulley_T-MXL-XL-HTD-GT2_N-tooth.scad". So it can't find the file on it's own server! However, I can click on the link above and it works. Very strange! Hopefully they'll act on the message and find the problem. If everyone who has a problem with this could submit a bug report, I'm sure they'll get it fixed. Go to the Contact Us page https://www.thingiverse.com/support and select 'General' from the drop down list, and then click 'Feedback form' to send a bug report. Thanks.

Hey, can anyone help me out?

I'm getting a error when creating a custom pulley.

If you're using the customizer version, I think there are some limits, eg on the number of teeth; I think it has to be less than 50 or it can't cope. There was a message a while ago in the comments about this. What was the error message if you click on 'more details'? Your screen grab doesn't show this.
If you download the .scad file and open it in OpenSCAD, you shouldn't have any limitations, though you will have to learn a little bit about using OpenSCAD!

Hey, can someone help me on how i donwnload the scad file?

Thanks

Hey, thanks so much.

Unfortunately i get the error even at default settings.

If I sent you my settings could you possibly send me a stl file from openscad?

Thanks

It would be better for your future use to get it to work. It works for me; I'm using Firefox as my browser. What are you using? Do you have anything turned off, perhaps Javascript or something? If you try using Customiser with other parts, eg https://www.thingiverse.com/thing:1078216 , do they work?
Otherwise, use OpenSCAD. You'll learn something new.

Fully Parametric Cable Chain

hey, even that one also gives me an error.

hm not sure what to do

nm, got it thanks

how i can change the HTD to 9mm ?

I think you mean the belt width is 9mm, which is a common size for HTD belt with either 3mm or 5mm tooth pitch. As far as I know there's no HTD profile with a 9mm tooth pitch. Most likely you want to use "profile == 9" for HTD 3mm, or "profile == 10" for HTD 5mm, and set the height of the pulley to 11mm, so it has 1mm each side of the belt.

Yes sir was my mistake !!
i need for 3mm pitch and 9mm width !!
thanx for your reply :)

How do you do parameter stuff? I never did it before. What software or website?

Any idea how to make the pulley bigger or smaller, how to calculate the belt tooth?
thanks

Can this create idlers?

I tried to print a 90 tooth T5 pulley, found out the scaling is a bit off. I needed to rescale it on the x and y axis to 0.995 . Now the belt fits perfectly, and does not skip anymore. Thank you droftarts for this great thing.

I'm not an SCAD whiz. What I would really love to have as output from your gear generator is a text file with the perimeter XY coordinates of the gear that you generate. Could you either make such a modification to your code, or tell me I way I can get this information? The purpose is to create a csv file with the coordinate list and then modify that into a sldcrv file for SolidWorks. The sldcrv file is just a list, one point per line, of a curve, in the format 'X,Y,Z'.

Update: I also tried exporting to dxf, and then importing the dxf directly into SolidWorks as a 2D sketch. That worked perfectly, with no need to mess around with creating the sldcrv file.

Your suggested method worked perfectly. However, instead of exporting to dxf, I exported to svg. The curve is easy to find in the .svg file (which is an xml file), and with Notepad++ it was straightforward to process the curve array into csv file format, and from there to the sldcrv file, which SolidWorks was happy to accept. The SVG point listing does not repeat the first point in the list at the end of the list, so that point must be added to the end so that the curve closes. Then SolidWorks can recognize the curve as closed, and allow it to be used in features like extrusions or cuts or lofts or whatever. Your reply that I'm responding to hasn't posted yet, as apparently my original post is being reviewed by the moderator. I include the code modification portion of your reply below:

Add the following: projection (cut=true) translate ([0,0,-10]) { in before the "if ( profile == " statements (around line 79) and a closing curly bracket (ie "}", but without the quotes) after those statements (around line 94), OpenSCAD will move the pulley, and cut a slice through it, which will just be the teeth.

I set up my pulley with no base, no nut or set screw, and no shaft hole, as I'll be adding those in SolidWorks. I made the translate -1 instead of -10, because there isn't anything in the model except the geared section. And as I mentioned, I used svg as the export format.

Thanks for your reply - this is a huge help to me. This is for a DIY fishing rod wrapper, which is basically a slow, long (7 ft), relatively low power lathe.

Hi. You should be able to do this quite easily using the 'projection' command in OpenSCAD. If you add the following:
projection (cut=true) translate ([0,0,-10]) {
in before the "if ( profile == " statements (around line 79) and a closing curly bracket (ie "}", but without the quotes) after those statements (around line 94), OpenSCAD will move the pulley, and cut a slice through it, which will just be the teeth. Depending on the pulley you want, you may have to change the translation in the Z axis, so it hits the teeth. Then render and export this as a DXF.
To convert DXFs to XYZ lists, I have used http://www.guthcad.com/dxf2xyz.htm in the past. It's old, but should do the job.
Just to note, the output will not be curves; OpenSCAD expects to output triangles, so it's actually a load of very short straight lines.
Hope that helps.

Such a good contribution. Really appreciate it!

Is anyone aware of a similar a thing for gears?

Thanks! For gears, how about https://www.thingiverse.com/thing:1919326 ? There's plenty of other gear libraries if this one isn't quite what you need.

Fast Parametric Involute Spur Gears

Thank you for making this!

Could you please add an "XL" profile with a .125" pitch? I need this for some old consumer appliances that I am repairing and I cannot find a pulley like that anywhere. The belt itself has Gates PowerGrip written on it, so the trapezoidal profile from another pitch should scale to it.

Thanks for the app!

Hi, are you sure the tooth pitch is 0.125"? I can't find any XL belt, or indeed any belt, with that tooth pitch, and Gates PowerGrip XL belt don't come in that size; see http://www.gates.com/products/industrial/industrial-belts/synchronous-belts/powergrip-timing-belts
XL (which, I think, is a standard) has a tooth pitch of 0.200". What is the part number of the belt you have?
If it really is an odd size, using the XL tooth profile should be fine, it's just the spacing between teeth that would be different. If you can tell me the outside diameter of the pulley (preferably in mm) and the number of teeth, I should be able to work something out.

Great tool!
But how could I extract the dxf of a chosen tooth profile?

Thanks in advance

Yes, OpenSCAD has projection cut built-in; see https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Using_the_2D_Subsystem#3D_to_2D_Projection

When you export a dxf from OpenSCAD, it exports with lots of little line segments, ie the outline is not connected up. It's generally quite easy to connect these up in any illustration package (Illustrator, Inkscape) or CAD package (I use QCAD).

Alternatively, you could just export your file as SVG from OpenSCAD, which is Inkscape's preferred format. All lines export joined up correctly. Just make sure you're using a recent version of OpenSCAD; older versions created SVGs with no units, so they open in Inkscape with the units set to 'pixels' rather than 'mm', and your artwork will be scaled. This was fixed last year, see: https://github.com/openscad/openscad/issues/1253

Hope that helps.

A possible workflow I did found was making a projection in openscad to a dxf file. explained on this site: http://rasterweb.net/raster/2012/07/16/openscad-to-dxf/

Comments deleted.

Hi there, i want to make a 36 tooth pulley for a gt2 belt but i don't want the little base that the screw goes into. What values should be entered in customizer? Thanks.

Set the pulley_b_ht (pulley base height) to zero. If you want a flange, set it to 2mm, and then adjust the diameter with pulley_b_dia (pulley base diameter).

I have GT2 6mm belt, how do I create an associated profile for this? not sure what to measure.

I think you mean you have GT2 belt with a tooth pitch (distance between teeth) 2mm and belt width of 6mm. That would be profile == 12. I can't find any GT2 belt with a tooth pitch of 6mm. Make the number of teeth == 20, or they won't show up. Then make the height of the pulley enough to accommodate the 6mm belt width.

Yeah I have read the specs incorrectly. Or interpreted poor English incorrectly at least. ;) Thanks!

Comments deleted.

I bought the wrong belt, maybe I can get one of these printed and save the belt. Thanks

Very helpful. Thank you.

In trying to preview examples of the various "Profile" types using the default settings I discovered some of the profiles didn't create any pulleys. After some head scratching, I discovered the workaround was to increase the number of teeth from the default 8 to 12. (The problem is that for some profiles the default settings create an 8-tooth gear that is smaller than the diameter of the motor shaft hole.)

Based on my initial experiments, it helps to add the optional "retainer" and "idler" flanges to keep the belt on the pulley.

For the online creator it is nice to see what profile match what standard
if ( profile == 1 ) { pulley ( "MXL" , MXL_pulley_dia , 0.508 , 1.321 ); }
if ( profile == 2 ) { pulley ( "40 D.P." , 40DP_pulley_dia , 0.457 , 1.226 ); }
if ( profile == 3 ) { pulley ( "XL" , XL_pulley_dia , 1.27, 3.051 ); }
if ( profile == 4 ) { pulley ( "H" , H_pulley_dia ,1.905 , 5.359 ); }
if ( profile == 5 ) { pulley ( "T2.5" , T2_5_pulley_dia , 0.7 , 1.678 ); }
if ( profile == 6 ) { pulley ( "T5" , T5_pulley_dia , 1.19 , 3.264 ); }
if ( profile == 7 ) { pulley ( "T10" , T10_pulley_dia , 2.5 , 6.13 ); }
if ( profile == 8 ) { pulley ( "AT5" , AT5_pulley_dia , 1.19 , 4.268 ); }
if ( profile == 9 ) { pulley ( "HTD 3mm" , HTD_3mm_pulley_dia , 1.289 , 2.27 ); }
if ( profile == 10 ) { pulley ( "HTD 5mm" , HTD_5mm_pulley_dia , 2.199 , 3.781 ); }
if ( profile == 11 ) { pulley ( "HTD 8mm" , HTD_8mm_pulley_dia , 3.607 , 6.603 ); }
if ( profile == 12 ) { pulley ( "GT2 2mm" , GT2_2mm_pulley_dia , 0.764 , 1.494 ); }
if ( profile == 13 ) { pulley ( "GT2 3mm" , GT2_3mm_pulley_dia , 1.169 , 2.31 ); }
if ( profile == 14 ) { pulley ( "GT2 5mm" , GT2_5mm_pulley_dia , 1.969 , 3.952 ); }

thank you. very nice job. hats of for you.

Thanks - this is really useful. Just wondering if you've thought about generating a pulley with two sets of teeth for gear reduction? I've got a potential application and using belts should reduce play from imperfect meshing.

How do I choose which type of pulley? Since I want the 5m htd pulley with 30 teeth, how would i do that in the customizer app?

Hey, i am absolutely new to 3d modeling, maybe one could help me ? :)
I have created a 48t htd 3mm pulley with this now and want to merge it with a wheel mount, but how do i fit it together exactly centered?

Thanks for your help!!

Hello.
tell me how to correctly called type gear extruder?
I want to simulate a different mechanism, but no it does not find what to call and how to model them.

The openscad file is really helpful! Thanks for sharing!

I have tried many pulleys made with this customizer to find them to be wrong. If you download the SCAD file and create it out of there, it is 100% correct. Great job on the SCAD file. The customizer needs some work. I don't know if it is the limit of the software, but the SCAD is awesome.

Any chance you could add 8mm GT2 to this?

Any way to add parameters to create D shaped motor shafts?

I managed to do it.
I added under // tunable constants

d_shaft = 1; // D Shaft 0 = No, 1 = Yes
d_shaft_dia = n; // D Shaft Diameter

And modified //hole for motor shaft to remove a slice from the center bore shaft cylinder before it is used to make the hole.

    //hole for motor shaft with D-Shaft
    difference()
        {
            translate([0,0,-1])cylinder(r=motor_shaft/2,h=pulley_b_ht + pulley_t_ht + retainer_ht + 2,$fn=motor_shaft*4);
            if ( d_shaft > 0 ) translate([d_shaft_dia-motor_shaft/2,-motor_shaft/2,-1])cube([motor_shaft,motor_shaft,pulley_b_ht + pulley_t_ht + retainer_ht + 2]);
        }  

This is cool. Have you thought of moving to OpenJSCAD?

Is there a reason you don't allow for 10mm bore? Really would love to be able to use this to make some GT2's with 10mm bores :(

Nm.. its just the customizer.. works fine in scad.

Love this so much! Thank you for the scad files!

Hi, excellent design, and thank you for supplying the scad file as well. Your pulley works very well with MXL timing belt and stepper salvaged from old scanner. The tuning params are very helpful for fine adjustement of pulley profile. Again, thank you very much.

I agree. This is great. I can't say enough about how many times this has helped me use recycled motors and closed loop belts that are pulled from e-waste. Great job!

Hey there, this all looks awesome but I have one question:

Is there a general rule for the GT2 pulleys that will allow me to scale them up indefinitely? For instance, I want a GT2 pulley with around 60 teeth. Is there some template-producing software into which I can enter my parameters?

Something like this, only for GT2 pulleys:
http://geargenerator.com/#200,200,100,6,1,0,0,4,1,8,2,4,27,-90,0,0,16,4,4,27,-60,1,1,12,1,12,20,-60,2,0,60,5,12,20,0,0,0,2,-563

Thank you very much in advance!

Very good ¡¡ Thank,s for your work.

I just did a 866913 derivative of this excellent parametric pulley. I think it does what you want. I needed a pulley with mounting holes myself.

No, that's not what I need :(
the axis of the screw must be perpendicular to the axis of rotation of the pulley

http://www.3dprinters-shop.com/97-thickbox_default/gt2-aluminum-pulley.jpg
http://i00.i.aliimg.com/photo/v129/515935226/T10_industrial_belt_tensioner_pulley_Aluminum_Timing.jpg

drawing: http://in.misumi-ec.com/item/10300406120/img/02large.gif
A Shape.

I have a total of 8 mm shaft length for 6mm width belt, screw must be inside the pulley.

I just added a modified version of the Openscad script that makes the set screw hole in the middle of the pulley profile if the base depth is too shallow.

super. just what I needed.
thank you very much.

Comments deleted.

Excellent work, just the parts I needed for driving a stepper from my Lenz2 XL thing, turns out that gears are pretty noisy!

Belt drive it is!

Adding the following code allows for large bases and 0 capture nuts (as opposed to defaulting to 2):

if ( (no_of_nuts) < 1 ) { echo ("CAN'T DRAW CAPTIVE NUTS, THERE ARE NO NUTS TO DRAW"); } else {

just dont forget the close bracket.

Very good job. Some of my friends had trouble personalizing their own part, so I have improved the Customizer interface : http://www.thingiverse.com/thing:343343http://www.thingiverse.com/thi.... Feel free to update your code with these modifications if you like my version.

parametric pulleys

Hey, I am trying to make a gt2 5mm pulley but unfortunately the max pulley size is 50 tooth. Any chance you could make it work for upto 100?

Is that in the customiser version? There's no limit in the OpenSCAD original version.

Ye it was the customiser version. Managed to use the openscad to draw a standard pulley in the end. I am trying to make a pulley similar to this http://i.imgur.com/LVcujBM.jpghttp://i.imgur.com/LVcujBM.jpg . Could you recommend the best way for me to go about it? I have access to solidworks.

Go to https://sdp-si.com/eStore/Cataloghttps://sdp-si.com/eStore/Cata... and select Metric. Search for "A 6Z51M100DF0608." Click on the pop-up, then "CAD Model". Unless you have SolidWorks 2004-2008, then select "STEP (.stp) and download. Then drag+drop into SolidWorks.

I'm having trouble printing the GT2 2mm pulley with an 0.5mm tip (obviously going to be difficult/impossible since the tooth width is ~0.4mm). I'm likely going to buy another smaller nozzle to print with, but I'm not sure how small/large to go. I can get a 0.4mm, 0.35mm or a 0.3mm (the latter of which is apparently prone to jamming a lot).

I'm wondering what nozzle sizes people here have used to successfully print GT2 2mm?

RepRapPro (I work for them now) used to use a 0.3mm nozzle, set with a 0.3mm extrusion width, to print MXL pulleys. These have a pitch very close to GT2 (2.032mm), and the printed pulleys gripped the belt and worked fine. I think the rounded tooth shape of GT2 would actually help - the pulleys we produced didn't have particularly sharp tooth profiles. I think you'll struggle with anything larger than a 0.3mm nozzle. Make sure you've got good vertical straight walls, or the wobble will ruin fit, and your retraction settings are well-dialled in. Printing the outer perimeter before the inner can often help with accuracy. We've moved to supplying aluminium pulleys now, as we couldn't keep up with the quantity we needed with printing!

Thanks, I was trying to print a giant 150-tooth gear, that geared down a 16-tooth metal GT2 pulley (obviously next to impossible to find an off-the shelf gear that big, for cheap). I ended up getting it printed out with an 0.3mm nozzle, but just barely. Thanks again for this wonderful set of openscad tools.

Yay! Just hit 1000 'likes'!

And over 1100 now...

How do you know what 'Profile' in the customiser is which tooth profile? I am after HDT T5 but I don't know what is what and I can't work it out from the images.

Sorry, I have no idea about the customiser, I didn't do that version. In OpenSCAD file, the profiles are:
1=MXL 2=40DP 3=XL 4=L 5=T2.5 6=T5 7=T10 8=AT5 9=HTD_3mm 10=HTD_5mm 11=HTD_8mm 12=GT2_2mm 13=GT2_3mm 14=GT2_5mm
So you will probably want profile = 10

There is a site where you can get the design for a wooden gear by just putting in the number of teeth you want it to have. You could adapt some of those for the makerbot.

You should make this customizable :)

My Customized Parametric pulley - lots of tooth profiles

I get it.... You have to actually go to the Customizer app and find this thing, instead of just clicking a "Open In Customizer" button...

Thanks!
Is there any way to speed up the script conisdering all I want is the tooth profile?
I'm usually quite good with these things but its alluding me.

Does anyone know if there's a way to create a flat DXF using the script? I really just want to generate flat teeth so I can extrude and mess with them in AutoCAD.

Not sure if i'm right or not, but it seems like the H profile (.5 inch pitch, 12.7 mm) is actually an L profile (.375 inch pitch, 9.525 mm). Please correct me if i'm wrong, but I'm planning on using an L pitch timing belt in my current project.

Hi, thanks for spotting this, yes you are right! Seems like I misnamed the L profile I originally downloaded from http://oem.cadregister.comoem.cadregister.com and copied the mistake into the openscad script. If you look at the Excel file, I only modeled the L, not the H. Everything else in the openscad file seems correct for L. I won't change the file, unless someone needs an H profile pulley!

I do I need it.

I am using H profile stuff.

Many thanks sir. Unvaluable for myself.

Feel free to post an "I made one" picture!

I made one. I have to setup my printer for a better result ;)

I saw your pic! I can't print them one at a time, either, as each layer is still too hot and moves around when the next layer starts. Try printing at least two at a time. A fan will help, too. Looks like you might be running the filament a bit hot, and perhaps over-extruding? Hard to tell from the pic!

Sigh Checked my Steps per mm Calibration for my X and Y they where set to 80 steps per mm when they should have been 62 Steps per mm that was throwing All the Calculations off so the Print was Bigger and the Spaces where too large See I only set the Extruder.... the Z axes was right as far as I could tell but Ill check it anyway... but you can fudge that setting so many ways even if it is right out in calculations you can set it right by Physically Fiddling with the Endstops and the Max settings

Yes, looks like you're right, the comment in the file is wrong; changing the additional_tooth_width doesn't automatically change the height. I can't remember why not now! To maintain the correct shape, set additional_tooth_height to additional_tooth_width/2. Though if you are getting this printed by shapeways, you should be able to set both of these to 0, as shapeways prints are generally accurate.

There is a .34mm Space between your inside shaft and your outside Cogs  in your T-2.5 Cog  Ether I am not Extruding enough Plastic in my Builds or you missed a Layer.....

I guess you mean that, when you slice this, you end up with a gap between the teeth (outside) and shaft (inside). It's probably because your extrusion width is wider that the gap, so Slicer doesn't infill. Either reduce the number of perimeters, or reduce the extrusion width. Post a picture to help diagnose what is wrong.

 Posted the Pic in your Made one pics

Yes, what I said above. It's a slicing issue, not a problem with the model. What size nozzle do you have? 0.5mm? So your 'single wall thickness' in Slic3r (open the gcode in a text editor, it will show the actual figure) will probably be 0.6mm, so it can't infill the 0.34mm gap. In Slic3r, set Print settings -> Advanced -> Default extrusion width to 0.5mm and reslice. Then check the gcode in a visualiser, ie Repetier host, before printing. Or reduce the number of perimeters (I can't see how many there are, maybe three?) so that there is a bigger gap between the teeth and the shaft. It is difficult to get good teeth with printed T2.5 pulleys; you really need a fine nozzle, like 0.3mm. And very good extrusion calibration - follow this guide: https://github.com/alexrj/Slic3r/wiki/Calibrationhttps://github.com/alexrj/Slic...

 My Nozzle is 0.35mm

Okay, so your single wall thickness will be around 0.4mm. Which is why it can't fill the 0.34mm gap. It's a slicing problem; reduce the number of perimeters to make space for infill. I usually do 2 perimeters with 100% infill, with a 0.4mm nozzle.

thanks for the Pullys Ill try to get them printed out

 your openscad script is insanely complicated.
(i usually work on "what you see is what you get" software)

i would just change some of the radius here and there..
but how to make your script do the MXL style?
its always compiling a T5 or similar

i cant get it to do what i want.
i need a MXL pulley. with about 5cm outer diameter.

@yzog, did you read the comments properly? The second variable after the comment // tunable constants is called "profile" and the comment for it gives you the values available. The default of 6 is for T5, you want 1 for MXL.
Since the pulleys have discrete number of teeth you can't really just say what diameter you want. You need to have a look in the Excel file to find out the number of teeth needed for your required diameter. Or just estimate the number of teeth from as n = diameter / pi / pitch.

Sorry, I don't seem to be getting notifications anymore, with the changeover to Discus.
="thingiverse-492114f6915a69aa3dd005aa4233ef51:disqus" href="http://disqus.com/thingiverse-492114f6915a69aa3dd005aa4233ef51/yzorg  Yes, it's complicated, it's doing a complicated job! And yes, Openscad is definitely not WYSIWYG software, it's more like a programming language. However, I thought the scad file was fairly well commented.
As ="thingiverse-8702581b10fc44c8ee9021a967744624:disqus" href="http://disqus.com/thingiverse-8702581b10fc44c8ee9021a967744624/piit79 pointed out, you specify the size by the number of teeth - you can't specify a diameter and expect the teeth to fit, as the spacing between the teeth is fixed.
To help: under "// tuneable constants" set:
teeth = 78; (this gives a pulley diameter of 49.94mm)
profile = 1;
And you'll probably want to set (lower down the list):
retainer = 1;
idler = 1;
That should get you close. Press F5 to see an update in the openscad window.

This is absolutely brilliant! Hats off, excellent work.

Now, I just wish I could print HTD 3mm pulleys on my Printrbot... Anybody tried printing HTD 3M with a 0.5mm nozzle? Possible/usable? Anyway, I might just give it a go :) I would love to upgrade from T5 to HTD 3M (or maybe 5M).

Thanks! I don't think anyone has tried the HTD pulleys, so it would be great if you did, and could give some feeback. Though the 3mm tooth size is small, the HTD tooth shape is rounded. A 0.5mm nozzle shouldn't be too much of a drawback, as it won't be trying to make the sharper corners that a normal toothed belt has. Make sure your machine is well-calibrated (here's what I use: https://github.com/alexrj/Slic3r/wiki/Calibrationhttps://github.com/alexrj/Slic... ), and give it a go!

Well, I tried and it didn't turn out very well - a lot of stringing over the teeth.
Anyway, thanks a lot for the tips regarding calibration, I will definitely give that a go and then retry printing.
Trouble could also lie in Slic3r - it was printing each tooth individually as a triangle instead of going in one line. That definitely didn't help the quality.

I've been printing T5 pulleys recently, and have found that the perimeter needs to be printed very slowly, like 10mm/s, otherwise you get segment pausing, which leads to blobs and strings. In the past I have printed faster, but I now use Ubuntu as my main print platform, and USB comms are limited to 115200 baud, rather than 250000 baud. With the high number of polygons in each tooth, and lots of short moves created by Slicer, the USB can't keep up. I slice these using Slic3r 0.7.2b still, as that seems to give a smoother path and more accurate size than newer versions.
Slic3r is producing triangles for the teeth? You probably need a smaller nozzle, or you can try setting the extrusion width smaller in Slic3r, despite using a 0.5mm nozzle. I would try printing with 0.3mm layer height, 0.5mm extrusion width. It may give you a better path without triangles.

Finally I could make great use of your script, thanks a bunch for the good work! Actually helps me to develop a promising new type of RepRap - all pulley-concerning credits will go back to you once it gets published 8-)

Great! Look forward to seeing your work, love your reloaded Greg's, btw. Post a picture of your pulleys if you get the chance.

Hello!

I tried to get it working in an other OpenScad script, but couldn't get it working.
I tried something like:

use
&
lt;Pulley_T-MXL-XL-HTD-GT2_N-tooth.scad
&
gt;

pulley ( "MXL" , MXL_pulley_dia , 0.508 , 1.321 );

but that didn't produce any output...

what am I doing wrong?

You need a ; at the end of the 'use' line. But there are lots of things outside of the 'Pulley' function, so I'm really not sure of the results. I didn't write the scad with this in mind, sorry!

This thing is PERFECT, thank you so much!

I changed the nut_elevation to:

nut_elevation = (pulley_b_ht+idler_ht*idler)/2;

This centers it on the collar assuming idler is 1 when true, which is what I wanted.

I think that should be

nut_elevation = (pulley_b_ht - idler_ht*idler)/2; // with a minus!

as the idler isn't added to the height of the base. This will centralise the nut hole on the base, if the pulley teeth, and hence idler, is wider than the base.

My file had the oposite problem from the examples: the nut being too far from the pulley. I assumed a different coordinate system, but I bet I mucked something else up. Oh well, thanks for the correction.

Wow this is great! It may be out of the scope of what you are doing, but it would be really nice to also be able to choose an involute profile gear as the teeth.

That should be relatively easy to do, with the built in involute gear library. But I won't add it to this version, it's has lots of configuration variables already!

Not sure why this is working for everyone else...

scale ([ tooth_width_scale , tooth_depth_scale , 0 ])

should be:

scale ([ tooth_width_scale , tooth_depth_scale , 1 ])

You are right, it should be 1 (or just left out entirely, it shouldn't be scaling in the Z axis anyway), but I don't see any difference putting 0 or 1 in my version of OpenSCAD (2011.6 and 2011.12, Mac version). It could be a bug. Are you using a more up-to-date version, like from the github repository?

For example, if I create a 1-line scad file of:

scale ([1,1,0]) cube ([10,10,10]);

I get a 10x10x10 cube. Same if I put in scale ([1,1,1]), but scale ([1,1,0.1]) works as expected.

I have uploaded a new version with that corrected, as perhaps the Z scaling issue will be fixed in newer OpenSCAD versions. Thanks for spotting it!

Sorry I never replied. I was using the head from git, so that probably explained the difference.

I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.

I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.

I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.

I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.

Is there a way to make an idler with no teeth? this is for the back side of the belt.

I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.

I added a variable called has_no_teeth, so I don't have to remember which one I commented out

// line 24 (in "tunable constants")
has_no_teeth = 1; // 1 for yes, 0 for no

// line 150 (under "scale( {")
if ( !has_no_teeth ) {
// all of the "if ( profile == " statements inside here
}
// then comes the close bracket for the scale statement

That's annoying. Didn't notice it was doing this! I have flagged all bar one for removal.

I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.

I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.

I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.

I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.

I made a tray of four GT2 which seems good !

But the pitch of the belt I got from a scanner (or a printer) is even smaller... argh, probably too fine to be printed ^^'

Hi Emmanuel, yes that belt looks tiny! Nice print though, thanks for sharing.

tried to make a pulley w/ an idler, retainer and pulley base
&
amp; the base and idler overlapped rather than stacked on top of each other -- dunno if I'm doing something wrong or if there is a bug in the posted scad. ended up hacking together two stls in sketchup to get what I wanted so I'm good, but wanted check w/ you. thanks again for this great library of work!

Not so much of a mistake as a 'feature'. Yes, the idler and pulley base overlap. The top edge of the pulley base has a curve on it, and acts as an idler/belt guide if the teeth diameter is smaller than the base diameter. You only need the idler if the tooth diameter is bigger than the base (or you don't want a base at all), which gets rid of the curve, as it assumes you want to print it the other way up, where the curved edge could be an overhang problem. There is a commented out line further down the scad to flip the pulley over if you need a big pulley with a small base, to aid printing. I could finesse this area a bit, I suppose!

Thanks for sharing the picture of your pulley. The belt fit looks good, that's the most important thing.

i just print a MXL 18 t pulley AMAZING...your job is fantastic!!

Picture, or it didn't happen!

I just found a website that had a ton of timing belt pulley CAD models, I just staeted downloading them. Now I don't have too! This is great! Thank you for sharing!

Thanks for the thanks, everyone. If there are other profiles that you would like added, send me a message. I also have a version, if anyone is interested, that uses bezier functions from WilliamAAdams to draw the tooth curves, but it's possible to go a bit mad with the number of vertices!

I'd love to see that - with modern firmware such as Marlin and the latest Sprinter (which I prefer) you have lookahead so the amount of segments only makes things better because it doesn't slow down for each segment.

I find that at that size, a square-tooth profile works best for all belt types, because of printer tolerances and because there's always a very slight pause between segments, even when printing from an SD card. The teeth come out pretty rounded anyway.

That's why I simplified the curves to straight line segments. However, on the larger tooth profiles, especially HTD, a curved ramp into and out of the tooth is really important for clearance and fit. Our printers may not be capable of the resolution for the smaller pulleys at the moment, and I agree that FDM-style printers give a rounded outer corner already, but if these pulleys are printed on a powder bed, laser sintering or DLP/resin type printer, better tooth fit can be achieved. People with these printers might benefit from a higher resolution model; with a bezier curve version, they can choose the level of detail.

I intend to print gt2 2mm pulley on prusa mk3 with .4mm and .25mm head. Do you think there will be a visable and functional difference between the two pulleys?

I have been printing HTD 5mm and the fit is perfect!

Awesome! Can you add a picture to the 'I made one' section?

Wow . . looks like I have some printing and experimenting to do with these! Nice work man

Thanks guys, hope everything is well with you, the family and the business!

Yikes... Very well done!

wow, epic!

now to see if anyone has a printer that can actually print a 2mm pitch pulley!

My parametric printrbot variant includes a pulley that works with GT2 (2mm pitch) and MXL (2.032mm pitch) belts. They print and work great with a .4mm nozzle. http://www.thingiverse.com/thing:14208http://www.thingiverse.com/thi...

RepRap Wallace