tricycle-mechanical-design/model/subframe.scad
2025-09-16 21:10:10 +01:00

141 lines
3.9 KiB
OpenSCAD

// subframe.scad:
// (c) Simon Brooke 2025; CC-BY-SA
include <SprocketGenerator2/files/Sprocket_Generator_v2_example_10.scad>
include <wheel.scad>
include <chainset.scad>
include <epicyclic.scad>
module subframe_cycleparts(rim=451, chainring_teeth=82, crank=140) {
// wheel
translate([0, 382, 93])
rotate([0, 90, 0])
wheel(iso=rim);
translate([-42, 382, 93])
rotate([0, 90, 0])
color("grey")
sprocket(teeth=30, roller=7.9, pitch=12.7);
rotate([90, 0, 90])
translate([660, 180, -40])
chainset( teeth=chainring_teeth, crank=crank);
rotate([0,90,0])
translate([-60, 900, 24])
epicyclic();
rotate([0,90,0])
translate([-190, 900, -22])
motor();
}
module aluminium_subframe (rim=451, chainring_teeth=82, crank=140) {
// front leg (supports cross-shaft, epicyclic, motor
translate([-25, 820, -50])
color("silver")
cube([50, 25, 356]);
// bottom bracket leg
translate([-25, 680, -50])
color("silver")
cube([50, 25, 413]);
// wheel leg
translate([-100, 345, -50])
rotate([0, 7, 0])
color("silver")
cube([25, 75, 458]);
// front upper
translate([-25, 1100, 200])
rotate([70, 0, 0])
color("silver")
cube([50, 25, 425]);
// central upper
translate([-25, 714, 343])
rotate([82, 0, 0])
color("silver")
cube([50, 25, 529]);
// rear leg
translate([-25, 0, -50])
rotate([-20, 0, 0])
color("silver")
cube([50, 25, 525]);
// boltdown flange
color("grey")
translate([0, 0, -50])
linear_extrude(height=2.5)
polygon([[-50, 0], [-100, 345],
[-100, 415], [-50, 700],
[-50, 850], [50, 850],
[50, 625], [-40, 625],
[-40, 150], [50, 150],
[50, 1070], [50, 0]]);
subframe_cycleparts(rim, chainring_teeth, crank);
}
/**
* this is more or less right. The corners of the epicyclic/motor
* bracket should be rounded, and there should be fillets along
* every concave join between carbon parts
*/
module carbon_subframe(rim=451, chainring_teeth=82, crank=140) {
translate([-25, 0, 0])
color("black", 0.9)
difference() {
rotate([90, 0, 90])
linear_extrude( height=50)
polygon([[1020, 306], [680, 400], [150,408], [0, -50], [1020, -50]]);
translate([-26, 382, 93])
rotate([90,0,90])
cylinder( h=100, r=rim * 0.61);
translate([-26, 825, 25])
cube([150, 150, 200]);
translate([-26, 625, 25])
cube([10, 200, 150]);
}
// wheel leg
translate([-94, 345, -50])
rotate([0, 7, 0])
color("black")
cube([25, 75, 458]);
// epicyclic support
color("black")
translate([-47, 890, 25])
difference() {
cube([140, 100, 200]);
translate([2.5, -2.5, -2.5])
cube([135, 100, 205]);
}
// boltdown flange
color("black")
translate([0, 0, -50])
linear_extrude(height=2.5)
polygon([[-50, 0], [-100, 345],
[-100, 415], [-50, 700],
[-50, 850], [50, 850],
[50, 650], [-40, 650],
[-40, 150], [50, 150],
[50, 1070], [50, 0]]);
subframe_cycleparts(rim, chainring_teeth, crank);
}
module subframe( structure="carbon", rim=451, chainring_teeth=82, crank=140) {
if (structure == "carbon") {
carbon_subframe(rim=rim, chainring_teeth=chainring_teeth, crank=crank);
} else {
aluminium_subframe(rim=rim, chainring_teeth=chainring_teeth, crank=crank);
}
}
// subframe( structure="aluminium");