uilleann

3d printable Uilleann bagpipes
git clone https://git.woozle.org/neale/uilleann.git

commit
e7f162f
parent
441cdc9
author
Neale Pickett
date
2025-12-23 12:41:51 -0700 MST
pickett d chanter work
3 files changed,  +56, -37
M pickett-d/Makefile
+1, -1
1@@ -6,4 +6,4 @@ clean:
2 	rm -f *.3mf
3 
4 %.3mf: %.scad chanter.scad
5-	openscad -D rev=\"$(commit_number):$(commit_date)\" -o $@ $<
6+	openscad -D rev=\"$(commit_number)\" -D date=\"$(commit_date)\" -o $@ $<
M pickett-d/chanter.scad
+50, -32
  1@@ -1,14 +1,14 @@
  2 // Based on O'Flynn Rowsome Chanter Measurements
  3 // http://pipers.ie/source/media/?mediaId=31307&galleryId=1353
  4 
  5+include <BOSL/shapes.scad>
  6 use <./sigil.scad>
  7 
  8-fancy = true;  // Fancy decorations?
  9+ver = "D";
 10+rev = "pre";
 11+date = "1900-01-01";
 12 
 13-rev = "preview";
 14-stamp = str(rev);
 15-
 16-$fn =120;
 17+$fn =$preview?30:120;
 18 
 19 // Diameter of screw hole
 20 Screwhole = 4; // [1:10]
 21@@ -36,14 +36,27 @@ module ringyding(h, d) {
 22 
 23 // A fillet is a sort of trumpet bell shape
 24 module fillet(h, d1, d2) {
 25-  rmin = min(d1, d2)/2;
 26-  rmax = max(d1, d2)/2;
 27-  r = rmax-rmin;
 28-  rotate_extrude(convexity=4) {
 29-    difference() {
 30-      square([rmax, h]);
 31-      translate([rmax, d1>d2?h:0]) resize([r*2, h*2]) circle();
 32-    }
 33+  dd = d1 - d2;
 34+  for (i = [0:1/$fn:1]) {
 35+    cylinder(h=(h+h*i)/2, d1=d1-dd*i, d2=d2);
 36+  }
 37+}
 38+
 39+module patty(h, d) {
 40+  cyl(l=h, d=d, fillet=h/2);
 41+}
 42+
 43+// A flare with a patty on each end
 44+module flare(h, d1, d2) {
 45+  f1 = 4;
 46+  f2 = 2;
 47+
 48+  if (d2 > d1) {
 49+    rotate([180, 0, 0]) flare(h, d2, d1);
 50+  } else {
 51+    translate([0, 0, 0]) cyl(h=f1, d=d1, fillet=f1/2, align=V_CENTER);
 52+    translate([0, 0, f1/2]) fillet(h=h-(f1+f2)/2, d1=d1-4, d2=d2-2);
 53+    translate([0, 0, h]) patty(f2, d2);
 54   }
 55 }
 56 
 57@@ -63,38 +76,42 @@ module tonehole(h, td, ld, ch, undercut=1) {
 58   }
 59 }
 60 
 61+height = 357.2;
 62+insertion = 28; // length of metal at each end
 63+
 64 module chanter() {
 65   // We start by building everything up in a union(),
 66   // then we ream it with difference().
 67   difference() {
 68     union() {
 69       // Inner metal tube
 70-      metal() cylinder(h=331.2, d=17);
 71-            
 72+      metal() cylinder(h=height, d=16);
 73+
 74       // Wood body
 75-      translate([0, 0, 32.5]) wood() cylinder(h=258, d1=20.4, d2=18);
 76-
 77-      if (fancy) {
 78-        // Bottom wood transition
 79-        translate([0, 0, 38.2]) ringyding(h=5.3, d=24.0);
 80-        translate([0, 0, 32.0]) ivory() cylinder(h=8.0, d=21.0);
 81-        translate([0, 0, 33.0]) ivory() fillet(h=3.5, d1=28.0, d2=21);
 82-        translate([0, 0, 32.0]) ivory() cylinder(h=1, d=28.0);
 83-        translate([0, 0, 32.0]) ringyding(h=4.0, d=28.7);
 84-            
 85-        // Top wood transition : from O'Flynn Rowsome measurements
 86-        // https://pipers.ie/archive/media/?mediaId=31307&galleryId=1353
 87+      translate([0, 0, 30]) wood() cylinder(h=height-60, d1=20.4, d2=18);
 88+
 89+      // Bottom wood transition
 90+      translate([0, 0, 28]) ivory() flare(h=12, d1=28.0, d2=23.0);
 91+
 92+      // Top wood transition : from O'Flynn Rowsome measurements
 93+      // https://pipers.ie/archive/media/?mediaId=31307&galleryId=1353
 94+      translate([0, 0, height-28]) ivory() flare(h=12, d1=21.0, d2=25.0);
 95+
 96+      if (false) {
 97         translate([0, 0, 290.4]) ringyding(h=5.5, d=20);
 98         translate([0, 0, 305.6]) ringyding(h=4.3, d=19);
 99         translate([0, 0, 317.6]) ringyding(h=5.5, d=18);
100         translate([0, 0, 318.5]) ivory() fillet(h=8.5, d1=17, d2=24); // eliminate overhang
101         translate([0, 0, 328.3]) ringyding(h=8, d=25.4);
102-      } else {
103-        translate([0, 0, 27.5]) wood() cylinder(h=5, d1=17, d2=20.4);
104       }
105+    }
106 
107-      // This protects the reed and provides a place for tubing to connect
108-      translate([0, 0, 324.5]) metal() cylinder(h=32.7, d=16); // O'Flynn Rowsome had d=14.8mm
109+    // Some engraved rings for style
110+    difference() {
111+      for (z = [6, 8, 20, 22]) {
112+        translate([0, 0, z]) cylinder(h=0.6, d=25);
113+      }
114+      cylinder(h=300, d=15);
115     }
116 
117     // Inner bore
118@@ -113,7 +130,7 @@ module chanter() {
119       rotate(180) tonehole(268, 6.04, 7.95, 10.1, 1.2); // back D
120     }
121 
122-    sigil(17.1, stamp);
123+    translate([0, 0, height - 62]) rotate([0, 0, 90]) sigil(18, date, ver);
124   }
125 }
126 
127@@ -145,3 +162,4 @@ module split(top=false) {
128 }
129 
130 chanter();
131+
M pickett-d/sigil.scad
+5, -4
 1@@ -6,20 +6,21 @@ module cylinder_tube(height, radius, wall) {
 2   }
 3 }
 4 
 5-module sigil(d, stamp, rot=0) {
 6+module sigil(d, top_str="", bot_str="") {
 7   // Sigil
 8   translate([0, 0, 4]) intersection() {
 9     cylinder_tube(50, d/2+0.5, 1);
10     union() {
11       rotate([90, 0, -90]) {
12         linear_extrude(height=d, convexity=4) {
13-          translate([-4, 0]) import("ruby.svg");
14+          translate([0, 8]) import("ruby.svg", center=true);
15           // XXX: when this is in openscad prod, add center to import and remove translate
16         }
17       }
18-      rotate([90, 90, -160]) {
19+      rotate([90, 0, -90]) {
20         linear_extrude(height=d, convexity=10) {
21-          text(stamp, size=2, halign="right", valign="center");
22+          translate([0, 13]) text(top_str, size=2, halign="center", valign="bot");
23+          translate([0, 1]) text(bot_str, size=2, halign="center", valign="bot");
24         }
25       }
26     }