From ca785026258790596f14fb0c781231390584891c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lauri=20V=C3=B5sandi?= Date: Wed, 27 Feb 2019 13:37:42 +0200 Subject: [PATCH] Add tank track covers --- tank-track-cover.scad | 89 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 tank-track-cover.scad diff --git a/tank-track-cover.scad b/tank-track-cover.scad new file mode 100644 index 0000000..4686a1c --- /dev/null +++ b/tank-track-cover.scad @@ -0,0 +1,89 @@ +WIDTH = 30; /* track width */ +CURVE_RADIUS = 25; /* track wheel cover curve radius */ +AXLE_DISTANCE = 195; /* how far is the front motor from back motor */ +THICKNESS=1.5; /* plastic thickness all around */ +CLEARANCE = 10; /* clearance around axles and suspension mounts */ + + +module mount_pad(left, top, diameter=4) { + translate([left, top]) { + difference() { + union() { + cylinder(h=THICKNESS, r1=diameter*1.5, r2=diameter*1.5, $fn=50); + translate([-diameter*1.5, 0, 0]) { + cube([diameter*3, diameter*3, THICKNESS]); + } + } + cylinder(h=THICKNESS, r1=diameter/2, r2=diameter/2, $fn=50); + } + } +} + +/* bucket creates cylinder with inner cylinder removed */ +module bucket() { + difference() { + cylinder(h = WIDTH, r1 = CURVE_RADIUS+THICKNESS, r2 = CURVE_RADIUS+THICKNESS, $fn=100); + translate([0, 0, THICKNESS]) { + cylinder(h = WIDTH, r1 = CURVE_RADIUS, r2 = CURVE_RADIUS, $fn=100); + } + cylinder(h=THICKNESS, r1=CLEARANCE, r2=CLEARANCE, $fn=50); + rotate(135) { + cube([CURVE_RADIUS+THICKNESS, CURVE_RADIUS+THICKNESS, WIDTH]); + } + } +} + +module track_cover() { + difference() { + union() { + /* mounting edge */ + translate([0, CLEARANCE, 0]) { + cube([AXLE_DISTANCE, CURVE_RADIUS-CLEARANCE, THICKNESS]); + } + + /* wheel covers */ + bucket(); + translate([AXLE_DISTANCE, 0, 0]) { + mirror([1, 0, 0]) { + bucket(); + } + } + + /* cover on the top */ + translate([0, CURVE_RADIUS]) { + cube([AXLE_DISTANCE, THICKNESS, WIDTH]); + } + } + union() { + /* cutout lower half */ + translate([-CURVE_RADIUS-THICKNESS, -CURVE_RADIUS-THICKNESS]) { + cube([10000, CURVE_RADIUS+THICKNESS, 10000]); + } + + /* cutout inner arcs */ + translate([0, 0, THICKNESS]) { + cube([AXLE_DISTANCE, CURVE_RADIUS, WIDTH]); + } + + /* cutout clearance */ + cube([AXLE_DISTANCE, CLEARANCE, THICKNESS]); + } + } + mount_pad(28, 5); + mount_pad(63, 5); + mount_pad(63+39, 5); + mount_pad(63+39*2, 5); + +} + +module track_cover_set() { + track_cover(); + mirror([0,1,0]) { + translate([0, -CURVE_RADIUS*2-THICKNESS*3, 0]) { + track_cover(); + } + } +} + +track_cover_set(); +