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

Hey! This thing is still a Work in Progress. Files, instructions, and other stuff might change!
janssen86

Getriebe Bibliothek für OpenSCAD / Gears Library for OpenSCAD

by janssen86 Jun 16, 2016
Download All Files

Please Login to Comment

Hello,

Joining the others, thank you very much for sharing the library!! It is very useful and saves a lot of time.

Secondly, I found a problem with the schneckenradsatz. When I build them together for managing the printing later(zusammen_gebaut=false) and export to STL both objects are linked, sharing some points, so they cannot be separated without some reconstruction. Nothing you cannot solve using the other parts of the library, but just wanted to let you know.

By the way, it is a pity to not having the chance of checking all the comments, as many of them are not in english. That would be great for fostering the community :)

Regards!

Hello,

First of all, thanks for sharing this library.

I have a small problem with the pfeilkegelradpaar. Here are the parameters (I only generate one of the gears for testing) :

pfeilkegelradpaar(modul=2, zahnzahl_rad=20, zahnzahl_ritzel=20, achsenwinkel=90, zahnbreite=15, bohrung_rad=8, bohrung_ritzel=8, eingriffswinkel = 20, schraegungswinkel=10, zusammen_gebaut=false);

When printing the STL from OpenSCAD, everything seems fine

But when I import the STL in Thingiverse, there is a separation where the angle changes, and I cannot seem to find a configuration that works.
And, of course, everything fails afterwards.

Any help is appreciated. Thanks in advance.

Best regards,
Stefan.

This is really an amazing library, thank you so much for sharing it! It has been extremely useful when creating the kbricks construction system. I just added a series of worm parts to the system and I am surprised how large the STL files are getting. Is there any way to reduce the file size without affecting the shape of the printed parts? Seems that reducing the value of the $FN variable doesn't have much impact. I appreciate your recommendations!

With $FN=100, the following code results in an STL file of some 133 MB. With $FN=12, file size is still some 104 MB.
schnecke(modul=1, gangzahl=2, laenge=68, bohrung=6.1, eingriffswinkel=20, steigungswinkel=10, zusammen_gebaut=true);

kbricks construction system
by robkern

Das ist so unglaublich Fantastisch!
Hey wirklich vielen vielen Dank. Ich versuche seit Monaten ein funktionierendes Kegelradgetriebe schräg verzahnt zu erstellen und es klappt einfach nichts wirklich gut. Jetzt finde ich deine Bibliothek und BAM alles läuft Mega ruhig und sauber.
Nochmal, vielen Dank!

Ich habe nochmal ein Problem. Ich kann kein Modell generieren. Es wird einfach nichts angezeigt. Egal bei welchem Modul ich was eingebe, es kommt nichts raus. Es wird weder eine Vorschau angezeigt, noch kann man was rendern... Muss man noch was anderes beachten?

EDIT: Habe den Fehler gefunden. Musste das Modul unkommentieren.

Nun taucht aber ein neuer Fehler auf. Ich will ein Kegelrad erstellen. Es kommt allerdings immer die Meldung:
ERROR: Parser error in line 483: syntax error
ERROR: Compilation failed!

Hi,

tolle Bibliothek. Ich habe aber ein Problem - Ich bekomme keine linksdrehende Schnecke hin.
Beispiel:
schnecke(modul=0.4, gangzahl=2, laenge=10, bohrung=2, eingriffswinkel=20, steigungswinkel=-10, zusammen_gebaut=false);
Ich hätte gedacht man muss nur einen negativen Steigungswinkel eingeben?

HI,

ich benötige für ein Projekt ein gerade verzahntes Kronenradgetriebe. Dazu habe ich leider keine Vorlagen gefunden. Ist es möglich das zu implementieren?

Eine tolle Arbeit - ganz herzlichen Dank!!

Das Nonplusultra (für mich :- ) wäre jetzt noch ein Schneckenradsatz mit Globoidgeometrie...

Thank you VERY VERY much. This is the only library in OpenSCAD that calculated both the gear and the pinion. I've created a pair and I'm off to printing to test them out.
Greetings from Greece.

