« Final Project Documentation | Main | »

Tom Hagler's MIDI Sculpture

Title = "MIDI Sculpture F"

For this interactive touch-sensing project I aimed to create a piece that would allegorize a juxtaposition of humanity with nature. I choose to use audio as my main output and variable resistance sensors for input.

Video, Pics, Mp3's, and Code are on the Extended Entry...

I thought of the Plasti-Dipped flex sensors as pistils in a flower and designed an object that the participant would reach into, thereby activating a MIDI controlled audio sampler. I placed corresponding LEDs just below each pistil to allow for an immediate visual affirmation that a participant’s interaction was successful. The fur lining the top of the vessel is intended to entice a participant into touching the work.

The process of preparing the flex sensors was relatively simple. I soldered some pin connectors and wire leads on to the flex strip's rather delicate connection points. I then dipped these flex sensors in black Plasti-Dip 2-5 times. As more plastic coats are applied the sensor becomes stiffer and less responsive, but also more durable. I found that 2-3 dip coats were optimal for this particular application. 25% of the sensors prepared in this manner failed completely. Either the sensors became too hot during the soldering process or the Plasti-Dip’s acetone may have dissolved some of the strip, causing a short circuit.

The code and circuitry are based on Tom Igoe’s Arduino MIDI output found here:


Materials Used:

Arduino Microcontroller
Experimentor Solderless Breadboard
Flexible Bend Sensors
MIDI Cable
Roland SP-808 Sampler
plastic vessel
Cat-5 wiring
10K ohm, 220 ohm resistors
pin connectors
.wav files
synthetic fur
modified gallery pedestal

My Arduino Code:

int potPin0 = 0;
int potPin1 = 1;
int potPin2 = 2;
int potPin3 = 3;
int potPin4 = 4;
int potPin5 = 5;

int ledPin7 = 7;
int ledPin6 = 6;
int ledPin5 = 5;
int ledPin4 = 4;
int ledPin3 = 3;
int ledPin2 = 2;

int val0 = 0;
int val1 = 0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val5 = 0;

char note = 0;

void setup() {
pinMode(ledPin7, OUTPUT);
pinMode(ledPin6, OUTPUT);
pinMode(ledPin5, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin2, OUTPUT);

void loop() {
val0 = analogRead(potPin0);
val1 = analogRead(potPin1);
val2 = analogRead(potPin2);
val3 = analogRead(potPin3);
val4 = analogRead(potPin4);
val5 = analogRead(potPin5);

if (val0 > 2) {
digitalWrite(ledPin7, HIGH);
noteOn(0x91, 48, 0x127); //Note on channel 1 (0x90), some note value pad 1 (note), high velocity (0x127):
digitalWrite(ledPin7, LOW);
if (val1 < 80) {
digitalWrite(ledPin6, HIGH);
noteOn(0x91, 49, 0x127); //Note on channel 1 (0x90), some note value pad 2 (note), high velocity (0x127):
digitalWrite(ledPin6, LOW);
if (val2 < 80) {
digitalWrite(ledPin5, HIGH);
noteOn(0x91, 50, 0x127); //Note on channel 1 (0x90), some note value pad 3 (note), high velocity (0x127):
digitalWrite(ledPin5, LOW);
if (val3 < 80) {
digitalWrite(ledPin4, HIGH);
noteOn(0x91, 51, 0x127); //Note on channel 1 (0x90), some note value pad 4 (note), high velocity (0x127):
digitalWrite(ledPin4, LOW);
if (val4 < 80) {
digitalWrite(ledPin3, HIGH);
noteOn(0x91, 52, 0x127); //Note on channel 1 (0x90), some note value pad 5 (note), high velocity (0x127):
digitalWrite(ledPin3, LOW);
if (val5 < 85) {
digitalWrite(ledPin2, HIGH);
noteOn(0x91, 53, 0x127); //Note on channel 1 (0x90), some note value pad 6 (note), high velocity (0x127):
digitalWrite(ledPin2, LOW);


void noteOn(char cmd, char data1, char data2) {
Serial.print(cmd, BYTE);
Serial.print(data1, BYTE);
Serial.print(data2, BYTE);






Here are the audio samples used in the work:

Download Insect Buzzing MP3 file

Download Decider/Jackass MP3 file

Download Frog Call MP3 file

Download Whale Song MP3 file

Download Orca Clicks MP3 file

Download Rook Call MP3 file

Download Arduino file