tricycle-mechanical-design/model/chainset.scad

83 lines
2.2 KiB
OpenSCAD

// chainset.scad
// (c) Simon Brooke 2025; CC-BY-SA
// Derived from Hampus Andersson's Sprocket Generator
include <SprocketGenerator2/files/Sprocket_Generator_v2_example_10.scad>
include <BOSL2/std.scad>
include <pedal.scad>
function sprocket_radius(teeth=52, roller=7.9, pitch=12.7) =
let(roller_radius = roller/2,
radius = pitch/(2*sin(180/teeth)))
sqrt((radius*radius) - (pitch*(roller_radius+tolerance))+((roller_radius+tolerance)*(roller_radius+tolerance)));
module chainring( teeth=52, roller=7.9, pitch=12.7) {
radius = sprocket_radius(teeth=teeth, roller=roller, pitch=pitch);
echo( "Radius=", radius, "mm");
difference() {
color("grey")
sprocket( teeth=teeth, roller=roller, pitch=pitch);
translate([0, 0, -10])
cylinder(h=20, r=radius*.75);
}
}
module spider(radius, arms) {
for(i=[0:1:5])
rotate([0,90,i*(360/5)])
color("grey")
prismoid(size1=[7, radius/5], size2=[5, radius/7], height=radius*.9);
}
/**
* parameterised chainset with, currently, only one chainring; and,
* currently, derailleur-sized chain. Parameters are:
* `teeth`: the number of teeth, obviously;
* `arms`: the number of arms on the spider;
* `crank`: the length of the crank, in millimetres;
* `bbshell`: the width of the bottom bracket shell, in millimetres.
*/
module chainset(teeth=53, arms=5, crank=172, bbshell=68) {
radius = sprocket_radius(teeth=teeth);
chainring(teeth=teeth);
spider(radius*.9, 5);
// cranks
rotate([0, 90, 0])
translate([6, 0, -10])
color("grey")
prismoid(size1=[10, 25], size2=[7, 18], h=crank+20);
rotate([0, 90, 180])
translate([0 - (12+bbshell), 0, -10])
color("grey")
prismoid(size1=[10, 25], size2=[7, 18], h=crank +20);
// pedals
translate([0-crank, 0, 8+bbshell])
pedal();
translate([crank, 0, 0-2])
mirror([0, 0, 1])
pedal();
translate([0, 0, 5])
color("black")
cylinder(h=bbshell, r=17);
translate([0, 0, -5])
color("black")
cylinder(h= bbshell+20, r=6);
}
// chainring();
// spider(90, 1);
// chainset(teeth=82, crank=140);