And we have a model subframe which is really promising! OpenSCAD for the win!
This commit is contained in:
parent
bcea01f8b6
commit
f863799729
23 changed files with 6330 additions and 5 deletions
1
model/Library/SprocketGenerator2/LICENSE.txt
Normal file
1
model/Library/SprocketGenerator2/LICENSE.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
This thing was created by Thingiverse user haand001 (Hampus Andersson), and is licensed under Creative Commons - Attribution
|
||||
4
model/Library/SprocketGenerator2/README.txt
Normal file
4
model/Library/SprocketGenerator2/README.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
Sprocket Generator V2 - OpenSCAD by haand001 on Thingiverse: https://www.thingiverse.com/thing:3059422
|
||||
|
||||
Summary:
|
||||
This is a sprocket generator that is designed and coded to be easy to use, even if you are new to OpenSCAD. Customize your own sprocket according to your needs and export it directly to a .stl file. Slice it and print it!For example, you can change:Bore diameterTeeth countPitch, roller diameterToleranceThicknessShaft length and diameterNumber of holes evenly distributedand a lot more...Test it using the Customizer to the right --> !Use PETG or Nylon for best results with 100% infill, many wall layers and concentric filling setting.The code is generously commented and easy to understand for you to make your own adjustments if required by your specific application. All measurements is in millimeters.Enjoy!
|
||||
|
|
@ -0,0 +1,166 @@
|
|||
/*
|
||||
|
||||
Sprocket generator v2
|
||||
|
||||
This code is based on the code written by *Talon_1* who based his code on the work of
|
||||
*Aleksejs*. Big thanks for your contributions. The aim of this code is to be easier
|
||||
understood by folks that are new to OpenSCAD. The rendered sprocket can be downloaded
|
||||
as a .STL file and 3D-printed directly using any slicing program.
|
||||
|
||||
*/
|
||||
|
||||
//////////////////////
|
||||
/* CHAIN-PARAMETERS */
|
||||
//////////////////////
|
||||
|
||||
// THESE ARE FOR 25H/04C
|
||||
roller_d = 4.1;
|
||||
thickness = 2.9;
|
||||
pitch = 6.35;
|
||||
tolerance = 0.05;
|
||||
|
||||
///////////////
|
||||
/* VARIABLES */
|
||||
///////////////
|
||||
|
||||
teeth = 10;
|
||||
|
||||
// Shaft
|
||||
bottom_shaft_d = 10;
|
||||
bottom_shaft_h = 2; // = 0 to remove
|
||||
|
||||
top_shaft_d = 10;
|
||||
top_shaft_h = 3; // = 0 to remove
|
||||
|
||||
toptop_shaft_d = 16;
|
||||
toptop_shaft_h = 8; // = 0 to remove
|
||||
|
||||
// Bore
|
||||
hole_d = 8;
|
||||
|
||||
// Holes
|
||||
number_of_holes = 0;
|
||||
hole_dia = 4;
|
||||
hole_ring_dia = 40;
|
||||
|
||||
///////////////////////
|
||||
// RENDERING QUALITY */
|
||||
///////////////////////
|
||||
|
||||
// HIGH : fs=0.25 : fa=3 : fn=0
|
||||
// LOW : fs=1 : fa=7 : fn=0
|
||||
fs = 0.25; // Minimum size of a fragment
|
||||
fa = 1; // Minimum angle for a fragment
|
||||
fn = 0; // Number of fragments (overrides fs & fa if non zero)
|
||||
|
||||
///////////////
|
||||
/* MAIN CODE */
|
||||
///////////////
|
||||
|
||||
difference()
|
||||
{
|
||||
// Create a union of four shapes, 3 cylinders and 1 sprocket
|
||||
union()
|
||||
{
|
||||
// Create sprocket using the difined module
|
||||
sprocket(teeth, roller_d, pitch, thickness, tolerance);
|
||||
|
||||
// Create cylinder on front side of sprocket
|
||||
translate([0, 0, thickness])
|
||||
cylinder(top_shaft_h, top_shaft_d/2, top_shaft_d/2, $fs=fs, $fa=fa, $fn=fn);
|
||||
|
||||
// Create cylinder on back side of sprocket
|
||||
rotate([0,180])
|
||||
cylinder(bottom_shaft_h, bottom_shaft_d/2, bottom_shaft_d/2, $fs=fs, $fa=fa, $fn=fn);
|
||||
|
||||
// Create cylinder on top of the front side cylinder
|
||||
translate([0, 0, thickness+top_shaft_h])
|
||||
cylinder(toptop_shaft_h, toptop_shaft_d/2, toptop_shaft_d/2, $fs=fs, $fa=fa, $fn=fn);
|
||||
}
|
||||
|
||||
// Rest of shapes are removal of material
|
||||
// Drills out the center hole with 1 mm extra in both directions
|
||||
translate([0, 0, -bottom_shaft_h-1])
|
||||
{
|
||||
cylinder(bottom_shaft_h+thickness+top_shaft_h+toptop_shaft_h+2, hole_d/2, hole_d/2, $fs=fs, $fa=fa, $fn=fn);
|
||||
}
|
||||
|
||||
// Drills 'number_of_holes' many holes in a circle
|
||||
angle_between_holes = 360/number_of_holes;
|
||||
for(hole_angle = [0:360/number_of_holes:360])
|
||||
{
|
||||
translate([hole_ring_dia/2*cos(hole_angle), hole_ring_dia/2*sin(hole_angle), -bottom_shaft_h-1])
|
||||
{
|
||||
cylinder(h = bottom_shaft_h+thickness+top_shaft_h+toptop_shaft_h+2, r = hole_dia/2, $fs=fs, $fa=fa, $fn=fn);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////
|
||||
/* SPROCKET MODULE */
|
||||
/////////////////////
|
||||
|
||||
module sprocket(teeth=20, roller=3, pitch=17, thickness=3, tolerance=0.2)
|
||||
{
|
||||
roller_radius = roller/2; //We need radius in our calculations, not diameter
|
||||
distance_from_center = pitch/(2*sin(180/teeth));
|
||||
angle = (360/teeth);
|
||||
|
||||
pitch_radius = sqrt((distance_from_center*distance_from_center) - (pitch*(roller_radius+tolerance))+((roller_radius+tolerance)*(roller_radius+tolerance)));
|
||||
|
||||
difference()
|
||||
{
|
||||
union()
|
||||
{
|
||||
// Quality parameters
|
||||
$fs = fs;
|
||||
$fa = fa;
|
||||
$fn = fn;
|
||||
|
||||
// Create inner cylinder with radius = pitch_radius
|
||||
cylinder(r=pitch_radius, h=thickness);
|
||||
|
||||
// Create outer part of the teeth
|
||||
for(tooth=[1:teeth])
|
||||
{
|
||||
intersection()
|
||||
{
|
||||
rotate(a=[0, 0, angle*(tooth+0.5)])
|
||||
{
|
||||
translate([distance_from_center, 0, 0])
|
||||
{
|
||||
$fs = fs;
|
||||
$fa = fa;
|
||||
$fn = fn;
|
||||
cylinder(r=pitch-roller_radius-tolerance, h=thickness);
|
||||
}
|
||||
}
|
||||
rotate(a=[0,0,angle*(tooth-0.5)])
|
||||
{
|
||||
translate([distance_from_center,0,0])
|
||||
{
|
||||
cylinder(r=pitch-roller_radius-tolerance,h=thickness);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Cuts away the inner groove between the teeth
|
||||
for(tooth=[1:teeth])
|
||||
{
|
||||
rotate(a=[0, 0, angle*(tooth+0.5)])
|
||||
{
|
||||
translate([distance_from_center, 0, -1])
|
||||
{
|
||||
$fs = fs;
|
||||
$fa = fa;
|
||||
$fn = fn;
|
||||
cylinder(r=roller_radius+tolerance, h=thickness+2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,166 @@
|
|||
/*
|
||||
|
||||
Sprocket generator v2
|
||||
|
||||
This code is based on the code written by *Talon_1* who based his code on the work of
|
||||
*Aleksejs*. Big thanks for your contributions. The aim of this code is to be easier
|
||||
understood by folks that are new to OpenSCAD. The rendered sprocket can be downloaded
|
||||
as a .STL file and 3D-printed directly using any slicing program.
|
||||
|
||||
*/
|
||||
|
||||
//////////////////////
|
||||
/* CHAIN-PARAMETERS */
|
||||
//////////////////////
|
||||
|
||||
// THESE ARE FOR 25H/04C
|
||||
roller_d = 4.1;
|
||||
thickness = 2.9;
|
||||
pitch = 6.35;
|
||||
tolerance = 0.05;
|
||||
|
||||
///////////////
|
||||
/* VARIABLES */
|
||||
///////////////
|
||||
|
||||
teeth = 23;
|
||||
|
||||
// Shaft
|
||||
bottom_shaft_d = 20;
|
||||
bottom_shaft_h = 2; // = 0 to remove
|
||||
|
||||
top_shaft_d = 40;
|
||||
top_shaft_h = 8; // = 0 to remove
|
||||
|
||||
toptop_shaft_d = 36;
|
||||
toptop_shaft_h = 4; // = 0 to remove
|
||||
|
||||
// Bore
|
||||
hole_d = 12;
|
||||
|
||||
// Holes
|
||||
number_of_holes = 12;
|
||||
hole_dia = 4;
|
||||
hole_ring_dia = 30;
|
||||
|
||||
///////////////////////
|
||||
// RENDERING QUALITY */
|
||||
///////////////////////
|
||||
|
||||
// HIGH : fs=0.25 : fa=3 : fn=0
|
||||
// LOW : fs=1 : fa=7 : fn=0
|
||||
fs = 0.25; // Minimum size of a fragment
|
||||
fa = 1; // Minimum angle for a fragment
|
||||
fn = 0; // Number of fragments (overrides fs & fa if non zero)
|
||||
|
||||
///////////////
|
||||
/* MAIN CODE */
|
||||
///////////////
|
||||
|
||||
difference()
|
||||
{
|
||||
// Create a union of four shapes, 3 cylinders and 1 sprocket
|
||||
union()
|
||||
{
|
||||
// Create sprocket using the difined module
|
||||
sprocket(teeth, roller_d, pitch, thickness, tolerance);
|
||||
|
||||
// Create cylinder on front side of sprocket
|
||||
translate([0, 0, thickness])
|
||||
cylinder(top_shaft_h, top_shaft_d/2, top_shaft_d/2, $fs=fs, $fa=fa, $fn=fn);
|
||||
|
||||
// Create cylinder on back side of sprocket
|
||||
rotate([0,180])
|
||||
cylinder(bottom_shaft_h, bottom_shaft_d/2, bottom_shaft_d/2, $fs=fs, $fa=fa, $fn=fn);
|
||||
|
||||
// Create cylinder on top of the front side cylinder
|
||||
translate([0, 0, thickness+top_shaft_h])
|
||||
cylinder(toptop_shaft_h, toptop_shaft_d/2, toptop_shaft_d/2, $fs=fs, $fa=fa, $fn=fn);
|
||||
}
|
||||
|
||||
// Rest of shapes are removal of material
|
||||
// Drills out the center hole with 1 mm extra in both directions
|
||||
translate([0, 0, -bottom_shaft_h-1])
|
||||
{
|
||||
cylinder(bottom_shaft_h+thickness+top_shaft_h+toptop_shaft_h+2, hole_d/2, hole_d/2, $fs=fs, $fa=fa, $fn=fn);
|
||||
}
|
||||
|
||||
// Drills 'number_of_holes' many holes in a circle
|
||||
angle_between_holes = 360/number_of_holes;
|
||||
for(hole_angle = [0:360/number_of_holes:360])
|
||||
{
|
||||
translate([hole_ring_dia/2*cos(hole_angle), hole_ring_dia/2*sin(hole_angle), -bottom_shaft_h-1])
|
||||
{
|
||||
cylinder(h = bottom_shaft_h+thickness+top_shaft_h+toptop_shaft_h+2, r = hole_dia/2, $fs=fs, $fa=fa, $fn=fn);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////
|
||||
/* SPROCKET MODULE */
|
||||
/////////////////////
|
||||
|
||||
module sprocket(teeth=20, roller=3, pitch=17, thickness=3, tolerance=0.2)
|
||||
{
|
||||
roller_radius = roller/2; //We need radius in our calculations, not diameter
|
||||
distance_from_center = pitch/(2*sin(180/teeth));
|
||||
angle = (360/teeth);
|
||||
|
||||
pitch_radius = sqrt((distance_from_center*distance_from_center) - (pitch*(roller_radius+tolerance))+((roller_radius+tolerance)*(roller_radius+tolerance)));
|
||||
|
||||
difference()
|
||||
{
|
||||
union()
|
||||
{
|
||||
// Quality parameters
|
||||
$fs = fs;
|
||||
$fa = fa;
|
||||
$fn = fn;
|
||||
|
||||
// Create inner cylinder with radius = pitch_radius
|
||||
cylinder(r=pitch_radius, h=thickness);
|
||||
|
||||
// Create outer part of the teeth
|
||||
for(tooth=[1:teeth])
|
||||
{
|
||||
intersection()
|
||||
{
|
||||
rotate(a=[0, 0, angle*(tooth+0.5)])
|
||||
{
|
||||
translate([distance_from_center, 0, 0])
|
||||
{
|
||||
$fs = fs;
|
||||
$fa = fa;
|
||||
$fn = fn;
|
||||
cylinder(r=pitch-roller_radius-tolerance, h=thickness);
|
||||
}
|
||||
}
|
||||
rotate(a=[0,0,angle*(tooth-0.5)])
|
||||
{
|
||||
translate([distance_from_center,0,0])
|
||||
{
|
||||
cylinder(r=pitch-roller_radius-tolerance,h=thickness);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Cuts away the inner groove between the teeth
|
||||
for(tooth=[1:teeth])
|
||||
{
|
||||
rotate(a=[0, 0, angle*(tooth+0.5)])
|
||||
{
|
||||
translate([distance_from_center, 0, -1])
|
||||
{
|
||||
$fs = fs;
|
||||
$fa = fa;
|
||||
$fn = fn;
|
||||
cylinder(r=roller_radius+tolerance, h=thickness+2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,166 @@
|
|||
/*
|
||||
|
||||
Sprocket generator v2
|
||||
|
||||
This code is based on the code written by *Talon_1* who based his code on the work of
|
||||
*Aleksejs*. Big thanks for your contributions. The aim of this code is to be easier
|
||||
understood by folks that are new to OpenSCAD. The rendered sprocket can be downloaded
|
||||
as a .STL file and 3D-printed directly using any slicing program.
|
||||
|
||||
*/
|
||||
|
||||
//////////////////////
|
||||
/* CHAIN-PARAMETERS */
|
||||
//////////////////////
|
||||
|
||||
// THESE ARE FOR 25H/04C
|
||||
roller_d = 4.1;
|
||||
thickness = 2.9;
|
||||
pitch = 6.35;
|
||||
tolerance = 0.05;
|
||||
|
||||
///////////////
|
||||
/* VARIABLES */
|
||||
///////////////
|
||||
|
||||
teeth = 31;
|
||||
|
||||
// Shaft
|
||||
bottom_shaft_d = 20;
|
||||
bottom_shaft_h = 0; // = 0 to remove
|
||||
|
||||
top_shaft_d = 50;
|
||||
top_shaft_h = 3; // = 0 to remove
|
||||
|
||||
toptop_shaft_d = 24;
|
||||
toptop_shaft_h = 8; // = 0 to remove
|
||||
|
||||
// Bore
|
||||
hole_d = 20;
|
||||
|
||||
// Holes
|
||||
number_of_holes = 5;
|
||||
hole_dia = 4;
|
||||
hole_ring_dia = 40;
|
||||
|
||||
///////////////////////
|
||||
// RENDERING QUALITY */
|
||||
///////////////////////
|
||||
|
||||
// HIGH : fs=0.25 : fa=3 : fn=0
|
||||
// LOW : fs=1 : fa=7 : fn=0
|
||||
fs = 0.25; // Minimum size of a fragment
|
||||
fa = 1; // Minimum angle for a fragment
|
||||
fn = 0; // Number of fragments (overrides fs & fa if non zero)
|
||||
|
||||
///////////////
|
||||
/* MAIN CODE */
|
||||
///////////////
|
||||
|
||||
difference()
|
||||
{
|
||||
// Create a union of four shapes, 3 cylinders and 1 sprocket
|
||||
union()
|
||||
{
|
||||
// Create sprocket using the difined module
|
||||
sprocket(teeth, roller_d, pitch, thickness, tolerance);
|
||||
|
||||
// Create cylinder on front side of sprocket
|
||||
translate([0, 0, thickness])
|
||||
cylinder(top_shaft_h, top_shaft_d/2, top_shaft_d/2, $fs=fs, $fa=fa, $fn=fn);
|
||||
|
||||
// Create cylinder on back side of sprocket
|
||||
rotate([0,180])
|
||||
cylinder(bottom_shaft_h, bottom_shaft_d/2, bottom_shaft_d/2, $fs=fs, $fa=fa, $fn=fn);
|
||||
|
||||
// Create cylinder on top of the front side cylinder
|
||||
translate([0, 0, thickness+top_shaft_h])
|
||||
cylinder(toptop_shaft_h, toptop_shaft_d/2, toptop_shaft_d/2, $fs=fs, $fa=fa, $fn=fn);
|
||||
}
|
||||
|
||||
// Rest of shapes are removal of material
|
||||
// Drills out the center hole with 1 mm extra in both directions
|
||||
translate([0, 0, -bottom_shaft_h-1])
|
||||
{
|
||||
cylinder(bottom_shaft_h+thickness+top_shaft_h+toptop_shaft_h+2, hole_d/2, hole_d/2, $fs=fs, $fa=fa, $fn=fn);
|
||||
}
|
||||
|
||||
// Drills 'number_of_holes' many holes in a circle
|
||||
angle_between_holes = 360/number_of_holes;
|
||||
for(hole_angle = [0:360/number_of_holes:360])
|
||||
{
|
||||
translate([hole_ring_dia/2*cos(hole_angle), hole_ring_dia/2*sin(hole_angle), -bottom_shaft_h-1])
|
||||
{
|
||||
cylinder(h = bottom_shaft_h+thickness+top_shaft_h+toptop_shaft_h+2, r = hole_dia/2, $fs=fs, $fa=fa, $fn=fn);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////
|
||||
/* SPROCKET MODULE */
|
||||
/////////////////////
|
||||
|
||||
module sprocket(teeth=20, roller=3, pitch=17, thickness=3, tolerance=0.2)
|
||||
{
|
||||
roller_radius = roller/2; //We need radius in our calculations, not diameter
|
||||
distance_from_center = pitch/(2*sin(180/teeth));
|
||||
angle = (360/teeth);
|
||||
|
||||
pitch_radius = sqrt((distance_from_center*distance_from_center) - (pitch*(roller_radius+tolerance))+((roller_radius+tolerance)*(roller_radius+tolerance)));
|
||||
|
||||
difference()
|
||||
{
|
||||
union()
|
||||
{
|
||||
// Quality parameters
|
||||
$fs = fs;
|
||||
$fa = fa;
|
||||
$fn = fn;
|
||||
|
||||
// Create inner cylinder with radius = pitch_radius
|
||||
cylinder(r=pitch_radius, h=thickness);
|
||||
|
||||
// Create outer part of the teeth
|
||||
for(tooth=[1:teeth])
|
||||
{
|
||||
intersection()
|
||||
{
|
||||
rotate(a=[0, 0, angle*(tooth+0.5)])
|
||||
{
|
||||
translate([distance_from_center, 0, 0])
|
||||
{
|
||||
$fs = fs;
|
||||
$fa = fa;
|
||||
$fn = fn;
|
||||
cylinder(r=pitch-roller_radius-tolerance, h=thickness);
|
||||
}
|
||||
}
|
||||
rotate(a=[0,0,angle*(tooth-0.5)])
|
||||
{
|
||||
translate([distance_from_center,0,0])
|
||||
{
|
||||
cylinder(r=pitch-roller_radius-tolerance,h=thickness);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Cuts away the inner groove between the teeth
|
||||
for(tooth=[1:teeth])
|
||||
{
|
||||
rotate(a=[0, 0, angle*(tooth+0.5)])
|
||||
{
|
||||
translate([distance_from_center, 0, -1])
|
||||
{
|
||||
$fs = fs;
|
||||
$fa = fa;
|
||||
$fn = fn;
|
||||
cylinder(r=roller_radius+tolerance, h=thickness+2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
BIN
model/Library/SprocketGenerator2/images/10.png
Normal file
BIN
model/Library/SprocketGenerator2/images/10.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
BIN
model/Library/SprocketGenerator2/images/23.png
Normal file
BIN
model/Library/SprocketGenerator2/images/23.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
BIN
model/Library/SprocketGenerator2/images/31.png
Normal file
BIN
model/Library/SprocketGenerator2/images/31.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
Loading…
Add table
Add a link
Reference in a new issue