70 lines
1.7 KiB
OpenSCAD
70 lines
1.7 KiB
OpenSCAD
// Plant pot saucer
|
|
// date: 19-3-2025
|
|
// author: Floris van den Bosch
|
|
|
|
include <BOSL2/std.scad>
|
|
|
|
// parameters
|
|
// ikea: 125
|
|
bottom_diameter = 125;
|
|
height = 20;
|
|
wall_thickness = 1;
|
|
spoke_spacing = 100.0;
|
|
|
|
|
|
// derived parameters
|
|
// height = 0.15 * bottom_diameter;
|
|
top_diameter = bottom_diameter + height;
|
|
number_of_spokes = max(floor(PI * top_diameter / spoke_spacing), 3);
|
|
spoke_center_offset = 0.15 * top_diameter;
|
|
|
|
echo("Bot diameter: ", bottom_diameter);
|
|
echo("Top diameter: ", top_diameter);
|
|
|
|
$fa = 0.5;
|
|
$fs = 0.5;
|
|
|
|
w = 2 * wall_thickness;
|
|
d_bottom = bottom_diameter + w;
|
|
d_top = top_diameter + w;
|
|
|
|
diff("R", "K"){
|
|
// outer shell
|
|
cylinder(h = height, d1 = d_bottom, d2 = d_top);
|
|
|
|
// text
|
|
tag("K") up(wall_thickness) text3d(str(bottom_diameter), center=true);
|
|
// interior cutout
|
|
tag("R") difference(){
|
|
|
|
translate([0,0,wall_thickness])
|
|
cylinder(h = height, d1 = bottom_diameter, d2 = top_diameter);
|
|
|
|
r = w;
|
|
translate([0, 0, wall_thickness / 2])
|
|
linear_extrude(3/2 * wall_thickness)
|
|
offset(r=-r)
|
|
offset(r=r)
|
|
union(){
|
|
for(angle = [0:360/number_of_spokes:360]){
|
|
rotate([0 ,0, angle])
|
|
// main spokes
|
|
hull(){
|
|
translate([spoke_center_offset, 0])
|
|
circle(r = w);
|
|
translate([d_top, 0])
|
|
circle(r = w);
|
|
}
|
|
|
|
}
|
|
//rounded corners
|
|
t = 1.001 * wall_thickness / height;
|
|
c = t * d_top + (1 - t) * bottom_diameter;
|
|
difference(){
|
|
circle(d=c + r);
|
|
circle(d=c);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|