Press "Enter" to skip to content

PComp Project 1: Notes and Colors

Initial Idea

Convert invisible sound to visible wave art

When I was thinking about what I could do for this project, I was staring at the mess on my desk. A bunch of jumper wires, a speaker, my delicate Arduino nano (broke one within one week already), a force sensor, a couple of resistances, and LEDs. Somehow my project 0: bubble switch popped into my mind. How cute that is to play with bubbles with physical computing! That inspires me that maybe this time I can continue my journey playing with liquids. Therefore, I came up with this idea to turn invisible acoustic waves into visible water waves and use some painting elements to enhance the art effect. I expect to use the speaker to play sounds whose energy vibrates the water inside the container to form some water waves.

Sketch

Initial sketch on project

New Idea:

With some simple tests on the speakers I have so far, which are 8 ohms / 0.5 watts and 8 ohms / 1 watts, they are not strong to vibrate neither the container nor the water inside. Therefore, I adjusted my initial plan a little bit. I still want to play with sound, water, and color, yet this time I do not convert acoustic waves to water waves in such a direct way. I let one color to represent one pitch of acoustic signals and play and paint one section of the song “ODE TO JOY”. Here are two images generated from the song with my installation.

one section of “ODE TO JOY”
one section of “ODE TO JOY”


Installation:

I installed two versions of installation. The major difference is the mechanical part – dripping pigment into the solution.

Circuit part:

I have never thought that I would spend tons of time in wiring speaker, servo motor, and potentiometer in a circuit to make them work. I was super frustrated due to the unstable connection between my MBP and Arduino nano board. Thanks to helping from several classmates (Duncan and Jia Meng), I finally recognized the problem was probably the adapter that I used is not fully compatible with the nano board. After I changed to one-to-one type C to USB adapter, my connection was more stable then.

Unfortunately, that was not the only problem that slowed down my process. My circuit was like a moody child. My circuit and program functioned perfectly last night but every single part stopped to work when I woke up the other day. I debugged every component, the wiring, and etc, but they worked fine. With help from Yeseul, I finally figured out the root of these problems was the inner wiring of my breadboard. It has a break in the middle, which is super weird; at least my four undergraduate years playing with hundreds of circuits on various breadboards yet never encountered this issue. But luckily, with this problem solved, my project went smoothly and efficiently.

Here the video shows the circuit part, which is also a pilot test of my entire project. I want to use a potentiometer as the rotational keyboard to send signals to my speaker and servo motor.

https://youtu.be/RCXNolJC6hg

Mechanical part

The rotational keyboard

https://youtu.be/nHLZRX3p1MQ

The pigment dropper

This part is the most difficult part for me due to several unexpected issues. I ordered some step motors, but because of the coming vacation, the delivery was delayed so I could not receive it till Thursday. Without step motors, I have to figure out another approach to let the pigment drip from its bottle.

Version 1:

Since the most common way to apply this pigment to the solution is to squeeze the bottle, which I do not have any idea what kind of device or set up that I have to build to achieve that. Thus I decided to let gravity do me a favor. I used material in hand to make the following device hanging pigment bottles upside down. I attached a thin plastic plate below with a small hole. I expected the pigment could drip out through the hole once the pigment bottle was rotated to a specific angle.

Top view: pigment bottles upside-down device
Bottom view: pigment bottles upside-down device

Final setup

Front view: version 1 device setup
Top view: version 1 device setup

Demo [uploading..]

This demo shows how the entire setup works. Honestly, the performance is not quite good, since the pigment was not dripped in a way as I expected. That might because the pigment used in this specific painting technique is very thick and sticky, so it was quite hard to use gravity to pull it out.

https://youtu.be/8cVzII3BRLs

Version 2:

I improved the setup of the pigment dropper by not using pigment bottles at all. I used a thin plastic plate and manually set up a couple of foam blocks (I found the foam from some of my package boxes) to separate different notes refer to the angle each note belongs to. Then I cut out a hole between every single block to allow the pigment drip. A flat plastic plate was closely attached below, with a relatively larger hole on the side. ideally, if the rotation angle was right, the pigment should drip through the small hole and big hole and down to the solution.

Pigment dropper version 2
Front view: version 2 device setup
Top view: version 2 device setup
 

I put a wooden stick on the top is to add some weight to the top plate. This makd the entire device more stable as well as make two plates touched much closer.

Demo [uploading…]

https://youtu.be/iDgC06l5Kgc

 

Arduino Code:

#include "pitches.h"
#include <Servo.h>


Servo myServo;

// notes to play
int notes[] = {NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4}; 

int servoPin = 9;
int speakerPin = 8;
int potPin = A0;
int noteDuration = 20;

void setup() {
  myServo.attach(servoPin);

  Serial.begin(9600);
}

void loop() {
  int sensor = analogRead(potPin);
  int angle = map(sensor, 0, 1023, 0, 180);
  myServo.write(angle);
  delay(20);

  // play C4
  if (angle <= 3) {
      tone(speakerPin, notes[0], noteDuration);  
  // play D4
  } else if (angle >= 42 && angle <= 48) {
      tone(speakerPin, notes[1], noteDuration);    
  // play E4 
  } else if (angle >= 87 && angle <= 93) {
      tone(speakerPin, notes[2], noteDuration);   
  // play F4 
  } else if (angle >= 132 && angle <= 138) {
      tone(speakerPin, notes[3], noteDuration);
  // play G4    
  } else if (angle >= 175) {
      tone(speakerPin, notes[4], noteDuration);   
  // pulse
  } else {
      delay(20);   
  }

 

Make the paper artwork

The most fulfilled part for me is to put that paper into the solution and wait for the paint transferred from the liquid to the paper.

https://youtu.be/CbKZHNcvJrY

 

Evaluation and Conclusion:

I have to admit that my project does not have a quite decent performance. This probably due to the mechanical part. I failed to recognize that this kind of pigment is quite different from watercolor; it is thick and sticky, which needs more than gravity to let it drip. Besides that part, the circuit part went quite well, and the potentiometer performed songs smoothly as a rotational keyboard.

This project pushes me to think about what I can do if my initial plan does not work as I expected. It also pushes me to explore what I could use if I am not accessible to the materials I want exactly. Most importantly, it is a great chance for me to explore more on the art area, even though my try was not that satisfactory.

Future work:

Use step motor to build the pigment dropper. I am also eager to see how art form can be combined with the physical computing.

 

Something to mention:

I soldered my speaker at 4am in the morning. Yeah~ I learned something new!

Playing with water plus pigment results in mess and cleaning headache. 😂

I finally get fritzing installed following the great instruction. Great thanks to Siytek’s easy-following instruction.