Neale Pickett
·
2025-10-24
head.scad
1include <common.scad>
2use <MCAD/regular_shapes.scad>
3
4module head() {
5 od_top = 20.4;
6 union() {
7 difference() {
8 union() {
9 // Body
10 cylinder(h=83, d=od_top);
11
12 // Tenon
13 color("white") cylinder(h=108, d=16.6);
14
15 difference() {
16 // Fat one at the bottom, for good bed adhesion
17 translate([0, 0, 0]) torus((od_top+3)/2, (od_top-3)/2);
18 translate([0, 0, -25]) cube(50, center=true);
19 }
20 }
21
22 // Area for the string
23 translate([0, 0, 90]) {
24 r = 16.6/2;
25 difference() {
26 cylinder_tube(15, r, 0.4);
27
28 // fillets
29 cylinder(r1=r, r2=0, h=r);
30 translate([0, 0, 15-r]) cylinder(r1=0, r2=r, h=r);
31 }
32 }
33
34 // Inner bore
35 translate([0, 0, 17]) cylinder(h=200, d=id_top);
36
37 // Resonance chamber
38 translate([0, 0, -1]) cylinder(h=18+1, d=6.5);
39 translate([0, 0, -0.1]) cylinder(h=10+.2, d1=15.5, d2=6.5); // d1=15.5 in Marat's model, mine's smaller for better bed adhesion
40 translate([0, 0, 16]) rotate([30, 0, -30]) cylinder(d=6, h=200);
41
42 // Embouchure
43 translate([0, 0, 45]) {
44 rotate([90, 90, 0]) {
45 // https://vintagefluteshop.com/articles/embouchure/art5.html
46 undercut = 10; // degrees
47 corner_r = 1;
48 hull() {
49 // This part is where the air hits,
50 // so we try to optimize for the hard edge.
51 translate([0, 0, od_top/2]) {
52 for (vertex = [[-3, -2], [3, -2]]) {
53 translate(vertex) rotate([180-undercut, 0, 0]) cylinder(r=corner_r, h=(od_top-id_top)/2);
54 }
55 }
56
57 // This part is covered by your lip,
58 // so how it feels is most important.
59 cylinder(r=3, h=od_top/2);
60 }
61 }
62 }
63 }
64
65 // Resonance chamber plate
66 intersection() {
67 cylinder(h=82, d=id_top+1);
68 translate([0, 0, 25.2]) rotate([-40, 40, 0]) cube([200, 200, 0.8], center=true);
69 }
70
71 translate([0, 0, 8.5]) torus((od_top+3)/2, (od_top-3)/2);
72 translate([0, 0, 83-3/2]) torus((od_top+3)/2, (od_top-3)/2);
73 }
74}
75
76head();