- commit
- 84ae56f
- parent
- 28cf438
- author
- Neale Pickett
- date
- 2025-10-24 17:28:46 -0600 MDT
new idea for the embouchure hole Apparently you want a nice flat edge to blow against, but Irish players are going to want to feel a circle under their lip. Why not do both?
M
Makefile
+1,
-1
1@@ -1,6 +1,6 @@
2 all: head.3mf body.3mf
3
4-rev=$(shell git rev-list --count HEAD)
5+rev=$(shell git log -1 --pretty='format:%cd' --date='format:%Y-%m-%d')
6
7 %.3mf: %.scad piccolo.scad common.scad
8 openscad -D rev=\"$(rev)\" -o $@ $<
+10,
-6
1@@ -2,7 +2,9 @@ include <common.scad>
2 use <MCAD/regular_shapes.scad>
3
4 body_height = 189.68 + 25; // add 25 for built-in barrel
5-rev = "P"; // revision to stamp on the side
6+
7+rev = "preview";
8+stamp = str(rev);
9
10 module body() {
11 d1 = 17.0;
12@@ -21,9 +23,11 @@ module body() {
13 difference() {
14 // Combine cylinders to make it look curvy
15 union() {
16- bend = 80;
17+ bend_bot = 100;
18+ bend_top = 180;
19 cylinder(h=body_height, d1=d1, d2=(d1+d2)/2);
20- translate([0, 0, body_height-bend]) cylinder(h=bend, d1=d1, d2=d2);
21+ translate([0, 0, bend_bot]) cylinder(h=bend_top-bend_bot, d1=d1, d2=d2);
22+ translate([0, 0, bend_top]) cylinder(h=body_height-bend_top, d=d2);
23 }
24
25 // Inner bore, the most important part of the whole instrument!
26@@ -46,12 +50,12 @@ module body() {
27 union() {
28 rotate([90, 90, -90]) {
29 linear_extrude(height=d1, convexity=4) {
30- translate([-9, -5]) import("ruby.svg");
31+ translate([-8, -5]) import("ruby.svg");
32 }
33 }
34- rotate([90, 90, -180]) {
35+ rotate([90, 90, -160]) {
36 linear_extrude(height=d1, convexity=10) {
37- text(rev, size=5, halign="right", valign="center");
38+ text(stamp, size=2, halign="right", valign="center");
39 }
40 }
41 }
M
head.3mf
+0,
-0
+16,
-5
1@@ -41,11 +41,22 @@ module head() {
2
3 // Embouchure
4 translate([0, 0, 45]) {
5- rotate([90, 0, 0]) {
6+ rotate([90, 90, 0]) {
7+ // https://vintagefluteshop.com/articles/embouchure/art5.html
8+ undercut = 10; // degrees
9+ corner_r = 1;
10 hull() {
11- for (y = [0, 4]) {
12- translate([0, y, 0]) cylinder(d1=13, d2=7, h=id_top);
13+ // This part is where the air hits,
14+ // so we try to optimize for the hard edge.
15+ translate([0, 0, od_top/2]) {
16+ for (vertex = [[-3, -2], [3, -2]]) {
17+ translate(vertex) rotate([180-undercut, 0, 0]) cylinder(r=corner_r, h=(od_top-id_top)/2);
18+ }
19 }
20+
21+ // This part is covered by your lip,
22+ // so how it feels is most important.
23+ cylinder(r=3, h=od_top/2);
24 }
25 }
26 }
27@@ -53,8 +64,8 @@ module head() {
28
29 // Resonance chamber plate
30 intersection() {
31- cylinder(h=83, d=id_top+1);
32- translate([0, 0, 25]) rotate([-60, 30, 0]) cube([200, 200, 0.8], center=true);
33+ cylinder(h=82, d=id_top+1);
34+ translate([0, 0, 25.2]) rotate([-40, 40, 0]) cube([200, 200, 0.8], center=true);
35 }
36
37 translate([0, 0, 8.5]) torus((od_top+3)/2, (od_top-3)/2);