Konubinix' opinionated web of thoughts

Make Pan Pipe Flute

Fleeting

3 Ways to Make Pan Pipes - wikiHow

can be difficult to say exactly what notes the pipes will create when you cut them to certain lengths, because the pitch also depends on the width of the straws or PVC pipe, which can vary across brands. However, you can get a well-tuned set of pipes in a diatonic scale by cutting your pipes to the following lengths:[2]

Pipe 1: 17.5 cm Pipe 2: 15.5 cm Pipe 3: 13.5 cm Pipe 4: 12.5 cm Pipe 5: 11 cm Pipe 6: 10 cm Pipe 7: 9 cm Pipe 8: 8.5 cm

https://www.wikihow.com/Make-Pan-Pipes

easier to blow into individual straws if they are spaced a bit, so use offcuts between each straw to spread them a bit.

https://mykidcraft.com/straw-pan-pipes/

Straw 1: 19.5

Straw 2: 17

Straw 3: 15.5

Straw 4: 14.5

Straw 5: 13

Straw 6: 11.5

Straw 7: 10

Straw 8: 9.5

https://mykidcraft.com/straw-pan-pipes/

a cap for my tubes

I decided to cut some PER pipe to make the pan flute. Let’s print the caps that will close the pipe.

A cap is basically a cone (that will get into the pipe) and a cylinder on top of it.

My PER pipe has 13mm of inner diameter and 16mm of outer diameter, so let’s make a cone of

inner diameter
slightly less than 13, let’s say 12
outer diameter
13
height
5

And make the cylinder

diameter
16
height
3

import cadquery as cq
cq.exporters.export(
    cq.Workplane("XY", obj=cq.Solid.makeCone(coneinnerdiameter/2, coneouterdiameter/2, coneheight))
    .faces(">Z")
    .cylinder(cylinderheigh, cylinderdiameter/2, centered=(True, True, False)),
    out
)
return out

()

The cone is slightly too small, let’s try to make it a little bit bigger, like 13 to 15 mm.

()

The beginning part (13mm) gets into the pipe, but it does not enter until the end (15mm). Also, the cone shape prevents the cap to stick.

Let’s try with a cylinder of 13mm diameter.

import cadquery as cq
cq.exporters.export(
    cq.Workplane("XY").cylinder(cylinder1height, cylinder1diameter/2)
    .faces(">Z")
    .cylinder(cylinderheigh, cylinderdiameter/2, centered=(True, True, False)),
    out
)
return out

()

This cap fits perfectly.

Unfortunately, it does not allow getting some sound, because air still can get through. It still needs some paste or glue to make it air proof.

Let’s create the support to make them fit.

import cadquery as cq
cq.exporters.export(
    # the support without the holes
    cq.Workplane("XY").box(
        pipediameter*pipenumber
        + pipeseparation*(pipenumber-1) # pipenumber-1 intervals
        + pipeseparation*2 # extra space at the beginning and the end
        ,
        pipediameter
        + width*2 # extra space at the beginning and the end
        ,
        height
    )
    .edges("|Z").fillet(8) # make the corners round, I don't understand the value I put here
    # now, make the holes
    # first, describe where are the center of all the holes
    .rarray(
        pipediameter+pipeseparation, # space between the center of the holes
        1, # not used
        pipenumber,
        1, # only one line of pipes
        True
    )
    # describe the shape of the holes
    .circle(
        pipediameter/2
    )
    # and actually make the holes
    .cutThruAll()
    ,
    out
)
return out

()