diff --git a/model/fourbar.scad b/model/fourbar.scad index 84a4fbd..40d146a 100644 --- a/model/fourbar.scad +++ b/model/fourbar.scad @@ -2,7 +2,7 @@ // (c) Simon Brooke 2025; CC-BY-SA - +include include include include @@ -34,31 +34,58 @@ module fourbar_leg(length=1000, chord=100, long_skew=30, lat_skew=30) { } -module lower_knuckle(chord=100, pivot_radius=12) { +module loawer_bar_end_knuckle(chord=100, pivot_radius=12, rise=8) { l_body=chord * 1.5; w_body=pivot_radius * 2.5; - h_axis=pivot_radius * 3; + h_axis=pivot_radius * 2.75; difference() { union () { - translate([0, w_body/2, h_axis]) + translate([l_body/2, w_body/2, h_axis]) rotate([0, 90, 0]) - cylinder(h=l_body, r=w_body/2); - cube([l_body, w_body, h_axis]); - translate([chord * 1.25, w_body, 0]) + cyl(h=l_body, r=w_body/2, rounding=5); + translate([l_body/2, w_body/2, h_axis/2]) + cuboid([l_body, w_body, h_axis], rounding=5, except=TOP); + // bulge for wheel axle; the fork insertion end of + // a lefty axle is 25mm diameter + translate([chord * 1.25, w_body/2, 0]) rotate([90, 0, 0]) - cylinder(h=w_body, r=pivot_radius * 2); + cyl(h=w_body, r=25, rounding=5); + // fairing for this + translate([chord * 1.25, w_body/2, -7.5]) + rotate([80, 0, 270]) + prismoid([w_body, 35], [w_body, 10], rounding=5, h=l_body/2); + } translate([ chord*0.25, -1, pivot_radius * 3]) cube([chord, pivot_radius * 4, pivot_radius * 4]); + // scoop for leg-bottom knuckle to rotate within translate([ chord*0.25, w_body/2, h_axis]) rotate([0, 90, 0]) - cylinder(h=chord, r=pivot_radius * 1.5); - // throough hole for pivot axle + cylinder(h=chord, r=pivot_radius * 1.3); + // through hole for pivot axle translate([-1, w_body/2, h_axis]) rotate([0, 90, 0]) - cylinder(h=l_body+2, r=pivot_radius/3); + cylinder(h=l_body+2, r=pivot_radius/3); + // through hole for wheel axle + translate([chord * 1.25, w_body +1, 0]) + rotate([90, 0, 0]) + cylinder(h=w_body-5, r=12.5); } + + // airfoil stub to be epoxied into the lower bar of + // the linkage + translate([(chord * 1.25) - 1, 5 - chord, 0]) + rotate([90-rise, 0, 180]) + airfoil(h=chord, L=chord-2); + // root reinforcement for the above + translate([chord * 1.25, 5 - chord/3, 9]) + rotate([90, 0, 180]) + airfoil(h=chord/3, L=chord); + translate([(chord * .75), 0, 10]) + rotate([90, 0, 0]) + prismoid([chord -1, 6], [chord -2, 0], h=(chord/3)); + } module fourbar_axle_half( length, chord, long_skew) { @@ -85,7 +112,7 @@ module fourbar_axle_half( length, chord, long_skew) { translate([(0 - (chord*1.25)), l_hlb * cos(rise), 30]) rotate([0, long_skew, 0]) color("black") - lower_knuckle(chord, 12); + loawer_bar_end_knuckle(chord, 12, rise); // wheel translate([-50, l_hlb + 72, -40]) @@ -121,10 +148,9 @@ module fourbar(length=1000, chord=100, long_skew=30, lat_skew=30, shoulder=650) translate([-125, 0, 0]) color("blue") - lower_knuckle(); -/* translate([0, 77, 0]) - rotate([270, 0, 0]) - wheel();*/ + loawer_bar_end_knuckle(); +translate([0, 77, 0]) + wheel(); translate([0, 40, 0]) color("silver") rotate([90, 0, 0]) diff --git a/model/wheel.scad b/model/wheel.scad index eb9dcce..dfb7f72 100644 --- a/model/wheel.scad +++ b/model/wheel.scad @@ -20,42 +20,43 @@ module wheel (iso=451) { radius=(iso/2)+7; - // rim - color("grey") - difference() { - cylinder(h=22, r=radius, center=true); - translate([0,0, -11]) - cylinder(h=26, r=(radius-10)); + rotate([270, 0, 0]) { + // rim + color("grey") + difference() { + cylinder(h=22, r=radius, center=true); + translate([0,0, -11]) + cylinder(h=26, r=(radius-10)); + } + + // carbon cones covering the spokes + color("black") + translate([0,0, 4]) + cylinder(h=26.6, r1=radius, r2=22.5); + color("black") + mirror([0, 0, -1]) + translate([0,0, 4]) + cylinder(h=14.4, r1=radius, r2=29); + + // tyre + color("black") + rotate_extrude(convexity = 10) + translate([radius +10, 0, 0]) + circle(r = 12, $fn = 100); + + // hub + color("grey") + translate([0, 0, -40]) + cylinder(h=65, r=22.5); + + // axle + color("silver") { + translate([0, 0, -45]) + cylinder(h=70, r1=12.5, r2=7.5); + translate([0, 0, -60]) + cylinder(h=25, r=12.5); + } } - - // carbon cones covering the spokes - color("black") - translate([0,0, 4]) - cylinder(h=26.6, r1=radius, r2=22.5); - color("black") - mirror([0, 0, -1]) - translate([0,0, 4]) - cylinder(h=14.4, r1=radius, r2=29); - - // tyre - color("black") - rotate_extrude(convexity = 10) - translate([radius +10, 0, 0]) - circle(r = 12, $fn = 100); - - // hub - color("grey") - translate([0, 0, -40]) - cylinder(h=65, r=22.5); - - // axle - color("silver") { - translate([0, 0, -45]) - cylinder(h=70, r1=12.5, r2=7.5); - translate([0, 0, -85]) - cylinder(h=40, r=12.5); - } - } // wheel(); \ No newline at end of file