whistles

3d printable Irish whistles
git clone https://git.woozle.org/neale/whistles.git

commit
21ce81b
parent
a244c05
author
Neale Pickett
date
2026-01-28 15:12:55 -0700 MST
Start designing a fipple
1 files changed,  +56, -0
A fipple.scad
+56, -0
 1@@ -0,0 +1,56 @@
 2+include <BOSL2/std.scad>
 3+
 4+// TODO: I don't think the windway is centered over the blade.
 5+// TODO: Blade undercut
 6+// TODO: Block undercut and overcut
 7+// TODO: Window height?
 8+
 9+$fn = 180;
10+
11+ang = 60;
12+od = 25;
13+id = 23;
14+height = 50;
15+
16+// Just the crust of a pie_slice.
17+module pie_crust(h, ang, r, thickness=5) {
18+  difference() {
19+    pie_slice(h=h, ang=ang, r=r, spin=-ang/2);
20+    translate([0, 0, -1]) cylinder(h=h+2, r=r-thickness);
21+  }
22+}
23+
24+// I'm using terminology from https://www.kingsmills.us/jubilee/store/fipterm.htm
25+
26+difference() {
27+  cylinder(d=od, h=height);
28+
29+  // Mouthpiece shaping
30+  mouth_taper_d = od * 1.5;
31+  translate([-od/2, 0, height]) {
32+    rotate([90, 0, 10]) cylinder(h=100, d=mouth_taper_d, center=true);
33+    rotate([90, 0, -10]) cylinder(h=100, d=mouth_taper_d, center=true);
34+  }
35+
36+  // Marat's idea: skew everything at 45° for nice overhangs
37+  skew(azy=45) {
38+    // Inner bore
39+    // Scoot it down by id/2 so it clears away all material at the bottom despite the skew
40+    translate([0, 0, -id/2]) cylinder(d=id, h=height - mouth_taper_d/2);
41+
42+    // Everything from here on happens below the curve
43+    translate([0, 0, height-od]) {
44+      // Windway
45+      pie_crust(h=100, ang=ang, r=(od-1)/2, thickness=1);
46+
47+      // Blade overcut
48+      // XXX: I would like to be able to provide a height to something and have it intersect the outside diameter at that height
49+      // Shoot a cutting laser out from the axis.
50+      translate([0, 0, 0]) rotate(-45/2) rotate_extrude(angle=45) skew(ayx=-50) translate([id/2-1, 0]) square(10);
51+    }
52+  }
53+}
54+
55+//skew(axz=-20) pie_crust(h=50, ang=45, r=100, thickness=1);
56+//rotate(-45/2) rotate_extrude(angle=45) skew(ayx=20) square(40);
57+//skew(azx=20) rotate(-45/2) pie_slice(h=40, ang=45, r=40);