This short tutorial will help you create a basic gear in OpenSCAD. The gear will need two cylinders to create the gear and a 3 sided polygon to create the teeth.
The concepts you can learn about in this Tutorial
- cylinder()
- circle()
- linear_extrude()
- difference()
- for loop
- translate()
We will actually start with the 2d items. It will be easier to create a triangular tooth using a 2d circle with 3 sides. The radius of the circle will be half of the “Whole Depth” of the gear. If we draw a line perpendicular to the “Root Diameter” to the “Pitch Diameter”, this will be equal to the radius we use.
circle(3,$fn=3);
Press f6 to see the 2d rendered version
Next we nee to give our gear tooth some meat. We will use linear_extrude() to add 3 Dimensions
linear_extrude(2) circle(3,$fn=3);
Then we will offset the circle using the translate, this will set the single gear to to it’s final diameter. When we rotate in OpenSCAD it is around the main Z-Axis. In order to rotate around our diameter we set tooth the diameter distance from the Z-Axis.
translate([18,0]) linear_extrude(2) circle(3,$fn=3);
Next we will repeat this cylinder around the Z axis.We will use the for loop to add the desired number of gear teeth and rotate() to position the tooth around the axis.
for(i=[1:1:20]){ rotate([0,0,(360/20)*i]) translate([18,0]) linear_extrude(2) circle(3,$fn=3); }
Each time through the for loop, a triangle is added at Z angle. The Z angle is calculated by dividing 360 by the number of teeth, then multiply the resulting angle by the tooth we are on.
Next we can add a cylinder that will define the Root Diameter. This is a cylinder that extends all the way to the edges of the Gear Teeth.
cylinder(h=2,r=17);
Finally we will add a second cylinder that will remove the center with difference()
Press F6 to get the finished render.
difference() { cylinder(h=2,r=17); cylinder(h=2,r=3,$fn=25); }
Here is the final code for our super basic gear.
difference() {
cylinder(h=2,r=17);
cylinder(h=2,r=3,$fn=25);
}
for(i=[1:1:20]){
rotate([0,0,(360/20)*i])
translate([18,0]) linear_extrude(2)
circle(3,$fn=3);
}
This works fine enough for basic gears that are large enough.. But for smaller gears, I find using the triangles to cut-out/difference the teeth from the cylinder, works better than adding them on.
Example:
module Gear(){
difference(){
cylinder(h=5,r=10);
for(i=[1:1:20]){
rotate([0,0,(360/20)*i]) translate([-9,0,-.01]) cylinder(h=5.02,r=2,$fn=3);
}
}
}