Create models for wind cups and vane
This commit is contained in:
parent
8e8a194dc4
commit
f2cd28c6e0
44
models/cups.scad
Normal file
44
models/cups.scad
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (c) Camden Dixie O'Brien
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
module hemisphere (radius)
|
||||
{
|
||||
difference() {
|
||||
sphere(radius);
|
||||
translate([0, -radius, -radius]) cube([radius, 2 * radius, 2 * radius]);
|
||||
}
|
||||
}
|
||||
|
||||
module cup (cup_radius, cup_thickness, cup_offset, spoke_length, spoke_radius)
|
||||
{
|
||||
translate([0, cup_radius + spoke_length, 0]) scale([1, -1, 1])
|
||||
difference() {
|
||||
union() {
|
||||
translate([spoke_radius + cup_offset, 0, 0]) hemisphere(cup_radius);
|
||||
rotate([-90, 0, 0])
|
||||
cylinder(cup_radius + spoke_length, r = spoke_radius);
|
||||
}
|
||||
translate([spoke_radius + cup_offset, 0, 0]) sphere(cup_radius - cup_thickness);
|
||||
};
|
||||
}
|
||||
|
||||
module cups (n_cups, hub_height, hub_outer_radius, hub_inner_radius,
|
||||
cup_radius, cup_thickness, cup_offset, spoke_length,
|
||||
spoke_radius)
|
||||
{
|
||||
difference() {
|
||||
union() {
|
||||
cylinder(hub_height, r = hub_outer_radius, center = true);
|
||||
for (i = [0 : n_cups - 1]) {
|
||||
rotate([0, 0, i * 360 / n_cups])
|
||||
cup(cup_radius, cup_thickness, cup_offset, spoke_length,
|
||||
spoke_radius);
|
||||
}
|
||||
}
|
||||
cylinder(hub_height + 1, r = hub_inner_radius, center = true);
|
||||
}
|
||||
}
|
||||
|
||||
cups(5, 20, 18, 6, 40, 3, 6, 60, 8);
|
43
models/vane.scad
Normal file
43
models/vane.scad
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) Camden Dixie O'Brien
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
module shaft (length, radius, taper_length)
|
||||
{
|
||||
translate([-length / 2, 0, 0]) rotate([0, 90, 0]) {
|
||||
non_tapered_length = length - taper_length;
|
||||
cylinder(non_tapered_length, r = radius);
|
||||
translate([0, 0, non_tapered_length])
|
||||
cylinder(taper_length, radius, 0);
|
||||
}
|
||||
}
|
||||
|
||||
module panel (length, height, thickness, wedge_length)
|
||||
{
|
||||
rotate([90, 0, 0])
|
||||
translate([0, 0, -thickness / 2])
|
||||
scale([-1, 1, 1])
|
||||
linear_extrude(thickness)
|
||||
polygon([[0, 0], [wedge_length, height], [length, height], [length, 0]]);
|
||||
}
|
||||
|
||||
module vane (length, shaft_radius, shaft_taper_length, panel_height,
|
||||
panel_thickness, panel_wedge_length, hub_height, hub_outer_radius,
|
||||
hub_inner_radius)
|
||||
{
|
||||
union () {
|
||||
difference () {
|
||||
union () {
|
||||
shaft (length, shaft_radius, shaft_taper_length);
|
||||
cylinder(hub_height, r = hub_outer_radius, center = true);
|
||||
}
|
||||
cylinder(hub_height + 1, r = hub_inner_radius, center = true);
|
||||
}
|
||||
panel_length = length / 2 - hub_outer_radius;
|
||||
translate ([-hub_outer_radius, 0, 0])
|
||||
panel (panel_length, panel_height, panel_thickness, panel_wedge_length);
|
||||
}
|
||||
}
|
||||
|
||||
vane (260, 6, 24, 80, 3, 40, 14, 12, 6);
|
Loading…
x
Reference in New Issue
Block a user