I am proposing an interactive desktop learning tool that will teach the user how standing waves and harmonics work. Through the utilization of two motors, a string, and two potentiometers (one for each motor) the user will be able to cycle from fast to slow to show the various stages of harmony and dissonance in a string of a given length by speeding up and slowing down those rpms. I was initially inspired by this large scale work by Daniel Palacios
Since the depicted installation experience is on “rails” so to speak due to the program that cycles the standing waves, you can see the kids in the video want to interact with the sculpture, yet there is no way for them to do so aside from merely running around it. I thought it would be nice to make a desktop version that would remedy this and allow for the user to manipulate the waves by fluctuating the speed of each individual motor via large bakelite knobs. I would also like to provide LED feedback under the string to both highlight the waveform, and to provide feedback to the user. I propose that there would be two settings for the LEDs, one setting would be a strobe effect, which would allow the user to see more clearly the waves in their static state; and the other would give feedback as to the speed of the motors.
The parts utilized would be:
- 2 High rpm dc motors ~ $14.95 each
RS-550s 18v (6v – 24v) DC Motor – High Power & Torque for DIY Projects, Drills, Robots, RC Vehicles
- 1 Length of String ~ Cheap: I may have to play around with what type of string to use.
- UPDATE: Upon the advice of Ben Light, I am using 16th inch surgical tubing that I got from Canal Rubber for about a dollar a ft.
- Acrylic ~ I have this
1 sheet of 1/8th or ¼ inch acrylic to be cut into discs to fasten the string to the motors. I may have to experiment with this application.
UPDATE: I have used 16th inch acrylic
- Wood ~ $154 for 20 board ft of lumber (Maple) $171 for 20 board ft (Birch)
To build the supports for the motors and the potentiometers into one desktop stand. Maybe Maple or Birch
Bakelite Knobs ~ $16.95 set of four
To provide the user with a nice tactile feel to attenuate the motor’s rpm
Set of 4 black round radio knobs with spun aluminum tops – vintage control knobs
$8.95
Giant Bakelite knob with brass insert~$15.00
Set of 5 large Bakelite radio knobs with spun aluminum inserts – 2″ diameter console knobs
UPDATE: I purchased this knob from the Leeds Electronic Store on Etsy for $7 for 5 knobs
LED’s x 6?
Control: Arduino Uno or Mini, Toggle Switch (on/off), Toggle Switch for LED’s
What it will look like:
UPDATE: Project Timeline
UPDATE: Thorough Bill of Materials
bill-of-materials for pcomp final
UPDATE: Playtesting
This is the first test with the motors on two bench power supplies with the rubber tubing as the oscillation material
UPDATE:Circuit schematic idea for the final product
UPDATE: System Schematic
Testing the pot with the lab for motor control
Here is the code:
Left out of the screen (int motorpin = 5)
UPDATE: CODE
I haven’t added the code for the LED’s yet because I haven’t been able to keep the circuit from overheating yet. :/
This is a test with the same code adding the Larger 12v motor in place of the small motor, with the power separated.
The power from the arduino goes to the pot. The motor is sharing a ground with the bench power. The bench power positive is going to the 12v motor.
I am concerned about the level of amperage that is needed to get the motor spinning, and what the resulting amperage will need to be to get both motors spinning. As you can see the motor is pulling up to a little over 2amps to turn the motor when it is slow, when this doubles due to the second motor being in the system it may be pulling 5 amps which is quite alot for the components I am using.
Here is a close up of the circuit that is being used in the video. I am using a tip 12o transistor in the circuit along with two diodes to prevent backflow of electric into the arduino.
Wiring Code:
- The red wires in all situations are hot (either 5v from the arduino, or up to 12v from the bench power to the motor)
- The yellow wire is digital read (A0)
- The orange wire is pulse width modulation to control the voltage to the motor. (5~)
- The black wires are the ground (The motor, the bench power, and the arduino share a ground)
This is the complete picture of both circuits for both motors on two arduinos. This is not ideal, but I wanted to have a fail-safe in case there were problems with the two circuits existing on one breadboard and one arduino.
Regrettably, I don’t have any documentation of what happened next but I do have this:
I migrated the circuits over to one arduino with two breadboards, but there was something wrong with one of the breadboards that was causing a short circuit and led to a couple of changes. I changed from a tip120 transistor to a MOSFET transistor in an effort to make a more robust circuit because the current load was making the tip120 too hot. (or at least that is what I thought until the breadboard for one of the circuits started to burn up where the transistor was plugged in, which has led me to believe that the breadboard may have had a short)
You can see in the video that the amp load is 3+ amps and that is when the motors are already running. It approaches 5 amps when the motors are getting started.
I have begun to start cleaning up the wiring so it is easier for me to see where things are going since I have migrated both circuits over to one breadboard with heat-sinks on the MOSFET transistors. I haven’t tried to test this configuration out yet but I am hopeful that this will carry the current loads that I need for the motors to work at top speed. This weekend I will test this new configuration and try to add an on/off toggle switch to the circuit to give myself an easier way to turn it off on the board. I also need to start thinking about how to add the LEDs into this picture.
Wiring Code:
- The red wires in all situations are hot (either 5v from the arduino, or up to 12v from the bench power to the motor)
- The yellow wire is digital read (A0 and A1 top to bottom)
- The blue wire is pulse width modulation to control the voltage to the motor. (3~ and 5~)
- The black wires are the ground (The motor, the bench power, and the arduino share a ground)
I am concerned given the experimentation with the motor that the only thing that will be visible with the speeding up and slowing down of the motors is the amplitude of the oscillation. This is not what I was trying to achieve. The only time the system will display any turbulence, which was the desired result, is when you shorten the length of the rubber hose by placing your hand in it’s rotation. This is not ideal. You can however witness the standing wave beginning to pull apart when the motor’s speed is slowed, but it is not as extreme as I had hoped so you can really see the difference between harmonics and dissonance. C’est la vie for now.
UPDATE:
I tried the new configuration and everything is working somewhat nominally. I found out that I have been running Mega potentiometers instead of 10k or 5k or 1k potentiometers, which may be the source of my amperage woes. Also, everything I said about the system not displaying any turbulence has changed as you can see in this new video. I am not exactly sure why, maybe the rubber is stretching out and making it easier for the turbulence to take place. Since I changed the potentiometers to 5k potentiometers I am getting more voltage to the circuit as well (not reflected in the video). It seems like the circuit is happier. I stumbled across this while watching the bench power when I turned the pots down to the lower setting (closer to 0 in the pwm). The voltage was going up along with the amperage, also the MOSFET transistors were getting hotter due to the heavier amount of work the motors were doing at the slower speeds. So I have swapped out the pots to 5k pots and the amp load on the circuit is lighter and allows for more voltage to the motors, not sure why, but I have my guesses.
Tomorrow, I will add the on/off switch and add a barrel jack for power to the motors so I can get off of the bench power. I also need to do the amperage math on adding LEDs and an additional switch to the system to see what type power supply I will need for the final product.
I began the work of the on and off switch and ran into continued problems with the MOSFET transistors I was using. They are also getting too hot.
I have updated the system with solid state relays
Here is how I am going to wire it up (sort of), the load is obviously the motors. I am running the voltage positive from the power supply to the positive on the motors. I am running the negative back to the load on the switch and then to ground on the circuit board. The control equipment is the arduino, from the pwm pins back to ground on the circuit board. Effectively this is wired the same way that the transistors are wired. The relays are acting as a MOSFET transistor switch, sending pulses to the relay allowing voltage to pass to the motor which allow the motors speed to be controlled.
This solution is working with no added heat. This is great news.
Now that the circuit is working the way it should, I am adding the leds and their on off switch.

