109 lines
No EOL
3.1 KiB
OpenSCAD
109 lines
No EOL
3.1 KiB
OpenSCAD
/**
|
|
* suspension.scad
|
|
*
|
|
* First sketch of a microcar suspension subframe.
|
|
*
|
|
* The purpose of the subframe is sumply to carry the inner ends of the
|
|
* wishbones, so it is simply the minimum size required to do that.
|
|
*/
|
|
|
|
// assumes we're building out of square section aluminium tobe;
|
|
// the section width of that tube.
|
|
stock_section = 25;
|
|
|
|
lug_thickness = stock_section/6;
|
|
|
|
// radius of suspension pivots
|
|
pivot_radius = stock_section/3; //for now
|
|
|
|
module lug() {
|
|
difference() {
|
|
union() {
|
|
translate([0, stock_section/2, 0]){
|
|
cube([ stock_section, stock_section, lug_thickness], center=true);
|
|
}
|
|
|
|
cylinder( r=stock_section/2, h=stock_section/4, center=true);
|
|
|
|
}
|
|
cylinder( r=pivot_radius, h=stock_section, center=true);
|
|
}
|
|
}
|
|
|
|
module wishbone(l, w) {
|
|
ssd2 = stock_section/2;
|
|
ssm2 = stock_section * 2;
|
|
ssm3 = stock_section * 3;
|
|
|
|
translate([ (l - lug_thickness)/2, stock_section, ssd2])
|
|
rotate([180,90,0])
|
|
lug();
|
|
translate([ 0 - (l - lug_thickness)/2, stock_section, ssd2])
|
|
rotate([180,90,0])
|
|
lug();
|
|
|
|
color("silver")
|
|
union() {
|
|
intersection(){
|
|
linear_extrude(stock_section)
|
|
polygon( points=[[0-(l/2), ssd2], [l/2, ssd2],
|
|
[3*ssd2, w-(3*ssd2)], [0-(3*ssd2), w-(3*ssd2)],
|
|
// hole in the middle
|
|
[0-(l/2 - 3*ssd2), 3*ssd2],
|
|
[l/2 - 3*ssd2, 3*ssd2],
|
|
[ssd2, w-(5*ssd2)], [0-ssd2, w-(5*ssd2)]],
|
|
paths=[[0, 1, 2, 3], [4, 5, 6, 7]]);
|
|
translate([0 - (l - ssd2)/2, 0, 0 - stock_section])
|
|
cube([l-ssd2, w, ssm3]);
|
|
}
|
|
translate([-3*ssd2, w-3*ssd2, 0])
|
|
cube( [stock_section, 3*ssd2, stock_section]);
|
|
translate([ssd2, w-3*ssd2, 0])
|
|
cube( [stock_section, 3*ssd2, stock_section]);
|
|
};
|
|
color("darkgray")
|
|
translate([0, stock_section, ssd2])
|
|
rotate([0, 90, 0])
|
|
cylinder(h=l, r=pivot_radius, center=true);
|
|
color("darkgray")
|
|
translate([0, w - ssd2, ssd2])
|
|
rotate([0, 90, 0])
|
|
cylinder(h=ssm3, r=pivot_radius, center=true);
|
|
|
|
}
|
|
|
|
module subframe(l, w, h) {
|
|
q = stock_section * 2;
|
|
color( "silver")
|
|
difference() {
|
|
cube([l,w,h], center=true);
|
|
cube([l+200, w-q, h-q], center=true);
|
|
cube([l-q, w+200, h-q], center=true);
|
|
cube([l-q, w-q, h+200], center=true);
|
|
}
|
|
}
|
|
|
|
module suspension( l = 300, w = 300, h = 300,
|
|
track = 1400, hub_width = 135, wheel_diameter=600) {
|
|
subframe(l,w,h);
|
|
|
|
// Upper wishbones
|
|
translate([0, w/2, (h/2) - stock_section])
|
|
wishbone( l, 500);
|
|
mirror([0,1, 0]) {
|
|
translate([0, w/2, (h/2) - stock_section])
|
|
wishbone( l, 500);
|
|
}
|
|
|
|
// lower wishbones
|
|
translate([0, w/2, 0 -(h/2)])
|
|
wishbone( l, 500);
|
|
mirror([0,1, 0]) {
|
|
translate([0, w/2, 0 -(h/2)])
|
|
wishbone( l, 500);
|
|
}
|
|
}
|
|
|
|
lug();
|
|
|
|
suspension(); |