whistles

3d printable Irish whistles
git clone https://git.woozle.org/neale/whistles.git

commit
d90d693
parent
73c725e
author
Neale Pickett
date
2025-12-13 19:37:33 -0700 MST
A thing to mount little whistles on the wall :)
1 files changed,  +51, -0
A wall-mount.scad
+51, -0
 1@@ -0,0 +1,51 @@
 2+module commandstrip() {
 3+  length = 46.0;
 4+  width = 15.8;
 5+  thick = 1.2; // They're actually thicker than this, but the strip needs to stick out a little
 6+  translate([-width/2, 0]) cube([width, length-width, thick]);
 7+  translate([0, length-width]) cylinder(d=width, h=thick);
 8+}
 9+
10+module post(d, h=50) {
11+  cylinder(h=h, d1=d, d2=d*0.8);
12+  cylinder(h=5, d1=d*1.4, d2=d*0.8);
13+  translate([0, 0, h]) sphere(d=d*0.8);
14+}
15+
16+width = 125;
17+depth = 36;
18+height =35;
19+
20+module WhistleMount(){
21+  $fn = 180;
22+
23+  difference() {
24+    intersection() {
25+      // Main body
26+      translate([0, 0, height/2]) cube([width, depth, height], center = true);
27+
28+      // Chamfers!
29+      translate([0, width * 0.4, 0]) rotate([0, 0, 45]) {
30+        cube(width*sqrt(2), center=true);
31+      }
32+    }
33+
34+    // Holes for the whistles
35+    for (x = [-50, -25, 0, 25, 50]) {
36+      translate([x, -7, 5]) rotate([-3, 0, 0]) cylinder(h=300, d=15.5);
37+    }
38+
39+    // Command strips
40+    for (x = [-30, 30]) {
41+      translate([x, depth/2 + 0.6, 30]) rotate([90, 180, 0]) commandstrip();
42+    }
43+
44+    // Ruby
45+    translate([0, -depth/2+0.6, 10]) rotate([90, 0, 0]) linear_extrude(height=50, convexity=10) {
46+      scale(1.5) import("ruby.svg", center=true);
47+    }
48+  }
49+}
50+
51+
52+WhistleMount();