Compare commits

...

7 Commits
v1 ... trunk

Author SHA1 Message Date
Remi Rampin ed0a319cbe Increase part separation 0.2->0.5 2024-04-22 17:55:46 -04:00
Remi Rampin 3a99837e24 Print-in-place attempt 2024-04-22 17:54:59 -04:00
Remi Rampin 840f9f2b55 Add 'part' variable 2024-04-22 17:54:59 -04:00
Remi Rampin 0515c30253 Recreate with OpenSCAD 2024-04-22 17:54:59 -04:00
Remi Rampin b4d6312877 Return top to full size 2023-12-19 12:31:02 -05:00
Remi Rampin f6a778a035 Increase bottom height 2023-12-19 12:12:11 -05:00
Remi Rampin c0db5b7bd3 Increase axis size 2023-12-18 07:45:37 -05:00
3 changed files with 152 additions and 1 deletions

1
.gitignore vendored
View File

@ -1 +0,0 @@
*.FCBak

Binary file not shown.

152
powder-loader.scad Normal file
View File

@ -0,0 +1,152 @@
overall_cylinder_diam = 41;
chamber_to_center = 6.96;
chamber_diam = 11.45;
bottom_height = 3;
top_height = 20;
opening_sep = 0.1;
border = 1;
funnel_size = 1;
part = 0;
part_sep = 0.4;
module _end_of_customizer() {}
assert(part >= 0 && part <= 2);
$fn = $preview?30:80;
module overall_cylinder() {
translate([0, 0, -20])
difference() {
cylinder(d = overall_cylinder_diam, h = 20);
for(i = [0:5]) {
rotate([0, 0, i/6*360])
translate([chamber_to_center + chamber_diam/2, 0, -1])
cylinder(d = chamber_diam, h = 22);
}
}
}
if($preview && part == 0)
color("#777")
overall_cylinder();
module bottom() {
difference() {
union() {
for(i = [0:5]) {
rotate([0, 0, i / 6 * 360])
bottom_part();
}
}
translate([0, 0, bottom_height])
connection(true);
}
}
center_to_bottom_opening_center = chamber_to_center + chamber_diam / 2;
bottom_opening_diam = center_to_bottom_opening_center * sin(360 / 12) - opening_sep;
module bottom_part() {
difference() {
union() {
rotate([0, 0, 360/12])
linear_extrude(bottom_height)
polygon([
[0, 0],
[overall_cylinder_diam / 2 * cos(360 / 12), overall_cylinder_diam / 2 * sin(360 / 12)],
[overall_cylinder_diam / 2 * cos(360 / 12), -overall_cylinder_diam / 2 * sin(360 / 12)],
]);
translate([center_to_bottom_opening_center, 0, -funnel_size])
cylinder(
d1 = bottom_opening_diam,
d2 = bottom_opening_diam + funnel_size,
h = funnel_size
);
}
translate([center_to_bottom_opening_center, 0, -1 - funnel_size])
cylinder(d = bottom_opening_diam, h = bottom_height + 2 + funnel_size);
rotate([0, 0, 360/6])
translate([center_to_bottom_opening_center, 0, -1 - funnel_size])
cylinder(d = bottom_opening_diam, h = bottom_height + 2 + funnel_size);
}
}
if(part == 0 || part == 1)
color("#dd08")
bottom();
module top() {
for(i = [0:5]) {
rotate([0, 0, i / 6 * 360])
top_part();
}
connection(false);
}
module top_part() {
difference() {
linear_extrude(top_height)
polygon([
[0, 0],
[overall_cylinder_diam / 2 * cos(360 / 12), overall_cylinder_diam / 2 * sin(360 / 12)],
[overall_cylinder_diam / 2 * cos(360 / 12), -overall_cylinder_diam / 2 * sin(360 / 12)],
]);
top_part_hollow();
}
}
module top_part_hollow() {
adjusted_radius = overall_cylinder_diam / 2 - border;
hull() {
translate([center_to_bottom_opening_center, 0, 0])
cylinder(d = bottom_opening_diam, h = 0.1);
translate([0, 0, top_height - 0.1 - border])
linear_extrude(0.1)
polygon([
[border, 0],
[adjusted_radius * cos(360 / 12), adjusted_radius * sin(360 / 12) - border / 2],
[adjusted_radius * cos(360 / 12), -adjusted_radius * sin(360 / 12) + border / 2],
]);
}
}
if(part == 0 || part == 2)
color("#4d48")
translate([0, 0, bottom_height + part_sep])
top();
module connection(hole) {
sep_hole = hole?part_sep:0;
sep_screw = hole?0:part_sep;
translate([0, 0, -1.5 - sep_screw * 2])
cylinder(d = 4 + sep_hole, h = 1.5 + sep_screw * 2);
translate([0, 0, -3 - sep_screw * 2])
cylinder(d1 = 8 + sep_hole, d2 = 4 + sep_hole, h = 1.5);
}
if($preview && part == 1)
color("#f008")
for(i = [0:5]) {
rotate([0, 0, i/6*360 + 360 / 12])
translate([center_to_bottom_opening_center, 0, 01])
cylinder(d = bottom_opening_diam, h = bottom_height + 2);
}