- commit
- be70cc9
- parent
- be70cc9
- author
- Neale Pickett
- date
- 2025-12-28 08:56:43 -0700 MST
Check in tuner plate and replacement nut
6 files changed,
+205,
-0
+1,
-0
1@@ -0,0 +1 @@
2+*.3mf
A
Makefile
+2,
-0
1@@ -0,0 +1,2 @@
2+nut.%.3mf: nut.scad nuts.json
3+ openscad -o $@ -p nuts.json -P $* $<
+40,
-0
1@@ -0,0 +1,40 @@
2+tuner-plate.scad
3+-------------
4+
5+Allows you to mount a D'Addario PW-CT-12 micro tuner onto the head of
6+an instrument using a tuning machine screw.
7+
8+Print in PETG: you will need the flexibility.
9+
10+Put some adhesive rubber pads on the bottom of it where it will press
11+against the head. This will flex the part a little bit, which is what
12+you want: the tuner needs a good solid connection against the
13+instrument.
14+
15+
16+nut.scad
17+-------
18+
19+A parametric nut. This goes on the neck between the head and the fretboard,
20+and holds the strings high enough that they don't buzz against the frets.
21+
22+Print in PLA at 100% infill. I printed it with the largest face
23+against the print bed, so the pre-cut grooves were nice and
24+smooth. The print layers will be on parallel planes to the frets.
25+
26+You will probably have to sand the top print layer to get the correct
27+width. You will definitely have tofile the grooves to get the
28+intonation right: I intentionally designed this in to let me file each
29+string to exactly the right depth.
30+
31+PLA is the most dense commonly-available filament, and you want the
32+density to avoid dampening the vibrations of the string when it's open
33+(no finger holding it up to a fret). I suspect that even a dense
34+plastic is not the ideal material for a nut, but for me, it's good
35+enough. I'm not playing at a level where I need jaw-dropping sustain
36+on open strings.
37+
38+In another sense, PLA *is* an ideal material, though: it allows you to
39+make a new nut in 5 minutes, so you can spend time getting the
40+intonation right. As a bonus, you don't have to store a bunch of blank
41+nuts in weird sizes.
A
nut.scad
+36,
-0
1@@ -0,0 +1,36 @@
2+$fn=180;
3+
4+inch = 25.4;
5+
6+// Size of the nut
7+size = [30, 9, 5];
8+
9+ // Strings you're putting on it, in mils (aka thous)
10+string_gauges = [11, 16, 30, 40];
11+
12+strings = string_gauges * inch / 1000;
13+
14+// tenor guitar
15+// d4 - 0.014" - 20.5.lb
16+// a3 - 0.018" - 19.0 lb
17+// d3 - 0.029" - 19.6 lb
18+// g2 - 0.044" - 19.3 lb
19+
20+difference() {
21+ intersection() {
22+
23+ cube(size);
24+ rotate([0, 90, 0]) cylinder(h=size.x, r=size.y);
25+ }
26+
27+ // string grooves
28+ spacing = size.x / len(strings);
29+ for (n = [0:len(strings)-1]) {
30+ d = strings[n];
31+ pos = [spacing * (n + 1/2), size.y, 0];
32+ translate(pos) rotate([5, 0, 0]) hull() {
33+ translate([0, 0, 0]) cylinder(h=size.z*2, d=d, center=true);
34+ translate([0, 10, 0]) cylinder(h=size.z*2, d=d, center=true);
35+ }
36+ }
37+}
+14,
-0
1@@ -0,0 +1,14 @@
2+{
3+ "parameterSets": {
4+ "tenor-guitar": {
5+ "size": "[30, 9, 5]",
6+ "string_gauges": "[11, 16, 30, 40]"
7+ },
8+ "tenor-guitar-heavy": {
9+ "size": "[30, 9, 5]",
10+ "string_gauges": "[14, 18, 29, 44]"
11+ }
12+ }
13+}
14+
15+
+112,
-0
1@@ -0,0 +1,112 @@
2+$fn = 60;
3+
4+// overall thickness
5+z = 2.3; // .1
6+
7+// tunerposition / smallHoleR is on x = 0, original screw distance from center looks like 20mm
8+screwHoleX = 20; // .1
9+
10+// original looks like 2.5-ish
11+screwHoleR = 1.5; // .1
12+
13+// amount of X to travel when unclicking the tuner
14+bigHoleX = -5; // .1
15+
16+// measure the max space between the screw and the tuner gears etc!
17+materialAroundScrewHole = 2.0;
18+
19+// original 25 / 2
20+bodyOuterR = 12.5;
21+
22+// measured from center of hole!
23+slitX = 8.0; // .1
24+
25+// ~3mm in original
26+feetZ = 3; // .1
27+
28+// original is 5.4-ish
29+feetX = 5; // .1
30+
31+// how much
32+feetTopCylRatio = .3; // amount of rounding on top
33+
34+feetCylZ = feetTopCylRatio * feetX / 2;
35+
36+bigHoleR = 4.1;
37+smallHoleR1 = 2.7;
38+smallHoleR2 = 3.9;
39+screwHoleOuterR = screwHoleR + materialAroundScrewHole;
40+
41+
42+
43+
44+difference () {
45+
46+ union () {
47+ hull () {
48+ cylinder(r = bodyOuterR, h = z);
49+
50+ translate([screwHoleX, 0, 0])
51+ cylinder(r = screwHoleOuterR, h = z);
52+ }
53+
54+ // feet, let's not use intersection but diff of diff
55+ if (false) difference () {
56+ union () {
57+ cubeC([feetX, 2 * bodyOuterR, z + feetZ - feetCylZ], [1, 1, 0]);
58+
59+ translate([0, 0, z + feetZ - feetCylZ])
60+ scale([1, 1, feetTopCylRatio])
61+ rotate([90, 0, 0])
62+ cylinder(r = feetX / 2, h = bodyOuterR * 2, center = true);
63+
64+ }
65+ // negative part:
66+
67+ // cut out mid:
68+ // cubeC([feetX * 2, (bigHoleR + .3) * 2, z * 5], center = [1, 1, 0]);
69+ cylinder (r = bigHoleR + .3, h = z * 5);
70+
71+ difference () {
72+ cubeC([bodyOuterR * 2, bodyOuterR * 3, z * 15]);
73+ cylinder(r = bodyOuterR - 1, h = z * 20, center = true);
74+ }
75+
76+ }
77+
78+
79+ }
80+
81+ // negative parts:
82+ translate([screwHoleX, 0, -1])
83+ cylinder(r = screwHoleR, h = z + 2);
84+
85+
86+ // Where the tuner normally sits
87+ // I made the angle of the cone steeper for a grippier grip on the tuner
88+ cylinder(r1 = smallHoleR1, r2 = smallHoleR2, h = z);
89+
90+ translate([bigHoleX, 0, -1])
91+ cylinder(r = bigHoleR, h = z + 2);
92+
93+ // slit:
94+ // translate([.5 * slitX, 0, 0])
95+ // cube([slitX, 1.5, 2.5 * z], center = true);
96+ cubeC([slitX, 1.5, 2.5 * z], [0, 1, 1]);
97+
98+ translate([slitX, 0, 0])
99+ cylinder(r = 1.5 / 2, h = 2.7 * z);
100+
101+ translate([screwHoleX, 0, 10+z-1]) cube(20, center=true);
102+
103+}
104+
105+
106+
107+
108+module cubeC(cubeSize, centeredAxes = [true, true, true]) {
109+ translate([centeredAxes[0] ? -.5 * cubeSize[0] : 0,
110+ centeredAxes[1] ? -.5 * cubeSize[1] : 0,
111+ centeredAxes[2] ? -.5 * cubeSize[2] : 0])
112+ cube(cubeSize, center = false);
113+}