// Plant pot saucer // date: 19-3-2025 // author: Floris van den Bosch include // 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); } } } }