This is the code that I am going to use.
int switchPin = 2; // switch is connected to pin 2
int led1Pin = 12;
int led2Pin = 11;
int led3Pin = 10;
int led4Pin = 9;
int led5Pin = 8;
int led6Pin = 7;
int val; // variable for reading the pin status
int val2; // variable for reading the delayed status
int buttonState; // variable to hold the button state
int lightMode = 0; // What mode is the light in?
int motorpin1 = 3;
int motorpin2 = 5;
void setup() {
Serial.begin(9600); // Set up serial communication at 9600bps
buttonState = digitalRead(switchPin); // read the initial state
pinMode(switchPin, INPUT); // Set the switch pin as input
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(led3Pin, OUTPUT);
pinMode(led4Pin, OUTPUT);
pinMode(led5Pin, OUTPUT);
pinMode(led6Pin, OUTPUT);
pinMode(motorpin1, OUTPUT); //Motor 1
pinMode(motorpin2, OUTPUT); //Motor 2
}
void loop() {
int pot1 = analogRead(A0);
int pot2 = analogRead(A1);
int potvalue1 = map(pot1, 0, 1023, 0, 255);
int potvalue2 = map(pot2, 0, 1023, 0, 255);
analogWrite(motorpin1, potvalue1);
analogWrite(motorpin2, potvalue2);
Serial.println( potvalue2);
delay(10);
val = digitalRead(switchPin); // read input value and store it in val
// If then statement that defines toggle
// switch state for strobe leds
if (val == 1) {
digitalWrite(led1Pin, HIGH);
digitalWrite(led2Pin, HIGH);
digitalWrite(led3Pin, HIGH);
digitalWrite(led4Pin, HIGH);
digitalWrite(led5Pin, HIGH);
digitalWrite(led6Pin, HIGH);
delay(15);
digitalWrite(led1Pin, LOW);
digitalWrite(led2Pin, LOW);
digitalWrite(led3Pin, LOW);
digitalWrite(led4Pin, LOW);
digitalWrite(led5Pin, LOW);
digitalWrite(led6Pin, LOW);
delay(35);
}
else if (val == 0) {
digitalWrite(led1Pin, LOW);
digitalWrite(led2Pin, LOW);
digitalWrite(led3Pin, LOW);
digitalWrite(led4Pin, LOW);
digitalWrite(led5Pin, LOW);
digitalWrite(led6Pin, LOW);
}
Serial.println(val);
}
Nothing left to do but fabricate the platform for everything to go on.
I will post more on that process tomorrow.
Here is the thing working. Albeit with a pot acting up. I removed it and I am getting ok results. I am also leaving out the led’s for now, until I can figure out how to add them to the system in a clean way (fabrication wise).
This is the control box. I picked it up from the container store. I have ideas for something better but that will have to come later. Also I am having a problem with one of the pots (likely due to soldering) so I am leaving it off for now.
The semi finished product.