sirens/designs/openscad/tests/blade_work.scad
Michael Winter 0fbf33b756 Restructure project with OpenSCAD redesign and v1 legacy code
- Move legacy FreeCAD files to v1/
- Add OpenSCAD programmatic CAD designs
- Add README and AGENTS.md documentation
- Add .gitignore
- Update firmware to v2 architecture
2026-03-29 14:24:42 +02:00

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();