source/projects/garage/casters.scad

82 lines
No EOL
2.2 KiB
OpenSCAD

function caster_axel(wheel_r, axel_r) = [1 + axel_r, wheel_r + axel_r, 0];
module caster_bracket(wheel_r, wheel_h, axel_r, plate_t, padding=0.125, $fn=$fn) {
plate_side = wheel_r + axel_r + 1;
module caster_plate(
wheel_r,
axel_r,
plate_t,
) {
difference() {
linear_extrude(plate_t)
polygon([
[0, 0],
[0, plate_side],
[2 + axel_r * 2, plate_side],
[plate_side, 2 + axel_r * 2],
[plate_side, 0],
]);
axel = caster_axel(wheel_r, axel_r);
translate(axel)
cylinder(r=axel_r, h=plate_t, $fn=$fn);
}
}
translate([0, -plate_t, 0])
union() {
translate([0, plate_t, 0]);
caster_plate(wheel_r, axel_r, plate_t);
translate([0, plate_t, wheel_h + (plate_t + padding * 2)])
caster_plate(wheel_r, axel_r, plate_t);
cube([plate_side, plate_t, wheel_h + ((plate_t + padding) * 2)]);
}
}
module caster(
wheel_r,
wheel_h,
axel_r,
axel_h,
bearing_r=0,
bearing_h=0,
plate_t=0.125,
padding=0.125,
$fn=$fn,
) {
rotate([-90, 0, -90])
translate([-(caster_axel(wheel_r, axel_r).y), bearing_h - (wheel_r * 2) - 1 + plate_t + padding, -((wheel_h/2) + plate_t + padding)])
union() {
caster_bracket(wheel_r, wheel_h, axel_r, plate_t, padding, $fn=$fn);
translate(caster_axel(wheel_r, axel_r)) {
translate([0, 0, plate_t + padding])
cylinder(r = wheel_r, h=wheel_h, $fn=$fn);
translate([0, 0, -padding]) {
cylinder(r = axel_r, h = (wheel_h + (2* plate_t) + (padding*4)), $fn=$fn);
}
}
translate([caster_axel(wheel_r, axel_r).y, 0, (wheel_h/2) + plate_t + padding])
rotate([90, 0, 0]) {
cylinder(r = bearing_r, h=bearing_h);
translate([0, 0, bearing_h])
cylinder(r=axel_r, h=axel_h, $fn=$fn);
}
}
}
caster(
// wheel (r, h)
5, 1,
// axel (r, h)
0.5, 1,
// bearing (r, h)
0.75, 0.25,
$fn=16
);