- commit
- 4ebc81a
- parent
- 3b984bc
- author
- Neale Pickett
- date
- 2025-02-20 08:20:26 -0700 MST
Further tuning of chanter
5 files changed,
+73,
-15
+2,
-0
1@@ -5,3 +5,5 @@ clean:
2
3 %.stl: %.scad
4 openscad -o $@ $<
5+
6+chanter/chanter-%.stl: chanter/chanter-%.scad chanter/chanter.scad
+2,
-2
1@@ -1,6 +1,6 @@
2+include <../common.scad>
3 use <./chanter.scad>
4
5-intersection() {
6+tenon(top=false) {
7 chanter();
8- cut();
9 }
+1,
-2
1@@ -1,6 +1,5 @@
2 use <./chanter.scad>
3
4-difference() {
5+tenon(top=true) {
6 chanter();
7- cut();
8 }
+67,
-10
1@@ -1,41 +1,81 @@
2 include <../common.scad>
3
4+height = 360.0;
5 od = 16.0;
6+od_derlin = od + 0.5;
7+id_bot = 13.2;
8+id_top = 5.51;
9+cut_height = 155; // Where to cut it in half
10
11 module tonehole(h=10, d=10, undercut=0) {
12+ rotate([0, 0, -90])
13 translate([od/2, 0, h]) {
14 rotate([0, -90+undercut, 0]) {
15 // Scoot it down a hair so it will penetrate the entire tube when rotated
16- translate([0, 0, -3]) {
17- cylinder(h=od/2, d=d);
18+ translate([0, 0, -od/2]) {
19+ cylinder(h=od, d=d);
20 }
21 }
22 }
23 }
24
25+
26+// Something like David Daye's Penny Chanter,
27+// based on my measurements and undercut hints on David's web site.
28+// This is symmetrical, so both pieces can be printed at the same time,
29+// with color changes
30 module chanter() {
31 difference () {
32 union() {
33 // The core part of the instrument is this brass tube
34- brass() cylinder(h=360.0, d=od);
35+ difference() {
36+ brass() cylinder(h=height, d=od);
37+
38+ // Seam guides
39+ translate([0, od/2, 0]) cylinder(d=1, h=400);
40+ }
41
42 // David adds this outer Derlin tube as an upgrade option
43- derlin() translate([0, 0, 40.0]) cylinder(h=290, d=16.5);
44+ difference() {
45+ derlin() translate([0, 0, 40.0]) cylinder(h=290, d=od_derlin);
46+
47+ // The slits up the sides serve three purposes:
48+ // 1. directs the slicer to place seams in it (and not on the face)
49+ // 2. provides alignment guides for attaching the two pieces
50+ // 3. looks like an intentional stylistic thing
51+ rotate([0, 0, 85]) translate([0, od_derlin/2, 0]) cylinder(d=1, h=cut_height+20); // overlap
52+ rotate([0, 0, -85]) translate([0, od_derlin/2, cut_height-20]) cylinder(d=1, h=400);
53+ }
54
55 // These little doodads are probably just to hide the Derlin seam
56 ivory() translate([0, 0, 30.0]) cylinder(h=12, d=22.0);
57- ivory() translate([0, 0, 322.0]) cylinder(h=10, d=22.0);
58+ ivory() translate([0, 0, height - 30.0 - 12]) cylinder(h=12, d=22.0);
59 }
60
61- // The bore for the reed: no harm in running this the entire length
62- cylinder(h=400, d=6.3);
63+ // Seam guides
64+ translate([0, 11, 0]) cylinder(d=1, h=400);
65
66 // Inner bore, which runs up to the place where the reed drops in
67- cylinder(h=327, d=13.5);
68+ translate([0, 0, 0]) cylinder(h=337.01, d1=id_bot, d2=id_top);
69+ translate([0, 0, 337]) cylinder(h=23.1, d1=id_top, d2=7.1);
70
71 // I totally dig David's minimalist aesthetic
72 translate([0, 0, 3]) rings(d=16.0);
73
74+ // Stamp my name on it
75+ difference() {
76+ translate([0, 0, 307]) {
77+ rotate([90, 0, 180]) {
78+ linear_extrude(50) {
79+ translate([0, 5]) text("neale", font="Fontdiner Swanky", valign="bottom", size=3, halign="center");
80+ translate([0, 0]) text("2024-2", font="Fontdiner Swanky", valign="bottom", size=3, halign="center");
81+ }
82+ }
83+ }
84+ cylinder(h=360, d=od-0.5);
85+ }
86+
87+
88 // Tone Holes!
89 // XXX: Undercut angle should be taken into account here
90 tonehole(h=57.1, d=6.68); // E-
91@@ -50,8 +90,25 @@ module chanter() {
92 }
93 }
94
95-module cut() {
96- rotate([0, 45, 0]) cube(240, center=true);
97+module tenon(top=false, h=cut_height, od=od, depth=20, thickness=2) {
98+ module cut() {
99+ cylinder(h=cut_height+depth, d=od-thickness-clearance);
100+ cylinder(h=cut_height, d=50);
101+ }
102+
103+ if (top) {
104+ difference() {
105+ children();
106+ cut();
107+ }
108+ } else {
109+ intersection() {
110+ children();
111+ cut();
112+ }
113+ }
114 }
115
116 chanter();
117+//translate([0, 50, 360]) rotate([180, 0, 0]) chanter();
118+
+1,
-1
1@@ -2,7 +2,7 @@
2 $fn = $preview ? 0 : 60;
3
4 // clearance in a permanent tenon/mortise joint
5-clearance = 0.04;
6+clearance = 0.03;
7
8 module brass() {
9 color("gold") children();