DIY for a PVC Steam Whistle

eHow may earn compensation through affiliate links in this story. Learn more about our affiliate and product review process here.

Making a steam whistle or train whistle out of PVC is an easy and fun project that will appeal to both children and adults alike. The materials are inexpensive, and you can experiment with different sizes and lengths of PVC to create different tones and sounds. The larger and longer the pipe, the lower the pitch. No matter what size PVC pipe you use, make sure your wooden dowel fits snugly inside the pipe for best results.


You can approximate the sound of a steam whistle with PVC pipe.

Video of the Day

Things You'll Need

  • Hacksaw

  • Sandpaper

  • Wooden Dowel

  • Pvc Pipe

  • Pvc End Cap

Step 1

Cut your PVC pipe to the intended length with a hacksaw. Six inches is a good length for a start.

Video of the Day

Step 2

Your notch should look like the one in this picture.

Cut a V-shaped notch 1 inch from one end of the PVC pipe. The first cut should be perpendicular to the pipe and go halfway through. The second cut should be at a 45-degree angle, meeting the first cut. The result is a notch that approximates the hole in a steam whistle.


Step 3

Cut a 3/4-inch-long piece of wood dowel. Sand away a small bit of one side of the dowel to make it flat. This will allow a small amount of air through when inserted into the PVC pipe.

Step 4

Insert the piece of wooden dowel into the PVC pipe so that the flat sanded side is facing the same side as the notch you cut into the pipe. Push the dowel piece in until it stops just short of the notch.


Step 5

Place a PVC end cap at the end of the PVC pipe and blow through the end with the wooden dowel to test the sound. You may find that you like the sound better without the end cap.


Experiment with different sizes and lengths of PVC pipe to achieve different pitches and timbres.

You can connect multiple whistles together with PVC pipe bends to create a whistle that makes multiple pitches at once.



Report an Issue

screenshot of the current page

Screenshot loading...