$fn=100; WIDTH = 76; DEPTH = 64; THICKNESS = 5; BASE_PLATE_CORNER_RADIUS = 10; VSLOT_WHEEL_HOLE_DIA_SMALL = 5; VSLOT_WHEEL_HOLE_DIA_BIG = 7; WHEEL_DIA = 24; WHEEL_FLANGE = 2.25; EXTRUSION_WIDTH = 20; WHEEL_FLANGE_IN_EXTRUSION_SIZE = 2; // /!\ Max = WHEEL_FLANGE module base_plate () { difference() { linear_extrude(THICKNESS) minkowski() { offset(-BASE_PLATE_CORNER_RADIUS) square([WIDTH, DEPTH]); circle(BASE_PLATE_CORNER_RADIUS); } // Wheel holes cy = DEPTH / 2; wheel_radius = WHEEL_DIA / 2; translate([10, cy - EXTRUSION_WIDTH / 2 - (wheel_radius - WHEEL_FLANGE_IN_EXTRUSION_SIZE), -1]) cylinder(h=THICKNESS + 2, r=VSLOT_WHEEL_HOLE_DIA_SMALL / 2); translate([WIDTH - 10, cy - EXTRUSION_WIDTH / 2 - (wheel_radius - WHEEL_FLANGE_IN_EXTRUSION_SIZE), -1]) cylinder(h=THICKNESS + 2, r=VSLOT_WHEEL_HOLE_DIA_SMALL / 2); translate([10, cy + EXTRUSION_WIDTH / 2 + (wheel_radius - WHEEL_FLANGE_IN_EXTRUSION_SIZE), -1]) cylinder(h=THICKNESS + 2, r=VSLOT_WHEEL_HOLE_DIA_BIG / 2); translate([WIDTH - 10, cy + EXTRUSION_WIDTH / 2 + (wheel_radius - WHEEL_FLANGE_IN_EXTRUSION_SIZE), -1]) cylinder(h=THICKNESS + 2, r=VSLOT_WHEEL_HOLE_DIA_BIG / 2); } } module belt_attach() { linear_extrude(8) union() { translate([0, THICKNESS - 4]) union() { hull() { translate([2, 1.5]) square([3.5, 2.5]); translate([2, 2]) circle(2); } translate([5.5, 1.5]) square([4.7, 2.5]); } translate([5.5 + 4.7, -1]) square([7+1, THICKNESS + 2]); } } difference() { base_plate(); translate([17, DEPTH / 2 - 4, 0.01]) rotate([90,0,180]) belt_attach(); translate([WIDTH - 17, DEPTH / 2 + 4, 0.01]) rotate([90,0,0]) belt_attach(); }