diff --git a/microcar/suspension.scad b/microcar/suspension.scad new file mode 100644 index 0000000..4d4f6b8 --- /dev/null +++ b/microcar/suspension.scad @@ -0,0 +1,109 @@ +/** + * 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(); \ No newline at end of file diff --git a/microcar/tub.scad b/microcar/tub.scad index ce18b4e..4c22689 100644 --- a/microcar/tub.scad +++ b/microcar/tub.scad @@ -11,7 +11,11 @@ bb_width = 260; // internal width of battery box * moment I'm making the simlifying assumption that it * is horizontal. ****************************************************/ -cowl_height = 550; + +// slope of the cowl +cowl_angle = -70; +// maximum height of the cowl (at the A pillar) +cowl_height = 450; floor_length = 1100; floor_width = 1500; @@ -21,8 +25,10 @@ floor_width = 1500; * which bonds to the front or rear bulkhead from the * layback angles, but I'm being lazy for now ****************************************************/ -layback_angle_f = 60; -layback_angle_r = 60; +// angle of the front bulkhead to vertical +layback_angle_f = 30; +// angle of the rear bulkhead to vertical +layback_angle_r = 45; sheet_thickness = 8; sill_max_height = bb_height; @@ -31,27 +37,31 @@ sill_width = 150; module battery_box_side( floor_length = 1100) { fhl = (floor_length/2); - top_hl = 800; // calculate this later + top_hlf = (bb_height * tan(layback_angle_f)) + fhl; + top_hlr = (bb_height * tan(layback_angle_r)) + fhl; rotate([90, 0 , 0]) linear_extrude( height=sheet_thickness) { polygon([[ 0 - fhl, 0], [ fhl, 0], - [ top_hl, bb_height], - [ 0 - top_hl, bb_height]]); + [ top_hlr, bb_height], + [ 0 - top_hlf, bb_height]]); } } module battery_box( floor_length = 1100) { top_hl = 800; // calculate this later hbbw = bb_width/2; + bias = (layback_angle_f == layback_angle_r) ? 0 : bb_height * ( tan(layback_angle_r) - tan(layback_angle_f))/2; + translate([0, hbbw, 0]) battery_box_side( floor_length); translate([0, 0 - (hbbw + sheet_thickness), 0]) battery_box_side( floor_length); translate([0, 0 - hbbw, 0]) cube([sheet_thickness, bb_width, bb_height]); - translate([0, 0 - sheet_thickness, bb_height]) - cube([1600, bb_width + (sheet_thickness * 2), + translate([bias, 0 - sheet_thickness, bb_height]) + cube([floor_length + (bb_height * tan(layback_angle_f)) + + (bb_height * tan(layback_angle_r)), bb_width + (sheet_thickness * 2), sheet_thickness], center = true); } @@ -59,13 +69,14 @@ module battery_box( floor_length = 1100) { module sill( floor_length = 1100) { cr = 5000; fhl = (floor_length/2); - top_hl = 800; // calculate this later + top_hl = fhl + (cowl_height * tan(layback_angle_f)); + top_hlr = fhl + (sill_max_height * tan(layback_angle_r)); difference() { rotate([90, 0 , 0]) linear_extrude( height=sill_width) { polygon([[ 0 - fhl, 0], [ fhl, 0], - [ top_hl, sill_max_height], + [ top_hlr, sill_max_height], [ 0, sill_min_height], [ a_pillar_y, sill_min_height], [ a_pillar_y, cowl_height], @@ -79,6 +90,14 @@ module sill( floor_length = 1100) { } module front_bulkhead() { + e = cowl_height / cos(layback_angle_f); + + translate([ 0 - floor_length/2, 0 -floor_width/2, 0]) + rotate([0, 0- layback_angle_f, 0]) + cube([sheet_thickness, floor_width, e]); +} + +module rear_bulkhead() { } @@ -94,3 +113,4 @@ mirror([0, 1, 0]) ( floor_width/2) + (sill_width/2), 0]) sill(); +front_bulkhead(); \ No newline at end of file