Introduction: Craft Cymatics: a Sensing Sand Dispenser and Vibrating Sound Plate

This project combines performance and craft in a system that visualizes sound waves as sand on an oscillating plate. The frequency of sound, and the flow of sand are controlled by a box suspended above the plate.

Created with the effort to combine digital performance and crafts, the Digital World & Image Group at Georgia Tech added to existing cymatics projects for an interactive crafting experience to the tune of sine waves. It’s a great way to learn how sound works.

So find a good speaker and a few materials. You don’t have to follow the hardware list exactly. use what works for the measurements of your speaker. Get started on your own sandtone station.

You'll need Various Parts and Equipment
OSCILLATING SPEAKER + PLATE
10” speaker (ours was 16ohm)
Sound Amplifier (able to sufficiently power your speaker without blowing it up. See this guide for help: http://www.outrageousaudio.com/page_files/wiring_subs.pdf)

Rod 1’ x ¼-20 threaded rod (4)
Rod 36” 10-24 threaded rod (cut to 14”) (4)
Nylon insert lock nuts ¼-20 (12)
Nylon insert lock nuts 10-24 (4)
Flat washers (#10) (2)
Nylon flat washers (1/4”) (2)
Flat washers (1-1/4”OD, 1/4” ID)  (4)
Flat washers (1/4” ID) (12)
2’” Flush-fit pipe drain (souxchief.com)  - or equivalent to fit over coil
Nylon Spacers ½ x .257 x ½ (2)
Acrylic Sheet 12” x 12”  x [”
Foam core 12” x 12”
Hot glue

SAND DISPENSER
Brass Hose Barb Adaptor (3/8in ID x ½ in MIP)
Clear Acrylic Round Tube 1” OD, 7/8” ID from McMasterCarr (cut to 12” long) http://www.mcmaster.com/#catalog/118/3572/=kgl42m
All purposes nylon-coated rope (4 feet) 0.125” diameter, rated for at least 250lbs
plastic funnel (8cm top diameter)
hobby servo (we used CSRC-311)
Ardunio microcontroller
stiff wire rod (at least 15” long and thing enough to fit through a servo arm hole)
9V battery
9V battery snap
mini breadboard
hollow plastic sphere (with a diameter smaller than the inner diameter of your acrylic tube but larger than the end of your funnel)
force sensing resistor 0.5” https://www.sparkfun.com/products/9375
acrylic cement

HANGING APPARATUS & SOUND CONTROL
Gametrack controller
Computer running Apple Logic
***all of the following materials need to be rated for at least 250 pounds***
All purposes nylon- coated rope (20 feet) 0.125” diameter, rated for at least 250lbs
Pulley
bungee cord and or/ extension springs with loose ends
Various carabiners, metal O-rings and threaded connectors


Step 1: OSCILLATING PLATE

First we’ll build the plate. The plate is attached to a speaker at one point and vibrates when the speaker emits sine waves. We used a 10-inch 16-ohm speaker. The higher the speaker’s resistance, the harder it is to break the amp powering it. It’s also more difficult (and possibly expensive) to find an amp powerful enough to vibrate a 16 ohm speaker with enough force to shake something set on top of it. We got around this by reducing the downward force of the plate on our speaker coil with a expansion spring (but more on that later).

Step 2: Test the Speaker

You’ll want to make sure your speaker is working. To find its positive terminal, use an alligator clip to a strand of speaker wire to one of the two terminals. Attach another strand to the other terminal. Briefly hold the wires to both ends of a 1.5 volt battery. If the speaker coil moves out, the positive terminal is connected to the positive side of the battery. If the coil moves in, the positive terminal is connected to the negative side of the battery. Label the terminals and connect the positive terminal of your speaker to the positive terminal of your amp. Repeat this for the negative terminal. Plug in your amp, attach the amp to your computer with a [ inch audio connection, and play some audio. You should be able to hear it through the speaker.

Step 3: Expose the Speaker Coil

Next you’ll need to create a surface on your speaker to hold the rod in place over the coil without impeding the coil’s movement. Cut away the speaker’s paper lining with an Xacto knife. Make sure to keep the two small wires connecting the coil to the terminal intact. You’ll also need to carefully cut away the inner diaphragm. This will expose the coil and you’ll be left with a about a 1-inch edge of paper attached to the stiff fabric lining at the bottom of the speaker.

Step 4: Fortify the Base

To make a sturdier base that lays flat, cut slits in the remaining paper edge 2 centimeters apart. Hot glue a foam core “C” shape directly onto to this paper. (Note that the thin wire of our vintage speaker broke, so we bypassed the terminals and hot glued our speaker wires directly to the leads. Luckier folks won’t have to do this).

Step 5: Attach the Rod to the Base

Next, assemble the rod that will vibrate on top of the coil and hold your plate. We cut a 14-inch piece off our 36-inch 10-24 threaded rod, but you can just buy a shorter rod. Attach this rod to a plastic sink drain (a 2-inch diameter worked for us) using a washer and a lock nut on each end (top and bottom). Hot glue the plastic sink drain to the base you prepared in the earlier step. Take care that the coil isn’t “stuck” in place, and can still move freely up and down.

Step 6: Making a Base

Attach the speaker to a base of some sort. We used a piece of scrap wood. Place four 1’ x ¼-20 threaded rods (or whatever fits) through four holes in the rim of the speaker. Drill these rods into the base. Secure each rod with a washer and lock nut on top. Now this speaker isn’t going anywhere. Which is important, because there will be quite a bit of shaking.

Step 7: Cut the Support Plate

You’ll use these four rods you just drilled into the base to hold a disc that supports the central rod connected to your vibrating plate. The shape here isn’t really important. Ours is a circle. What is important is that the plate has four holes that line up with your four rods, and a larger hole in the middle for the vibrating rod. You don’t want the middle rod to fit snugly, but you do want it to be smaller than the ¼ nylon spacers that you’ll super glue to the top and bottom of this hole. Make this pattern in your favorite vector illustration program. Use that digital file to laser cut this piece out of 1/8-inch thick  acrylic.

Attach lock nuts about a half inch down from the top of each of the four support rods. place a washer on top of each of these. Next, set your acrylic support plate on top, aligning each hold. Top off each with another washer and sure with another lock nut.

Step 8: Select the Plate

Prepare the vibrating plate from the material of your choice. Traditionally, these plates were metal. We experimented with different sized aluminum and acrylic plates. Circular plates generate different patterns than square plates. We ended up using a 24” square acrylic plate. Drill a hole in the center of the plate, large enough to just clear the diameter of your central rod.

Step 9: Mount the Plate

Slip a short compression spring over the central rod so it rests on the nylon spacer hot glued to the support plane. Screw on a lock nut about ¾ inch from the top of the rod, followed by a larger washer. These should hit the top of your compression spring. Next, slip on your vibrating plate, followed by another washer and lock nut. Your vibrating speaker is done! (If you used acrylic, spray all the oils off of it with a little windex. The sand will stick less).

Find a sine wave generator on the internet, plug in your computer to the amp and play the tone. Experiment with different tones while you sprinkle sand on top. See what sort of patterns emerge.

Step 10: HANGING SAND DISPENSER

This project could work perfectly well without a hanging sand dispenser. You could just sprinkle sand on top of an oscillating plate to generate patterns. But what’s the fun in that? Here’s where the project turns into an installation....

Step 11: Overview of Installation

Our hanging sandbox has a force sensing resistor (FSR) attached to the side of it that control the rate of sandflow. The box also controls the frequency of sound output by the speaker using a Gametrak controller that tracks the distance between the plate and the sandbox.

To make the box, you’ll need to do three things: (1) assemble the arduino, (2) construct the plastic box, and (3) attach it from the ceiling. The first step is pretty straightforward. The box can be modified to use whatever materials you have on hand, though we provide the pattern we used to laser cut ours here. The third step should be taken as a suggestion since each environment is different. Also, there are probably much safer ways to do this than we did...

Step 12: Assemble the Arduino

Wire your arduino with the hobby servo and force sensing resistor (FSR) according to the fritzing diagram. Using the Arduino software, upload the code to your board.

To power the board with a 9 volt battery, use a battery snap and plug that into the board’s power supply jack. Remember to unplug the battery when you’re not using the sand dispenser so you don’t run out of batteries.

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int inputpin = 0;  // analog pin - connect FSR
int servopin = 9; 
int val;         
int rawVal;

void setup()
{
  Serial.begin(9600);
  myservo.attach(servopin);  // attaches the servo on pin 9 to the servo object
}

void loop()
{

  rawVal = analogRead(inputpin);            // reads the value of the FSR (value between 0 and 1023)
  val = map(rawVal, 0, 1023, 60, 100);     // *****map input to a narrow range for output****
  Serial.println(rawVal);
  if (val > 20) {
    myservo.attach(servopin);
    myservo.write(val);
  } else {
   myservo.detach();   
  }

}

Step 13: Construct the Box

The box dispenses the sand and can control the frequency of the sound output by the speaker. We used a laser cutter to cut the pieces of our clear container. Really, you can construct the box from whatever material you’d like. The most important thing to retain the servo-stopper assembly within the box.

Step 14: Laser Cut the Acrylic Box

First cut the sides of the box out and glue them together using acrylic cement in a well ventilated area. Allow 15 minutes for the cement to dry and create a strong bond. Next, glue on the bottom of the box. Cut out the circular pieces from a [” acrylic sheet.

Step 15: Tube Handle

Cut a 10” long piece of the clear acrylic tubing. This should fit snugly through the hole at the bottom of the box. Push this tubing about 2 inches past the bottom of the box. Fit a few circular acrylic pieces over the top and bottom of the tubing, and glue them securely to each other, the bottom of the box, and the side the of acrylic tube. When it’s all dry, the tube should feel secure in the box.

Step 16: Affix the Funnel

Find a funnel with a bottom that fits inside the inner diameter of the acrylic tube. measure the diameter of the funnel top. Cut a piece of acrylic or other stiff material that will snugly fit inside of your box with an inner hole for the top of your funnel. Glue this piece to your funnel with hot glue.

Step 17: Assemble the Mini Box and Funnel

Cut and assemble the mini box that will hold your arduino and servo. This sits just on top of the box, but don’t glue it yet. Plug in the arduino and note where the servo arm is in its rest state. Measure the distance from this point to the bottom of the funnel. This is how long your small metal rod needs to be, plus about a half inch on either side.

Cut the rod to this length, and attach it to the end of the servo arm. Bend the extra half inch of metal over the servo arm, making sure it still has freedom to rotate up and down. Stick this metal rod through the funnel. Poke a hole in the hollow ball (or other likewise material) and stick your rod completely through it. Bend a small portion of the rod at the bottom of the ball to keep it securely in place.

Make any adjustments to this rod so that when the servo is positioned in its box directly atop the opening of the funnel, the ball rests firmly against the bottom of the funnel when the FSR is released, and project slightly into the acrylic tube to release sand when the FSR is pressed.

Press the piece of acrylic holding your funnel into the box. If it fits snugly against the side of the box, you won’t need to glue it in place.

Step 18: Siphon the Sand

Make the opening of the acrylic tube narrower to direct the flow of sand. We used a brass hose barb adaptor. Apply a generous amount of hot glue to the outside of the adapter and shove it inside the bottom of the acrylic tube.

Step 19: Finish and Hang

Glue the mini box on top of the larger box, leaving half of the opening free to pour in sand.

If using acrylic, wait until the cement has set. Affix the FSR to the outside of your box using electrical tape. Tie 4 thin but strong nylon strings through the four holes in the side of the box. Measure about 6 inches of string from the bottom and tie all of these strings to a 1 ½ inch O-Ring at the top using a bowline knot. The bowline knot resists unraveling under tension. (http://www.apparent-wind.com/knots/bowline/)

Pour in your sand! 

Congratulations! you built a dispenser! Clip the O-Ring to a carabiner rated for at least 200 lbs, and the use this to hang from the ceiling.

Step 20: HANGING APPARATUS & SOUND CONTROL

For an added bonus, you can rig your suspending sandbox to the ceiling with a pulley and a spring. Then, when the sandbox is pulled down, a signal sent to the speaker changes the sine wave frequency emitted. We do this by introducing a Gametrak controller and a computer running Logic into our system.

Safety is key, so hang your sandbox from the ceiling with an extension spring, pulley and rope rated for at least 250 pounds of downward force. You might want to reinforce your extension spring with a bungee wrapped around a solid object that connects at both sides to the end of the rope. You’ll want to tie off all your rope ends to an O-ring using a bowline knot. Wherever these O-rings need to be connected to a mount in the wall or in scaffolding, use a properly-rated threaded connector or shackle.

Step 21: Hang the Gametrak Controller

The Gametrak (http://en.wikipedia.org/wiki/Gametrak) is a USB controller that senses positions in 3-dimentional space. The USB connection makes it extremely hackable for spatial position sensing since it has two 3-axis position sensors with spring-loaded string potentiometers. Perfect! We’ll only track the z axis from one knob, but it will be just what we need.

Hang the Gametrak somewhere close to the string that is holding you sandbox. We clamped it to the scaffolding on the ceiling about 4 feet away. Use a binder clip to attach the end of the knob to a point on the string between its anchor and the pulley. The nylon string of the controller should extend at least a foot when you pull the sandbox, and contract to its resting position when you release it.

Step 22: Capture the Values With ControllerMate

We’ll use the ControllerMate software to read values from the Gametrak. http://www.orderedbytes.com/controllermate/
Gametrak values range from 0 to 2048, but we only required a resolution of 0 to 127 to control the first data byte of the pitch bend MIDI events in Logic. Open ControllerMate and assemble your Controller Mate patch to handle the Gametrack’s z-input (follow this diagram)

Here's an explanation of the attached diagram:
The z value is firstly mapped to values from 0 to 127 and calibrated.
(These values are then sent through a MIDI bank select object for patch debugging purposes only.) The values are then sent to a note generation object and mapped to the first and second data bytes (pitch and velocity, from which we will only need one value at Apple Logic's end). These note events need to be triggered, so a strobe fires on events when it detects a change in
the value from the z input. It is worth noting that the note on events do not fire if the note object in the patch has a note length which is longer than the boolean switch. Consequently the note
lengths have been be set to 0.1 seconds. These notes are then intercepted in Logic and used to pitch bend a generated sine wave.

Step 23: Convert the Values With Logic

Initially, the specific noteoff events led to corrupt meta data when converted directly to a pitch bend event. Consequently, you’ll need to create a transformer that converts the initial input data from ControllerMate is to a control event. This strips out the extraneous data.
Next, create a second transformer to convert these control events to a pitch bend event. Shift the first data byte to the second and replace the first data byte with the channel number. This outputs a pitch bend event on a specific channel with the correct range of values from 0 to 127.