This project was motivated by a video I saw on YouTube that seemed to show the waves present on a guitar string when plucked (see video). I knew this was a "rolling shutter" effect, so I wanted to see what guitar strings actually looked like when plucked. I didn't have an expensive high speed camera, so I cheated, and built a strobe light with some spare parts I had laying around.
Though guitar strings vibrate in a rather un-interesting way, other objects also vibrate and this is called resonance. All materials resonate, and some rather spectacularly. Wine glasses are particularly famous for their resonance, and we can break one with a speaker, and some simple analysis. The best part is, we can see the standing wave that forms on the rim of our wine glass with the strobe light we'll build.
Step 1: Concept and Physics
The "rolling shutter" effect is the explanation for the waves we see in guitar strings in many of these videos. The effect is a result of how the camera forms each frame, namely by scanning the data across the frame, instead of capturing it all at once. If there's a mismatch in the vibration frequency(329hz) and capture frequency (30hz), the frame will "draw" a standing wave.
In reality, guitar strings vibrate predominately at their fundamental mode. That is, a standing wave with one half wavelength present, or a simple up and down motion. Think of a rubber band being plucked. Other frequencies are present at integer multiples of this fundamental. For example, for low E (82Hz) we also have:
2 * 82 = 164Hz
3* 82 = 246Hz
However, their contributions are very small when compared to the fundamental. If we decrease tension on the strings to the point that lower frequency modes are highly damped, we can start to see the overtones. This can be done by taping one end of a string to a speaker and slowly carefully reducing the tension.
The idea with the strobe is to leverage periodic motion and illuminate these scenes only certain points in their cycle. At frequencies above 60Hz, most people are unable to see the flashing of the strobe, and our brains tell us there is just a continuous light source. Cameras will flicker or producing scanning artifacts, as they are sometimes capturing frames that are dark, and unlike our brains, they don't blend this into a continuous image.
If we only illuminate a vibrating string at its resonant frequency, then we'll see a wave fixed in space, motionless. If we illuminate at twice the resonant frequency, we'll see the wave fixed in space at both its positive and negative amplitudes (as shown in the photos).
If you take a speaker, and play a tone, and match the strobe frequency, you'll the speaker head will become motionless. If you just slightly offset the strobe frequency by 1 or 2 Hz, then you'll see motion, but very slowly. This is because the speaker is now being illuminated at a 1 Hz offset from its motion. So each time the light is on, the speaker is in a slightly different position.
Step 2: Building a Strobe
Goal: Illuminate the scene for very short periods of time at a regular interval.
Building the strobe is a relatively simple task and I've attached schematics that communicate the general idea. You want bright LEDs, and a good power source. I'm driving 3W white LEDs chained in series with a series of N-Channel MOSFETS rated for these currents.
NOTE: Ignore the names of components in the schematics. The MOSFETS are 2SK4017.
For this project, I have all the MOSFET gate terminals tied to a single pin on my Arduino. The Arduino I'm using is a Leonardo, but any Arduino will work for this project.
I'm driving my LEDs at 12V to be conservative with a 3.6 ohm 3W resistor is series.
Tip: LEDs can handle voltages much higher than their rated values if they are being pulsed for very short periods of times. Careful though, because my code changes the pulse duration as a fraction of the delay time. For long delay times, the ON time can be 10+ ms.
The frequency pulsing part can be accomplished without doing anything special. In the code, I do software pulse-width modulation (PWM). The only special thing going on is that I switch between delayMicroseconds() and delay() depending on the requested frequency. delayMircoseconds() becomes unreliable for large values (10-15ms).
There are more accurate ways to accomplish this task, especially if you have other things you want the Arduino to do, or want to work at very high frequencies.
The longer the strobe is on, the more of the cycle we capture, and the more blurred it becomes to our eyes. Thus, we want a very short ON time. The problem here is that this effectively amounts to a duty cycle. So our strobe light appears dimmer and dimmer, the smaller this value becomes.
double fractOn = 0.2;
I used 10-20%, and had good results. But the smaller you can get this value, without sacrificing overall brightness, the better.
Step 3: Breaking Wine Glasses
One cool thing that we can do with the strobe is see the resonance in materials, and a classic example is the singing wine glass.
We've probably all exhibited that anti-social behavior of wetting our fingers and making being obnoxious with our wineglass at a party at one point or another. This happens because the glass will convert input energy, like the vibrations from our finger, into vibrations of its own at a certain frequency known as the resonant frequency.
If we record the sound produced by this singing, we can then find the exact tone, and induce the vibration by playing it back.
Finding the tone
The easiest way to find the tone is go online and find a frequency generator like this one, and play tones until you find something in the ballpark, then carefully change tone until you've think you've dialed it in.
The most accurate way to find the tone is to record the singing, and do a Fourier analysis. I won't go into detail here, but a quick search in google will reveal a few ways that this can be done. I brought the data into MATLAB, and did it directly, but I believe many audio programs will also do this analysis standard. There are a few web tools that will get you in the ballpark, but I wasn't able to find one that I really liked.
In either case, you can check your work by setting the strobe light to this frequency, and making the glass sing. If the frequency is close, you'll be able to see the rim the the glass moving. The slower it moves, the closer you are to the tone.
Playing the tone back and breaking the glass
I drilled a 1" hole in a piece of 0.25"-thick wood to serve as a wave-guide. It's strapped securely over the front of my speaker, with the hole directly centered on the speaker head. This helps make sure that the sound wave doesn't desctruviley interfere with induced vibrations in the wineglass, but it isn't completely necessary.
Move the wine glass as close to this hole/speaker as possible without touching it. Now play the tone back at a moderate volume. Place a straw or a folded piece of paper in/on the wine glass. You'll see the paper vibrate most-intensely when the tone is matched perfectly.
Make sure your strobe matches this frequency, or just slightly off of it. As you increase the volume, you should be able to see the wine glass bending dramatically inward and outward. As you continue to increase the volume, the glass will eventually shatter.
Wear safety glasses and ear protection!
The speakers I used were small bookshelf speakers, with a 25W amplifier. The wineglass shattered at about 75% volume.
If you're having trouble, first verify the tone is correct. You'll need to dial it in with 0.1Hz for this to work.
Next, try creating a waveguide as described above. You can also try surrounding the glass with pillows or other soft materials. You don't want soundwaves reverberating and descructively interfering.
Finally, experiment with different wine glasses. Very thin-walled ones work best. Glass that has some imperfections in it will also lend to breakage.
Step 4: Other Ideas
Go experiment with your strobe and see what other periodic motions you can isolate.
I experimented with water droplets on my speaker in the video, and got some pretty interesting results.
Others have experimented with water in a different way for some memorizing behavior.
Post and comment with suggestions or your own results!