piccolo

3d Printable Piccolo
git clone https://git.woozle.org/neale/piccolo.git

commit
de97cac
parent
8ea6092
author
Neale Pickett
date
2025-10-22 16:38:03 -0600 MDT
Ready to print first prototype
1 files changed,  +92, -0
A piccolo.scad
+92, -0
 1@@ -0,0 +1,92 @@
 2+include <common.scad>
 3+use <MCAD/regular_shapes.scad>
 4+
 5+height = 189.68;
 6+id_bot = 10.5;
 7+id_top = 12.6;
 8+
 9+toneholes = [
10+  [40, 7.0],
11+  [66, 8.5],
12+  [81, 7.0],
13+  [106.5, 7.0],
14+  [125.0, 7.5],
15+  [144.4, 7.0],
16+];
17+
18+module body() {
19+  union() {
20+    d1 = 17.0;
21+    d2 = 21.6;
22+    difference() {
23+      cylinder(h=height, d1=d1, d2=d2);
24+      translate([0, 0, -1]) cylinder(h=height+2, d1=id_bot, d2=id_top);
25+      for (hole = toneholes) {
26+        translate([0, 0, hole[0]]) tonehole(d=hole[1]);
27+      }
28+
29+      translate([0, 0, height-25]) {
30+        d = 16.9;
31+        cylinder(h=25, d=d);
32+      }
33+    }
34+    // rings
35+    translate([0, 0, height-1.5]) torus((d2+3)/2, (d2-3)/2);
36+    difference() {
37+      translate([0, 0, 1.5]) torus((d1+3)/2, (d1-3)/2);
38+      translate([0, 0, -25]) cube(50, center=true);
39+    }
40+  }
41+}
42+
43+module head() {
44+  od_top = 20.4;
45+  union() {
46+    difference() {
47+      union() {
48+        // Body
49+        cylinder(h=83, d=od_top);
50+
51+        // Tenon
52+        color("white") cylinder(h=108, d=16.6);
53+      }
54+
55+      // Area for the string
56+      translate([0, 0, 90]) {
57+        r = 16.6/2;
58+        difference() {
59+          cylinder_tube(15, r, 0.4);
60+
61+          // fillets
62+          cylinder(r1=r, r2=0, h=r);
63+          translate([0, 0, 15-r]) cylinder(r1=0, r2=r, h=r);
64+        }
65+      }
66+
67+      // Inner bore
68+      translate([0, 0, 17]) cylinder(h=200, d=id_top);
69+
70+      // Resonance chamber
71+      translate([0, 0, -1]) cylinder(h=18+1, d=6.5);
72+      translate([0, 0, -0.1]) cylinder(h=10+.2, d1=15.5, d2=6.5);
73+      translate([0, 0, 20]) rotate([45, 0, -30]) cylinder(d=6, h=200);
74+
75+      // Embouchure
76+      translate([0, 0, 40]) {
77+        scale([1, 1, 1.2])
78+          rotate([90, 0, 0])
79+          cylinder(d1=id_top, d2=7, h=id_top);
80+      }
81+    }
82+
83+
84+    intersection() {
85+      cylinder(h=83, d=id_top+1);
86+      translate([0, 0, 25]) rotate([-45, 30, 0]) cube([200, 200, 0.8], center=true);
87+    }
88+
89+    translate([0, 0, 8.5]) torus((od_top+3)/2, (od_top-3)/2);
90+    translate([0, 0, 83-3/2]) torus((od_top+3)/2, (od_top-3)/2);
91+  }
92+}
93+