tank/tank-track-cover.scad

90 lines
2.3 KiB
OpenSCAD

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();