Hi,
Super, eine fantastische und hilfreiche Bibliothek. Intuitiv zu verwenden und ziemlich flexibel einsetzbar. Freue mich, dass ich sie nutzen kann!!!!
Ich hätte eine Frage: Welche Einheit hat der Parameter "spiel" / wie berechne ich aus einem gewünschten Abstand der Zahnflanken und einem Modul den Wert für "spiel"?
Und vielleicht ein Verbesserungsvorschlag: Teilweise dauert das Rendern der Zahnräder doch einige Zeit. Vielleicht liegt das an einer sehr hohen Detaillierung, die aber bei kleinen Modulzahlen und gängigen Druckern möglicherweise nicht benötigt wird. Kann die Detaillierung bei kleinen Modul-Werten reduziert werden, um so das Rendern zu beschleunigen? (Oder mache ich etwas falsch?)

Dankbarer und anerkennungsvoller Gruß
Flip

Hi,

erstmal vielen Dank für diese grossartige Bibliothek. Ich möchte gerne eine Zahnstange realisieren. Nun ist mir aufgefallen, dass da irgendwas nicht passt.

Schon beim Beispiel "zahnstange_und_rad" sieht das irgendwie nicht gut aus. Und wenn man die Anzahl der Zähne verändert passt auch die Rotation des Stirnrades nicht mehr. Dazu kommt noch, dass ich am liebsten einen einstellwinkel von 0 hätte, da die Zahnstange in der Draufsicht aus Acryl ausgelasert werden soll. Das ergibt dann ein rechteckiges Profil.

Ich habe die teile mal eingefärbt und eine Animation gemacht. ist übrigens ziemlich einfach. Mit dem Parameter $t kann man Drehungen und Translationen inkrementieren. Unter Design--> animation einschalten und einfach FPS und Steps angeben. $t läuft dann von 0 bis 1 mit den angegebenen Zwischenschritten.

Hallo,

ich sehe mir das heute abned an

Scheint etwas mit den Spiel zu tun zu haben... wenn ich Zeile 114 (modul=modul*(1-spiel);) auskommentiere passt es.

I love your programming style! I was struggling to implement some further variations, such as allowing for a worm gear with control over the diameter independent of the modul parameter. for example if a motor needs to clear the larger gear. I noticed that the // Spiralparameter defines the outer diameter, but I did not recognize how to influence the inner 'depth' of the teeth, with other words how to keep the tooth in the expected shape... I attached a file showing the mods I made so far...

What a great job, $hit on those who criticize you for speaking German, they are lost living in a bubble! Kudos from Tenerife - Spain !

Comments deleted.

Очень хороший и очень нужный генератор шестерёнок и других передаточных узлов. По началу была ошибка Parser error in line 191: syntax error . Но решается установкой более новой версии Openscad (version 2015.03-2)
Автору файла мои бесконечные благодарности!!!

благодарю вас. Я рад, что вы сочли это полезным.

A note: the zahnstange function doesn't work properly when rendering with F6, while it works with F5.

Edit: at least with 2015.03-2 on Linux.

Edit 2: my bad, sorry. It works fine with 2015.03-3

Thanks for your time & effort. Just what I needed for my gear project.

Thanks for your kind words. if you encounter any issues with the library, please let me know.

Hi,
thank you for your library, it works very nice. I learned today OpenSCAD just to be able to use it :)

There is a small mistake in your example for a pair of conical gears:

When you call the module, you use one variable for the axis (bohrung), but the definition of the module has two variables (bohrung_rad and bohrung_ritzel). For that rreason, it always uses the default value for each one of them, I assume it is 1.

kegelradpaar(modul=1, zahnzahl_rad=30, zahnzahl_ritzel=11, achsenwinkel=100, zahnbreite=5, bohrung=4, eingriffswinkel = 20, schraegungswinkel=20, zusammen_gebaut=true);

module kegelradpaar(modul, zahnzahl_rad, zahnzahl_ritzel, achsenwinkel=90, zahnbreite, bohrung_rad, bohrung_ritzel, eingriffswinkel=20, schraegungswinkel=0, zusammen_gebaut=true)

Thanks for catching this. I just fixed it.

Comments deleted.

Jetzt funktioniert es! Es lag an meiner Version von 2014!

Besten Dank!

LG

Wolfgang

Erst mal vielen Dank für diese tolle library!
Habe eben die aktuelle Version 2.2 hier herundergeladen

