Files
hummingbird_feeder_flower_r…/feeder_flower.scad
2024-07-31 21:53:45 -07:00

62 lines
2.5 KiB
OpenSCAD

/*
Hummingbird feeder flower replacements
by Alex Matulich
August 2020
On Thingiverse: https://www.thingiverse.com/thing:4817308
I whipped this up quickly after a couple of the plastic flowers in my hummingbird feeder got too brittle from age, and the petals broke off.
The hummingbirds don't seem to care about the number of petals or how they look. They work. The feeder has a mixture of original flowers and my new flowers, and the birds don't seem to have a preference.
The flowers fit my feeder a little more loosely than snug, not tight. If printing with PLA, I didn't want to make them too tight because PLA is stiff and brittle.
*/
flower_radius = 14;
flower_ht = 7;
neck_dia = 7.0;
collar_dia = 7.35; // max diameter of flared part of insert
end_dia = 5.5; // diameter of insert end
splitwid = 1.5; // width of split
hole_dia = 3; // diameter of hole for hummingbird beak
neck_ht=1.2; // height of neck (thickness of feeder plastic)
end_ht = 5; // height of insert end
cone_angle = 40; // taper angle of neck
// make four petals
for(petals=[3:6]) translate([1.5*flower_radius*cos(90*petals), 1.5*flower_radius*sin(90*petals), 0]) flower(petals);
// modules start here
module flower(npetals) {
ht = flower_ht - neck_dia/2 * tan(cone_angle);
dz = 0.5*(collar_dia - neck_dia);
difference() {
union() {
allpetals(npetals);
translate([0,0,ht]) cylinder(1.5,d=neck_dia, $fn=32);
translate([0,0,ht+neck_ht-dz]) cylinder(dz, d1=neck_dia, d2=collar_dia, $fn=32);
translate([0,0,ht+neck_ht]) cylinder(end_ht, d1=collar_dia, d2=end_dia, $fn=32);
}
cylinder(flower_ht+end_ht+1, d=hole_dia, $fn=24);
translate([-splitwid/2,-collar_dia/2-1,ht+0.1]) cube([splitwid, collar_dia+2, end_ht+neck_ht+1]);
}
}
module allpetals(npetals) {
for(a=[0:npetals-1]) rotate([0,0,a*360/npetals]) petal(npetals);
}
module petal(npetals) {
r1 = flower_ht/tan(cone_angle);
aspect = 0.618;
intersection() {
translate([flower_radius/2,0,0]) scale([1,aspect,1]) cylinder(flower_ht, d=flower_radius, $fn=48);
difference() {
union() {
translate([0,0,0.0001]) cylinder(flower_ht, r1=r1, r2=0, $fn=npetals<4?18:npetals*4);
translate([0,-flower_radius/2-1,0]) cube([flower_radius+2,flower_radius+2,0.8]);
}
translate([0,0,-1.4]) cylinder(flower_ht, r1=r1, r2=0, $fn=npetals<4?18:npetals*4);
}
}
}