Neale Pickett
·
2025-12-28
tuner-plate.scad
1$fn = 60;
2
3// overall thickness
4z = 2.3; // .1
5
6// tunerposition / smallHoleR is on x = 0, original screw distance from center looks like 20mm
7screwHoleX = 20; // .1
8
9// original looks like 2.5-ish
10screwHoleR = 1.5; // .1
11
12// amount of X to travel when unclicking the tuner
13bigHoleX = -5; // .1
14
15// measure the max space between the screw and the tuner gears etc!
16materialAroundScrewHole = 2.0;
17
18// original 25 / 2
19bodyOuterR = 12.5;
20
21// measured from center of hole!
22slitX = 8.0; // .1
23
24// ~3mm in original
25feetZ = 3; // .1
26
27// original is 5.4-ish
28feetX = 5; // .1
29
30// how much
31feetTopCylRatio = .3; // amount of rounding on top
32
33feetCylZ = feetTopCylRatio * feetX / 2;
34
35bigHoleR = 4.1;
36smallHoleR1 = 2.7;
37smallHoleR2 = 3.9;
38screwHoleOuterR = screwHoleR + materialAroundScrewHole;
39
40
41
42
43difference () {
44
45 union () {
46 hull () {
47 cylinder(r = bodyOuterR, h = z);
48
49 translate([screwHoleX, 0, 0])
50 cylinder(r = screwHoleOuterR, h = z);
51 }
52
53 // feet, let's not use intersection but diff of diff
54 if (false) difference () {
55 union () {
56 cubeC([feetX, 2 * bodyOuterR, z + feetZ - feetCylZ], [1, 1, 0]);
57
58 translate([0, 0, z + feetZ - feetCylZ])
59 scale([1, 1, feetTopCylRatio])
60 rotate([90, 0, 0])
61 cylinder(r = feetX / 2, h = bodyOuterR * 2, center = true);
62
63 }
64 // negative part:
65
66 // cut out mid:
67 // cubeC([feetX * 2, (bigHoleR + .3) * 2, z * 5], center = [1, 1, 0]);
68 cylinder (r = bigHoleR + .3, h = z * 5);
69
70 difference () {
71 cubeC([bodyOuterR * 2, bodyOuterR * 3, z * 15]);
72 cylinder(r = bodyOuterR - 1, h = z * 20, center = true);
73 }
74
75 }
76
77
78 }
79
80 // negative parts:
81 translate([screwHoleX, 0, -1])
82 cylinder(r = screwHoleR, h = z + 2);
83
84
85 // Where the tuner normally sits
86 // I made the angle of the cone steeper for a grippier grip on the tuner
87 cylinder(r1 = smallHoleR1, r2 = smallHoleR2, h = z);
88
89 translate([bigHoleX, 0, -1])
90 cylinder(r = bigHoleR, h = z + 2);
91
92 // slit:
93 // translate([.5 * slitX, 0, 0])
94 // cube([slitX, 1.5, 2.5 * z], center = true);
95 cubeC([slitX, 1.5, 2.5 * z], [0, 1, 1]);
96
97 translate([slitX, 0, 0])
98 cylinder(r = 1.5 / 2, h = 2.7 * z);
99
100 translate([screwHoleX, 0, 10+z-1]) cube(20, center=true);
101
102}
103
104
105
106
107module cubeC(cubeSize, centeredAxes = [true, true, true]) {
108 translate([centeredAxes[0] ? -.5 * cubeSize[0] : 0,
109 centeredAxes[1] ? -.5 * cubeSize[1] : 0,
110 centeredAxes[2] ? -.5 * cubeSize[2] : 0])
111 cube(cubeSize, center = false);
112}