Leider bekomme ich sofort nach dem Start per Doppelklick auf die Datei "Getriebe.scad" die Fehlermeldung:

Parser error in line 191: syntax error
ERROR: Compilation failed!

Dieser Fehler tritt auch auf wenn ich am Ende einen Modulaufruf auskommentiere!
Da ich keine Ahnung von der Syntax von openscad habe kann ich den Fehler nicht selbst beseitigen!
Aktuell wollte ich ein Schneckengetriebe erzeugen.

LG

Wolfgang

Hallo,

Ich habe die Bibliothek überprüft und jeden Modulaufruf am Ende der Datei ein- und wieder auskommentiert. Unter welchen genauen Bedingungen tritt der Fehler auf? Ich benutze OpenSCAD version 2015.03-2

Comments deleted.

How can I use these models? Do you have STL files of these models? Please help.

This is a library. You can include it into your code and then call the methods with your own parameters.

Also, example method calls are commented out at the end of the file. Delete the comment markers and the respective object will be displayed in OpenSCAD. You can then create the stl file from OpenSCAD's interface.

Finally, when you click on my name, you will find most of the gears and assemblies as standalone things, each as a customizer, i. e. you can create your stl files from them in the browser.

HTH

Hallo, super Arbeit aber wie kann ich die einzelnen Teile in scad anzeigen. bin anfänger!

Am Ende des Codes stehen Funktionsaufrufe. Diese sind auskommentiert. Wenn man vom gewünschten Funktionsaufrufe die Kommentarzeichen entfernt, stellt Openscad das Bauteil dar.

Normalerweise verweist man aus eigenen Projekten auf diese Bibliothek per "include".

Wenn du auf meinen Namen klickst, findest du auch jedes Getriebe als eigenes "Thing" mit einem Customizer.

Hi Thanks for the great work! Just a small error in the Thingiverse discription .
Its zahnstange_und_rad and not zahnstange_und_ritzel .
Again , thanks helped a lot!

Wtf ?? Where's english realease

Major overhaul: Cleaned code, added worm and rack gears including assemblies.

Do you have this library in github, I would quite like to contribute some changes.

  • Translate to English
  • Tease out the hard coded parameters
  • Move config to a separate file

Hullo Mattjoyce,

Thatnks for your offer. Believe it or not, the OpenSCAD cumminity on GitHub is minuscle. That's the reason I went to Thingiverse in the first place.

