whistles

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

Neale Pickett  ·  2025-12-13

wall-mount.scad

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