90 lines
2.3 KiB
OpenSCAD
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();
|
|
|