tricycle-mechanical-design/model/fourbar.scad

105 lines
2.7 KiB
OpenSCAD

// fourbar.scad
// (c) Simon Brooke 2025; CC-BY-SA
include <NACAAirfoils/files/Naca4.scad>
include <library/skew.scad>
include <wheel.scad>
module fourbar_leg(length=1000, chord=100, long_skew=30, lat_skew=30) {
h = length * cos(lat_skew) * cos( long_skew);
w = length * sin( lat_skew);
d = length * sin( long_skew);
translate([0, 0-w, 0]) {
// upper pivot needs a complex trig transformation!
translate([d - (chord/2), w, h + chord])
rotate([0, 90+long_skew, 0])
color("black")
cylinder(h=chord, r=12);
// lower pivot:
translate([0 - chord, 0, (chord/2 * sin(long_skew))])
rotate([0, 90+long_skew, 0])
color("black")
cylinder(h=chord, r=12);
// aerofoil section
sskew([0, long_skew, 0, 0, 0, 0])
rotate([lat_skew, 0, 180])
color("black")
airfoil(h=length, L=chord);
}
}
module lower_knuckle(chord=100, pivot_radius=12) {
difference() {
cube([chord * 1.5, pivot_radius * 3, chord*.66]);
translate([ chord*0.25, -1, pivot_radius * 2])
cube([chord, pivot_radius * 4, pivot_radius * 4]);
}
}
module fourbar_axle_half( length, chord, long_skew) {
shoulder=650;
lat_skew=30;
rise=8;
// I've got something wrong in computing the half-lower-bar
// length, and I don't know what.
fudge=0;
w = ((length * sin(lat_skew) ) + ( shoulder / 2));
l_hlb= w * (1/cos(rise)) + fudge;
v_offset=l_hlb * sin(rise);
echo("long_skew", long_skew);
translate([0, 0, 0 - v_offset])
rotate([90-rise, 0, 180])
color("black")
airfoil(h=l_hlb, L=chord);
// lower knuckle
translate([(0 - (chord*1.25)), l_hlb * cos(rise), 30])
rotate([0, long_skew, 0])
color("black")
lower_knuckle(chord, 12);
// wheel
translate([-50, l_hlb + 72, -40])
rotate([270, 0, 0])
wheel(iso=451);
// brake disk
translate([-50, l_hlb + 35, -40])
color("silver")
rotate([90, 0, 0])
cylinder(h=1.5, r=75);
// brake caliper
}
module fourbar(length=1000, chord=100, long_skew=30, lat_skew=30, shoulder=650) {
w = (length * sin( lat_skew)) + ( shoulder / 2);
translate([0, 0-(shoulder/2), 0])
fourbar_leg( length, chord, long_skew, lat_skew);
translate([0, (shoulder/2), 0])
mirror([0, 1, 0])
fourbar_leg(length, chord, long_skew, lat_skew);
fourbar_axle_half(w, chord, long_skew);
mirror([0, 1, 0])
fourbar_axle_half(w, chord, long_skew);
}
// lower_knuckle();
// fourbar();
// fourbar_axle_half(1000,100, 30);