- Move legacy FreeCAD files to v1/ - Add OpenSCAD programmatic CAD designs - Add README and AGENTS.md documentation - Add .gitignore - Update firmware to v2 architecture
79 lines
2.4 KiB
OpenSCAD
79 lines
2.4 KiB
OpenSCAD
// Blade Dimensions
|
|
|
|
diameter = 100; // Base diameter
|
|
height = 100; // Height of the rotor
|
|
wall_thickness = 6; // Wall thickness
|
|
tolerance = 2; // Tolerance between stator and rotor
|
|
number_of_ports = 6; // Number of ports [2:8]
|
|
port_height = 50; // Height of the port
|
|
pressure_zone = 0.4; // Define this globally with an appropriate default value
|
|
mounting_hole_diameter = 4; // Diameter of mounting holes
|
|
mounting_hole_offset = 20; // Radial distance from center to hole centers
|
|
number_of_mounting_holes = 4; // Number of mounting holes
|
|
mounting_hole_bore = 8; // Diameter of mounting holes counterbore
|
|
round_radius = 4;
|
|
motor_shaft_diameter = 5;
|
|
hub_height = 10;
|
|
|
|
motor_width = 20; // Diameter of the motor shaft
|
|
$fn = 128; // Number of fragments
|
|
|
|
diameter = 100;
|
|
blade_width = 5;
|
|
blade_length = diameter;
|
|
|
|
// Blade Height
|
|
blade_height = 10;
|
|
|
|
// Number of ports/blades
|
|
number_of_ports = 5;
|
|
|
|
// Pressure zone percentage
|
|
pressure_zone = 0.4; // 30% of diameter
|
|
|
|
module impeller_blades() {
|
|
difference() {
|
|
intersection() {
|
|
// Column with full diameter
|
|
cylinder(d = diameter, h = blade_height);
|
|
|
|
// Blades
|
|
union() {
|
|
//rotate([180, 180, 180])
|
|
for (i = [0:360/number_of_ports:360]) {
|
|
rotate([0, 0, i - 90])
|
|
translate([0, diameter / 2, 0])
|
|
rotate([0, 0, 10])
|
|
translate([-blade_width, -diameter / 2, 0])
|
|
linear_extrude(height = blade_height, twist = 0, slices=360)
|
|
square([blade_width, blade_length]);
|
|
}
|
|
}
|
|
}
|
|
// Subtract core cylinder
|
|
translate([0, 0, -1])
|
|
cylinder(d = diameter * pressure_zone, h = blade_height + 2);
|
|
}
|
|
}
|
|
|
|
module ports() {
|
|
radius = diameter / 2;
|
|
angle = 360 / number_of_ports / 2;
|
|
|
|
rotate([0, 0, 180 / number_of_ports])
|
|
for (i = [0:360/number_of_ports:360]) {
|
|
rotate([0, 0, i])
|
|
translate([0, 0, (height - port_height) / 2])
|
|
linear_extrude(height = port_height)
|
|
polygon(concat(
|
|
[[0, 0]], // Center point
|
|
[for (j = [0 : $fn])
|
|
[radius * cos(angle * j / $fn),
|
|
radius * sin(angle * j / $fn)]]
|
|
));
|
|
}
|
|
}
|
|
|
|
// Optional: If you want to render the blades independently for testing
|
|
impeller_blades();
|
|
ports(); |