Open Source 3D High Whistle Mouthpiece

The Ultimate On-Line Whistle Community. If you find one more ultimater, let us know.
Post Reply
User avatar
Daniel_Bingamon
Posts: 2227
Joined: Wed Jun 27, 2001 6:00 pm
antispam: No
Location: Kings Mills, OH
Contact:

Open Source 3D High Whistle Mouthpiece

Post by Daniel_Bingamon »

Designed using OpenScad Version 2015.03-2
This will make a functional high whistle mouthpiece using a 3D printer.
This is hereby released to the Chiff and Fipple Community per the Creative Commons license illustrated in the source code below:

Code: Select all

// Written and designed by Daniel Bingamon
// (CC) 2018 Jubilee Music Instrument Co.
// Released to open source 3/6/18 per Creative Commons Attribution License
//
// The whistle is composed of three parts, the block the main shaft and the shroud,
//
// This is size in order to make a 3D printed mouthpiece for 1/2" CPVC
// The scale function can make this fit other tubes as well.
//
// ABS is recommended in order to acetone polish the finish
//
// Fully Remove the two supports inside the fipple window before testing and playing
//
$fn=48;
module make_shaft()
{
  difference()  // The first item is made and all other items below it are subtracted from the piece
  {
    translate([0, 0, 1])
      cylinder(d=16.5,h=45, center=true, $fn=75);  // Main body
      
    translate([0, 0, 1])
      cylinder(d=13.19,h=46, center=true);  // Hollow it out
      
    translate([-3.175, 0, 0.0])
      cube([6.55,20,37.02]);   // Cut out windway
    
    translate([0,-8.1, 17.7])
      rotate(a=90,v=[0,1,0], center=true)
        cylinder(d=24.00,h=43,center=true);  // Curved cut out in beak

    translate([-8.5,-16.1, 17])
      cube([17.0,20,37.02]);  // Flat back of beak for mouth/lip 


// Create labium ramp from little angled pieces
    translate([2.3, 7.7, -5])
      rotate(a=-19,v=[0,0,1], center=true)
        rotate(a=15,v=[1,0,0], center=true)
          cube([1,2,15]); 

    translate([1.7, 7.9, -5])
      rotate(a=-17,v=[0,0,1], center=true)
        rotate(a=15,v=[1,0,0], center=true)
          cube([1,2,15]); 

    translate([1, 8, -5])
      rotate(a=-10,v=[0,0,1], center=true)
        rotate(a=15,v=[1,0,0], center=true)
          cube([1,2,15]); 

    translate([0.04, 8.06, -5])
      rotate(a=-2,v=[0,0,1], center=true)
        rotate(a=15,v=[1,0,0], center=true)
          cube([1,2,15.1]); 

    translate([-0.92, 8, -5])
      rotate(a=5,v=[0,0,1], center=true)
        rotate(a=15,v=[1,0,0], center=true)
          cube([1,2,15.1]); 

    translate([-1.79, 7.85, -5])
      rotate(a=11,v=[0,0,1], center=true)
        rotate(a=15,v=[1,0,0], center=true)
          cube([1,2,15]); 

    translate([-2.6, 7.6, -5])
      rotate(a=16,v=[0,0,1], center=true)
        rotate(a=15,v=[1,0,0], center=true)
          cube([1,2,15]); 

    translate([-3.26, 7.37, -5])
      rotate(a=19,v=[0,0,1], center=true)
        rotate(a=15,v=[1,0,0], center=true)
          cube([1,2,15]); 

    translate([-12,-12, -35])
      cube([25,25,25]);  // Trim bottom
  }


  // This section makes the angled internal entrance for the shaft
  translate([0, 0, -9.6])   
  {
    rotate_extrude()
    {
      translate([8.22,-1.2,90])
        rotate(a=-88,v=[0,0,1])
          circle(d=3.73, $fn=3);
    }
  }

// Bottom coupler
  translate([0,0,-22])
  {
    difference()
    {
      cylinder(d=21,h=25.4,center=true,$fn=75);
      cylinder(d=16.6,h=25.42,center=true);
    }
  }


}

module fippleblock()
{
  difference()
  {
    cylinder(d=13.2,h=23.5,center=true);  // solid block

    translate([-3.275, -3, -11.76])
      cube([6.55,10,5.588]);  // cutout for windway internal ears

    translate([0,-8.1, 5.9])
      rotate(a=90,v=[0,1,0], center=true)
        cylinder(d=24.00,h=43,center=true);  // Beak curvature for block

    translate([-8.5,-16.1, 7])
      cube([15.0,20,37.02]);   // Flat lip surface for beak

  rotate(a=5,v=[1,0,0])
    translate([-3.275,6.6, -3.3])
      cube([6.55,1,15]);  // Flaten windway at entrance and eventually windway becomes curved
  } 


}