Kegel gears (bevelled gears) seem to have a flaw - some teeth are not attached to the wheel.
kegelrad(modul=1, zahnzahl=120, zahnbreite=5, teilkegelwinkel=45, bohrung=20) ;
reports at the end of a SCAD render:
Top level object is a 3D object:
Simple: yes
Vertices: 3797
Halfedges: 18792
Edges: 9396
Halffacets: 11490
Facets: 5745
Volumes: 74 <--- should be only 1 item
In a slicer (i've tried two, plus the viewing program "3D-tools, screen shot attached) some teeth are seperate entities.
On the standard demo item
kegelradpaar(modul=1, zahnzahl_rad=30, zahnzahl_ritzel=11, achsenwinkel=100, zahnbreite=5, bohrung=4, eingriffswinkel = 20, schraegungswinkel=20, zusammen_gebaut=1);
on the smaller gear it seems only a surface is detached. (and the SCAD render reports
Facets: 4592
Volumes: 14 <-- should be 2
I have only seen this happen on "kegel" gears.

Hi, I entered:

kegelrad(modul=1, zahnzahl=120, teilkegelwinkel=45, zahnbreite=5, bohrung=20, eingriffswinkel=20, schraegungswinkel=20);

I get just two volumes, the generated stl seems all right:

Top level object is a 3D object:
Simple: yes
Vertices: 4495
Halfedges: 20862
Edges: 10431
Halffacets: 11876
Facets: 5938
Volumes: 2
Rendering finished.

which version of OpenSCAD are you using?

The official 2015.03 release.

Hi janssen86,

I encountered something similar (OpenSCAD v2015.03-2 Win64). I think it was down to the lines with comment: "1 promille Überlappung mit Zahn" - should this be multiplied by a scale less than 1 for overlap with the "Kegelstumpf"? Only occurred on gears with particular number of teeth (and when I was reducing $fn).

Anyway, I've been fiddling with the kegelrad() module for my own purposes (http://www.thingiverse.com/thing:3020746 ) and have made some changes which might be useful to incorporate. In particular, reduced (configurable) polygon count, single polyhedron for each tooth (avoids lots of internal faces) and generous tooth overlap with cone to prevent above issue.

I also switched from using a constant helix angle (schraegungswinkel), to a constant twist angle (gamma) which allows easier alignment of teeth when stacking the kegelrads for angled herringbone gears. Currently, I think there is a slight misalignment due to gamma being a function of module which is not constant for such gears. Alternatively, the rotation in herringbone gears could be corrected, but this looked more complicated.

Thank you for providing this library, the angled herringbone gears were a bit hard to find.

Screwless Gear Sphere Logo
by tmackay

Hi tmamckay,

Thanks for your hints. I am currently travelling and will have a look at the code once I am back. Would you mind sending the papa meters that gave you issues?

Thatnk you for helping me improve this thing.

No problem. These examples are a bit exaggerated, but It did happen fairly frequently with both OpenSCAD and the Thingiverse customizer. My printer was freezing with CPU spikes, so I really had to reduce the number of triangles.

When $fn is low, the issue is quite apparent, or if number of teeth is close or divides $fn, similar "cracks" may appear. Even when invisibly small, and not necessarily separate volumes, these cracks can get amplified in slicing or mesh reduction operations. It seems the radius of the points in the circle just touch the teeth, but the flats cause the gaps in between.

kegelrad(modul=2, zahnzahl=17, teilkegelwinkel=25, zahnbreite=5, bohrung=0, eingriffswinkel=20, schraegungswinkel=45, $fn=17);

Also (separate issue), notice with modul=2 the inner gear is not scaled correctly

pfeilkegelrad(modul=2, zahnzahl=21, teilkegelwinkel=45, zahnbreite=5, bohrung=0, eingriffswinkel = 20, schraegungswinkel=45);
Line 635:
-modul_innen = modul-zahnbreite/rg_aussen;
+modul_innen = modul*(1-zahnbreite/rg_aussen);

Thanks for the input. I tried to find a clean solution for the overlap problem. I setteled for an ugly one. The module bug is corrected.

Thanks again for trying out the code.

When I use this site : http://www.thecatalystis.com/gears/
I can select 4 planets 19 teeth, Sun 13 teeth.
But zahnzahl_sonne=13, zahnzahl_planet=19, only show 1 planet.

I don;t understand why, can you explain please?

Hi Mattjoyce,

There is indeed a bug in the code which I have replaced. I need some time for testing, then I'll update the library. Thanks for the heads-up.

Updated. Note that the parameters have changed:

  1. there is a new one: anzahl_planeten, the number of planet gears. If set to zero, the module will try to calculate the necessary number of gears.
  2. hoehe ("height") is now breite ("width") to conform to DIN/ISO.

For a reason which I can not guess, the library uses the the ratio (GCD based) of the sun/planet gears to decide on the number of planets. I edited the file at line around line 273, and defined the number
n_planeten = 4 ; //(zahnzahl_planet>zahnzahl_sonne) .... the calculation commented out
I have not printed it, but t looks OK in the slicer.

Hi Msquare,

The simple answer to the question of why I am using teeth rations to calculate the number of gears is that I want to leave as little work for the user, while still producing a correct gear. Now for planetary gears, if you want the planets to be evenly spaced, then the sum of the ring's teeth and the sun's teeth must be evenly divisible by the number of planets. The user could do so by hand and by guessing, or I let the code calculate the smallest necessary number of planetary gears.

This makes sense, I tried a few combinations and could see the relationship.
My need were quite simple, so I just settled for a pair of tooth counts that gave me 4 planets and a nice ratio.
It's a fantastic library. Thank you.

Thanks,
It would be a useful modification to be able to solve either known sun and planets, known ring and sun or known ring and planets.
M

I just did something in between: If the user doesn't give the number of planet gears, the module will try and calculate them.

Hi Mattjoyce,

It's currently solving least number of planets for a known sun and planets. I ilke your idea and think I know how to implement it, but it'd take a while to implement and test. Of course, I could leave the task of solving to the user, but that would render the library harder to use imho.

I suspect, there's another level of abstraction, which is to solve for gear ratio and physical size of ring. That's probably a fairly common goal.

Comments deleted.

Made some herringbone gears and all is working great
For a standard servo - linear actuator I needed a rack version of the herringbone
I cut out a section of a gear with 7000 teeth to get a "straight" part and added some curvedBits to attach things to the end of the rack
Observe it takes minuts to calculate a gear with 7000 teeth...

  z=7000;
  translate([-z,0,0])
  intersection() {
    pfeilhohlrad (modul=2, zahnzahl=z, hoehe=10, randbreite=12, eingriffswinkel=20, schraegungswinkel=30);

    cube([z+200,z+200,10]);
    // The angle cut out is 0.9 giving me a rack of about 12 cm
    rotate(0.9-90) cube([z+200,z+200,10]);
  }

To attach things to the rack a curved bit with a 6mm hole

  
  module curveBit(type=0, width=16, depth=20, height=10, pinRadius=3)
 {
    module part1() 
    {
        cube([width, depth, height]);
        translate([width/2, type, 0])
            cylinder(height, width/2, width/2);
    }
    difference()
    {   
        part1();
        translate([width/2,type,-.5])
            cylinder(height+1, pinRadius, pinRadius);
    }
  }

Position the curved bits at the end of the rack
And adjust for the curvature of the "straight" - here 5.2 - 4.1 = 1.1 mm

translate([-4.1,-10,0])
{
   curveBit(0, 15, 10, 10, 3);
}
// The length of the rack 120mm is the -10 from above and the 110 here
translate([-5.2,110,0])
{
   curveBit(10, 15, 10, 10, 3);
}

If you need a herring bone rack and pinion, why not take two of these:
https://www.thingiverse.com/thing:2072364

Parametrische Zahnstange mit Ritzel / Parametric Gear Rack and Pinion

Thanks for the hint
My fault was, I stopped searching after finding this, the most complete selection of all gear types.
Great stuff..

Fantastic scad work.
Can you help me make a 45deg beveled planetary gear set from it?
Using standard beveled gears I can make the planet and sun gears, but I am stuck on the ring gear.

Hello Stewartde,

Llet me suggest to use 60° between the axis of the sun gear and one planetary gear.

Dear Janssen86, I'm sorry for my poor explanation, let me try again: I need to make a full beveled planetary gear system with a sun, 3 planets and an outer ring, where SunToothCount=10, PlanetToothCount=8 and RingToothCount=26. And they are all beveled 45% (I'm okay with varying the bevel angle if needed to make it work - but not too greatly as this will be used as opposing end caps to hold a system of gears together.) I've tried modifying my Herringbone Planetary gear project (https://www.thingiverse.com/thing:968011) and then just linear_extrude(scale=Bevel) but as you can see there are gear meshing problems:
https://i.imgur.com/nOIVT6N.png
https://i.imgur.com/qzitr7G.png
https://i.imgur.com/EPtagq6.png
Thank you for any help.

Herringbone Planetary Gear/Bearing (Optional HoneyComb) (Customizable)

Hello Stewartde,

I am afraid there are not just meshing "problems" in your design. On a beveled gear, the pitch decreases from the base to the top. That means that if you try to connect two beveled gears base-to-top, as you are attempting to do, their pitches wouldn't fit and the gears won't mesh.

Are you saying something like (https://www.thingiverse.com/thing:591098) is not possible to create using involute teeth?

Ekobots - Bevel gear generator.

would you please translate to english the descritpion?

There are descriptions of the library's modules under "summary". Please take a look and tell me what else you need.

Amazing library, very well put together. Thanks!

How do you increase the radius of the center hole in module pfeilkegelradpaar? I want it to be able to fit on M8 screws.

A better way of rephrasing my question, what is unit of measurement? If I want a M3 diameter, what is the formula for bohrung_rad=?

Hello Pseudosin,

The unit of measurement is mm. An internal M3x0.5 screw thread following DIN 13-1/ISO 261 has a nominal diameter of 3 mm and a pitch of p=0,5 mm. Therefore, if you want to cut a thread into the centre bore hole, I recommend the bore hole diameter should be set to d(min)=2,46mm.

Is this what you are looking for?

It is, danke schon. I was having trouble because I was doing the pair of herrington bevel and the example code had the hole parameter as bohrung=2,46. I had to change it to bohrung_rad=2.46 for it to parameterize correctly.

I don't even know how to use OpenSCAD, but I was able to immediately generate the gears I needed just by un-commenting the relevant gear type and tinkering with the variables. Amazing stuff.

Not to sound ungrateful, since this is such a huge gift to the 3d modelling community, but worm gears and rack-pinion gears would be cool, too.

Also, your guide suggests the "zusammen_gebaut" variable can be used to separate planetary gears, but it does not appear this is included in the module as it is currently written.

Thanks for this great tool!

So the names and comments are in German. English is my mother tongue but Google translations work well.
This library is excellent,
Thank you very much.
(vielen Dank)

Thank you very much. I am currently working on a second version, wehre I'll add rack/pinion and a worm gear. Could you think of any elements that you'd still find missing?

can you please provide some example SCAD's for how to use this? Since I cannot follow german.

Schöne und funktionelle Bibliothek, gefällt gut. Resultierende Zahnräder werden auch passgenau und unkompliziert gedruckt.
Eine Frage zur Dimensionierung hätte ich aber: Durchmesser der Zahnräder wird über die Anzahl der Zähne (und vermutlich deren Dimensionen) bestimmt - wie würde ich, z.B im Falle eines Planetengetriebes, erreichen, daß die beteiligten Zahnräder auch ineinanderpassen?

Hallo Bushmills,

Vielen Dank für das Lob.

Wie Msquare geschrieben hat, müssen Stirnräder das gleiche Modul haben, wenn sie kämmen, d.h. ineinanderpassen sollen. Das Modul ist daher für alle Räder in der Funktion "planetengetriebe" gleich.

Wenn Du Probleme mit dem Kämmen hast: Jedes Getriebe benötigt etwas "Spiel". Das ist besonders bei 3D-gedruckten Stücken wichtig, weil die Düsen Material über das Soll-Volumen hinaus ablagern. Die Bibliothek enthält hierfür die globale Variable "spiel". Diese ist Standardmäßig auf 0.05 = 5% gesetzt. Wenn Du Probleme beim Kämmen hast, dann empfehle ich, die tatsächlichen Maße Deiner Werkstücke z.B. mit dem Mikrometer auszumessen und den Wert von "spiel" entsprechend zu vergrößern.

Der parameter "modul" ist die "Grobheit" der Zähner, so zu sagen. Zahnräder mit der gleichen modul greifen in einander ein. Die grösse dea Zahnrads ist desshalb abhängig von Modul und anzahl Zähne. Ich habe ein "echo" reingelegt wo Kopfkreisdurchmesser und Fußkreisdurchmesser ausgerechnet werden (variable df und da im Sternrad). Dan muss ich werte probieren um einen bestimten durchmess kriegen, wenn das wichtig ist, aber die Auswechslung ist ja nur von dem Zahnanzal abhängig.

Besten Dank - die Ausgabe von df und da ist sehr hilfreich, auf jedem Fall besser als schätzen oder ausprobieren. Mal schauen, ob ich die auch irgendwie zurückgeben kann, um im aufrufenden script zur Verfügung zu stehen - z.B. für parametrische Abstandbestimmungen von Zahnradachsen für Bohrungen oder Führungsstifte.

Hallo Bushmills,

Achsenabstände sind sehr einfach auszurechnen bzw. wie von Msquare vorgeschlagen mit "echo" wiederzugeben: Zwei Stirnräder rollen immer über ihre Teilkreise ab. Der Teilkreisradius wird in den Funktionen ausgerechnet und der Variablen "r" zugewiesen. Das geht auch ganz leicht auf Papier: r = (modul * zahnzahl)/2. Der Achsabstand der Achsen zweier Stirnräder A und B ist r(A) + r(B). War es das, wonach Du suchst?

Ja, genau der Achsabstand wars - das ist ja einfacher als gedacht. Wieder was gelernt.

All comments in the code are in German.

Hello Mariarti,

well yes, they are. That happens to be my mother language. I tried and wrote english descriptions into the summary to the library. Are there any particular questions that I might answer?

Well I designed what I wanted using solidworks EZPZ

Super! Dein Werkzeug ist sehr gefällig.

Vielen Dank! Freut mich, dass gefällt.