diff --git a/microcar/microcar.scad b/microcar/microcar.scad index cb323a2..e3beeef 100644 --- a/microcar/microcar.scad +++ b/microcar/microcar.scad @@ -9,12 +9,16 @@ include include include +wheelbase = 2000; +track = 1400; + +ackerman = 90 + atan( wheelbase/( track / 2) ); tub(fl=1100); translate([-900,0,130]) - suspension(); + suspension(aa = ackerman); translate([1100,0,130]) - suspension(cst=0); + suspension(aa = 0, cst=0); diff --git a/microcar/suspension.scad b/microcar/suspension.scad index 392fbe0..6d3219b 100644 --- a/microcar/suspension.scad +++ b/microcar/suspension.scad @@ -30,7 +30,7 @@ caster_angle = 7; // TODO: should be calculated from hub width and wheel radius? camber_angle = 10; -module kingpin( h = 300, r = 12.5, +module kingpin( aa=0, h = 300, r = 12.5, cmb = camber_angle, cst = caster_angle, al = 100) { kl = h * (1/cos(90 - cmb)) * (1/cos(90 - cst)); @@ -44,17 +44,22 @@ module kingpin( h = 300, r = 12.5, camber_offset = aof/tan(90-cmb); caster_offset = 0 - aof/tan(90-cst); - + // axle itself translate([caster_offset, al + camber_offset, 0-aof]) - rotate([ 90, 0, 0]) - cylinder( h=al, r=r); + rotate([ 90, 0, 0]) + cylinder( h=al, r=r); + + // steering arm + translate([caster_offset, camber_offset, 0-aof]) + rotate([ aa, -90, 0]) + cylinder( h=al, d=r); translate([caster_offset, al, 0-aof]) - wheel(); - - + wheel(); } +// kingpin(); +// TODO: still need steering rack and track rods. module lug() { difference() { @@ -145,7 +150,7 @@ module wishbone(l, w, skew = 0, is_upper = true) { } } -module suspension( l = 300, w = 300, h = 300, +module suspension( aa = 7, l = 300, w = 300, h = 300, track = 1400, hub_width = 135, wheel_diameter=600, cmb=camber_angle, cst=caster_angle) { subframe(l,w,h); @@ -187,11 +192,11 @@ module suspension( l = 300, w = 300, h = 300, translate([caster_offset/2, wishbone_length + (stock_section * 4), 0]) - kingpin(cst=cst); + kingpin(aa=aa, cst=cst); mirror([0,1, 0]) translate([caster_offset/2, wishbone_length + (stock_section * 4), 0]) - kingpin(cst=cst); + kingpin(aa=aa, cst=cst); } - +// suspesion() diff --git a/microcar/tub.scad b/microcar/tub.scad index 4c7636b..ec9f9ac 100644 --- a/microcar/tub.scad +++ b/microcar/tub.scad @@ -12,6 +12,7 @@ a_pillar_y = -400; // y location of face of 'A' pillar bb_height = 274; // internal height of battery box bb_width = 260; // internal width of battery box + /***************************************************** * the 'cowl' is the near-horizontal panel which the * bottom of the windscreen is mounted to. In practice @@ -20,8 +21,8 @@ bb_width = 260; // internal width of battery box * is horizontal. ****************************************************/ -// slope of the cowl -cowl_angle = -70; +// slope of the cowl to horizontal +cowl_angle = 20; // maximum height of the cowl (at the A pillar) cowl_height = 450; @@ -43,6 +44,10 @@ sill_max_height = bb_height; sill_min_height = 125; sill_width = 150; +// As nearly as I can measure it, the windscreen angle +// of the Citroen C1 is 23.8° to horizontal. +windscreen_angle = 24; + module battery_box_side( floor_length = 1100) { fhl = (floor_length/2); top_hlf = (bb_height * tan(layback_angle_f)) + fhl;