Done a lot of work on the knuckle, and I'm now even more pleased with it.

This commit is contained in:
Simon Brooke 2025-09-24 17:33:29 +01:00
parent 35376827d1
commit e57f154f1d
2 changed files with 44 additions and 34 deletions

View file

@ -16,7 +16,7 @@ $fn=64;
// learned 60 years ago. There REALLY should not be any unexplained // learned 60 years ago. There REALLY should not be any unexplained
// numbers. // numbers.
module fourbar_leg(length=1000, chord=100, lat_skew=35, long_skew=30) { module fourbar_leg(length=800, chord=100, lat_skew=35, long_skew=30) {
h = length * cos(lat_skew) * cos( long_skew); h = length * cos(lat_skew) * cos( long_skew);
w = length * sin( lat_skew); w = length * sin( lat_skew);
d = length * sin( long_skew); d = length * sin( long_skew);
@ -68,14 +68,14 @@ module fourbar_axle_half( length=1000, chord=100, lat_skew=35, long_skew=30, sho
// lower knuckle // lower knuckle
rotate([0, long_skew, 0]) rotate([0, long_skew, 0])
translate([(0 - (chord*1.25)), (l_hlb * cos(rise) + 72), -62]) translate([(0 - (chord*1.25)), (l_hlb * cos(rise) + 72+60), -62])
lower_bar_end_knuckle(chord, 12, rise, lat_skew); lower_bar_end_knuckle(chord, 12, rise, lat_skew);
rotate([0, long_skew, 0]) rotate([0, long_skew, 0])
translate([(0 - (chord*1.25)), (l_hlb * cos(rise) + 155), -62]) translate([(25 - (chord*1.25)), (l_hlb * cos(rise) + 155+60), -62])
wheel(); wheel();
rotate([0, long_skew, 0]) rotate([0, long_skew, 0])
translate([(0 - (chord*1.25)), (l_hlb * cos(rise) + 115), -62]) translate([(25 - (chord*1.25)), (l_hlb * cos(rise) + 115+60), -62])
rotate([90, 0, 0]) rotate([90, 0, 0])
color("silver") color("silver")
cylinder( h=1.5, r=75); cylinder( h=1.5, r=75);
@ -99,5 +99,5 @@ module fourbar(length=1000, chord=100, lat_skew=30, long_skew=30, shoulder=650)
} }
// fourbar(length=1000, chord=100, long_skew=30, lat_skew=35, shoulder=650); fourbar(length=800, chord=100, long_skew=30, lat_skew=35, shoulder=650);
// fourbar_axle_half(); // fourbar_axle_half();

View file

@ -71,33 +71,41 @@ module lower_bar_end_knuckle_old(chord=100, pivot_radius=12, rise=8,lat_skew=30)
module lower_bar_end_knuckle(chord=100, pivot_radius=12, rise=8,lat_skew=30, colour="blue") { module lower_bar_end_knuckle(chord=100, pivot_radius=12, rise=8,lat_skew=30, colour="blue") {
l_body=chord * 2; l_body=chord * 2;
w_body=pivot_radius * 2.5; w_body=pivot_radius * 2.5;
h_body=70;
h_axis=pivot_radius * 2.75; h_axis=pivot_radius * 2.75;
v_axis = 0;
difference() { difference() {
union () { union () {
// (more streamlined) body // (more streamlined) body
translate([160, w_body/2, -22]) translate([158, 0, -22])
rotate([0,0,180]) rotate([0,0,180])
scale([1, 2, 1]) scale([1, 2, 1])
color( colour) color( colour)
airfoil(h=70, L=l_body); airfoil(h=h_body, L=l_body);
// boss for wheel axle // boss for wheel axle
translate([ chord * 0.25, w_body * 0.9, 0]) translate([ chord * 0.25, w_body * 0.4, 0])
rotate([90, 0, 0]) rotate([90, 0, 0])
color( colour) color( colour)
cyl(h=w_body * 1.25, r=20, rounding=5); cyl(h=w_body * 1.25, r=20, rounding=5);
// airfoil stub to be epoxied into the lower bar of
// the linkage
translate([chord*1.25, 0 - pivot_radius, 30])
rotate([90 + rise, 360 - lat_skew, 0])
color( colour)
airfoil(h=chord, L=2 - chord);
} }
// scoop for leg-bottom knuckle to rotate within // scoop for leg-bottom knuckle to rotate within
translate([ chord*0.25, w_body/2, h_axis]) translate([ chord*0.25, v_axis, h_axis])
rotate([0, 90, 0]) rotate([0, 90, 0])
cylinder(h=chord, r=pivot_radius * 1.3); cylinder(h=chord, r=pivot_radius * 1.3);
// space for the airfoil leg to emerge // space for the airfoil leg to emerge. TODO: This shape is
translate([ chord*0.25, w_body*.75, pivot_radius * 2.25]) // NOT right, and a square section is not what's called for!
rotate([lat_skew + 45, 0, 0]) translate([chord*0.75, v_axis, h_axis])
cube([chord, pivot_radius * 4, pivot_radius * 4]); rotate([lat_skew, 0, 0])
prismoid([chord, pivot_radius*2.6], [chord, chord], h=chord);
// through hole for pivot axle // through hole for pivot axle
translate([-1, w_body/2, h_axis]) translate([-1, v_axis, h_axis])
rotate([0, 90, 0]) rotate([0, 90, 0])
cylinder(h=250, r=pivot_radius/3); cylinder(h=250, r=pivot_radius/3);
// through hole for wheel axle // through hole for wheel axle
@ -105,33 +113,35 @@ module lower_bar_end_knuckle(chord=100, pivot_radius=12, rise=8,lat_skew=30, col
rotate([90, 0, 0]) rotate([90, 0, 0])
cylinder(h=w_body * 1.4, r=12.5); cylinder(h=w_body * 1.4, r=12.5);
// slice off the front bottom // slice off the front bottom
translate([chord * 1.25, w_body/2, 0 - w_body]) translate([chord * 1.25, 0, 0 - w_body])
rotate([270-lat_skew, 0, 90]) rotate([270-lat_skew, 0, 90])
color( colour) color( colour)
cuboid([2* w_body, 2*w_body, l_body *.75]); cuboid([2* w_body, 2*w_body, l_body *.75]);
// slice off the upper back // slice off the upper back
translate([0, w_body/2, w_body * 2.5]) translate([0, 0, w_body * 2.5])
rotate([270-lat_skew, 0, 90]) rotate([270-lat_skew, 0, 90])
color( colour) color( colour)
cuboid([2* w_body, 2*w_body, l_body *.75]); cuboid([2* w_body, 2*w_body, l_body *.75]);
} // radius the top
translate([158 - l_body/2,0,h_body-(w_body/2) - 22])
// airfoil stub to be epoxied into the lower bar of
// the linkage
translate([chord*1.25, 1, 30])
rotate([90 + rise, 360 - lat_skew, 0])
color( colour) color( colour)
airfoil(h=chord, L=2 - chord); scale([1, 1.6, 1])
difference() {
// // brake disk translate([0, 0, w_body/4 + 1])
// translate([(0 - (chord*1.25)), (l_hlb * cos(rise)), 1]) cuboid([l_body, w_body, w_body/2]);
// rotate([90, 0, 0]) rotate([0, 90, 0])
// color("silver") cylinder( h=l_body + 2, r=w_body/2, center=true);
// cylinder( h=1.5, r=75); }
// // wheel (obviously) // radius the lower surface
// translate([(0 - (chord*1.25)), (l_hlb * cos(rise)), -10]) color( "blue")
// wheel(); difference() {
translate([60, 0, 10])
cuboid([l_body + 4, w_body*1.6, 80]);
translate([127 - l_body/2, w_body * 0.8 +1, 179])
rotate([90, 0, 0])
cylinder( h=w_body *1.6 + 2, r=l_body);
}
}
} }
//translate([-125, 0, 0]) //translate([-125, 0, 0])