// The shroud is the top wide part of the whistle that covers the windway and contacts the players mouth
module shroud()
{
  difference()
  {
    outercylinder();  // make the outer piece

    cylinder(d=16.49,h=23.6,center=true);  // hollow it out

    translate([-3.4, 5, -15.76])
      cube([6.55,10,9.588]); // makes outer ears around fipple and reveals window opening

    translate([0,-8.1, 5.9])
      rotate(a=90,v=[0,1,0], center=true)
        cylinder(d=24.00,h=43,center=true);  // This cuts out the beak back curve just like the other pieces

    translate([-11,-13, 6])
      cube([25.0,17,17.02]); // This flatens the bottom of the beak
  }    
}




// The fence, the .DXF image makes the shape of the fence, available on request
module trifence()
{
  scale(0.9)
    rotate(a=90,v=[1,0,0])
    rotate(a=90,v=[0,1,0])
    linear_extrude(height = 0.25)
        import (file = "trifence.dxf");
}


// The fence holds up the block at the entrance to the bore so that we don't have droopy lines
module fence(size)
{
  translate([0, 0, 0])
    cube([0.1,size,5.45]);

  translate([0, 0, 0])
    cube([0.35,size,5]); 
   
}


module outercylinder()
{
  cylinder(d=22,h=23.5,center=true, $fn=93);  // This is the actual outer surface of the shroud
    
  translate([0, 0, -11.15]) // This creates an angled rise to the shroud since 3D printers don't like print angles and I don't want to use supports on the exterior
  {
    rotate_extrude()
    {
      translate([8.7,-1.2,90])
        rotate(a=-105,v=[0,0,1])
          circle(d=4.72, $fn=3);
    }
  }
}

//
// Make the whistle
//

make_shaft();

translate([0,0, 11.75])
    //translate([30,0, -23]) //***** Use if pieces made separately
//
// Now make the block
//
difference()
{
  fippleblock();

//
// This makes the chamfer on the end of the windway
//
  translate([-3.3,4.4,-6.95])
    rotate(a=-45,v=[1,0,0], center=true)
      rotate(a=18,v=[0,0,1], center=true)
        cube([1.0,1,2.5]); 


  translate([-2.8,4.4,-7.15])
    rotate(a=-45,v=[1,0,0], center=true)
      rotate(a=18,v=[0,0,1], center=true)
        cube([1.0,1.5,2.5]); 

  translate([-2.15,4.65,-7.2])
    rotate(a=-45,v=[1,0,0], center=true)
      rotate(a=12,v=[0,0,1], center=true)
        cube([1.0,1,2.5]); 

  translate([-1.4,4.9,-7.2])
    rotate(a=-45,v=[1,0,0], center=true)
      rotate(a=6,v=[0,0,1], center=true)
        cube([1.0,1,2.5]); 

  translate([-0.46,5,-7.2])
    rotate(a=-45,v=[1,0,0], center=true)
      rotate(a=0,v=[0,0,1], center=true)
        cube([1.0,1,2.5]); 

  translate([0.5,5,-7.2])
    rotate(a=-45,v=[1,0,0], center=true)
      rotate(a=-6,v=[0,0,1], center=true)
        cube([1.0,1,2.53]); 

  translate([1.4,5,-7.1])
    rotate(a=-45,v=[1,0,0], center=true)
      rotate(a=-12,v=[0,0,1], center=true)
        cube([1.0,1,2]); 

  translate([2.2,5,-6.9])
    rotate(a=-45,v=[1,0,0], center=true)
      rotate(a=-18,v=[0,0,1], center=true)
        cube([1.0,1,5]); 

}

// This is the bevel that joins the tuning shaft to the main body making it stronger at this point
  translate([0, 0, -7.15])
  {
    rotate_extrude()
    {
      translate([8.4,-1.2,90])
        rotate(a=-145,v=[0,0,1])
          circle(d=4.72, $fn=3);
    }
  }


//
// This produces the fence which keep the body of the block piece from drooping
//  
translate([-1.25,-6.6,-3.5])
  trifence();

translate([1.25,-6.6,-3.5])
  trifence();


//translate([-30,0, -23])  //***** use this other translate instead to reveal shroud separately
translate([0,0, 11.75])  
  shroud();
  
  // That is it, the end.
Image
Email - YouTube - Ebay - Website $28 Low-D
Post Reply