1. What we did: The Project
We developed an interactive dance costume to better understand the rare use of technology in dance costumes and to learn about the difficulties of integrating technology, such as Lily Pad Arduino and sensors into dance costumes. After a research phase, in which we analyzed the properties of different sensors according to their possible use in dance, we conducted an iteration process, in which we developed prototypes of the costume. The first prototype of the costume was worn by dancers who then gave us feedback concerning wearability, functionality and use of the garment. In the end, a different dancer wore the improved costume and was giving us feedback on the same matters. The final costume consists of an ultrasonic sensor to measure the distance from the dancer to an object, 6 Neopixel strips to represent the measured distance in form of a light output and a Lily Pad Arduino to process the data. The evaluation method we used, was a semi-structured interview.
2. How it looked: The Design
The costume consists of a big hood and a shoulder and back covering fabric, so that it would fit many sizes. It is fixed with a belt around the hip of the dancer, so that it does not move around the dancers body during the performance. The golden chain around the hip is ornament. The Neopixel chains are sewn onto the solid base fabric and covered with a see-through one so that the light would spread more and the circuit parts would be better hidden. The sensor in the back is sewn into a cotton filled tube, that resembles an exaggerated spine, where also the LilyPad Arduino, the cables and the battery pack are hidden. The cotton prevents the technological parts from damage and from shifting inside the costume. The Neopixel chains exit the back part and wrap around the dancers shoulders.
3. How it worked: The Technology
We used the following code and circuit to light the Neopixels one after another the more somebody was approaching the dancer’s back:
Code:
// Needed Adafruit library to work with NeoPixels and definition of all
// the pins that are currently used
#include
#define Trigger_1 8
#define Echo_1 9
#define PIN_10 10
#define PIN_11 11
#define PIN_12 12
#define PIN_13 13
#define N1_LEDS 13
#define N2_LEDS 19
#define N3_LEDS 28
// Definition on each NeoPixel strip, with the number of LEDs on the strip,
// the pin where is is located on the Lilypad and the type of the strip
Adafruit_NeoPixel back_strip = Adafruit_NeoPixel(N2_LEDS, PIN_10, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel outer_shoulder_strip = Adafruit_NeoPixel(N2_LEDS, PIN_11, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel inner_shoulder_strip = Adafruit_NeoPixel(N1_LEDS, PIN_12, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel head_strip = Adafruit_NeoPixel(N3_LEDS, PIN_13, NEO_RGBW + NEO_KHZ800);
long duration_1, distance_1, distance;
int minRange, maxRange;
void setup() {
Serial.begin (9600);
pinMode(Trigger_1, OUTPUT);
pinMode(Echo_1, INPUT);
minRange = 0;
maxRange = 100;
// Initialization of the strips. This is needed, otherwise the Neopixel LEDs won’t light up
back_strip.begin();
inner_shoulder_strip.begin();
outer_shoulder_strip.begin();
head_strip.begin();
back_strip.show();
inner_shoulder_strip.show();
outer_shoulder_strip.show();
head_strip.show();
}
void loop() {
// Setup to calculate the distance with the distance sensor, where the trigger sends
// a signal and the echo recieves it and then calculates the duration
digitalWrite(Trigger_1, LOW);
delayMicroseconds(2);
digitalWrite(Trigger_1, HIGH);
delayMicroseconds(10);
digitalWrite(Trigger_1, LOW);
duration_1 = pulseIn(Echo_1, HIGH);
// Calculate the distance (in cm) based on the speed of sound.
distance_1 = duration_1/58.2;
Serial.println(distance_1);
// If someone is inside a range of 100cm behind the person then this if-cause will trigger
if ((minRange <= distance_1 <= maxRange) ) { distance = distance_1; Serial.println(distance); // The map function rewrites each distance(0-100) to a pixel(0-18) which is then used in a // for-loop to light up the pixels up to needed point for(int i = 18; i>= map(distance, 0, 100,0,18 ); i--)
{
// setPixelColor always lights on pixel up with a certain color declared after the pixel
back_strip.setPixelColor(i, 0,150,210);
outer_shoulder_strip.setPixelColor(i, 0,150,210);
inner_shoulder_strip.setPixelColor(i-6, 0,150,210);
head_strip.setPixelColor(map(i, 18, 0, 13, 0),150,0,210);
head_strip.setPixelColor(map(i, 18, 0, 14, 27),150,0,210);
back_strip.show();
outer_shoulder_strip.show();
inner_shoulder_strip.show();
head_strip.show();
}
for(int j = 0; j < map(distance, 0, 100, 0,18); j++) { back_strip.setPixelColor(j,0); outer_shoulder_strip.setPixelColor(j, 0); inner_shoulder_strip.setPixelColor(j-6, 0); head_strip.setPixelColor(33-j,0); head_strip.setPixelColor(-6+j,0); back_strip.show(); outer_shoulder_strip.show(); inner_shoulder_strip.show(); head_strip.show(); } // Function that was used while exhibiting the costume to have a constant lit up pixel // running through the costume to attract visitors /*} if (distance_1 > maxRange) {
for (int k=0; k <= 9; k++) {
outer_shoulder_strip.setPixelColor(k+10, 0,150,210); //10 -> 19
outer_shoulder_strip.setPixelColor(k, 0,150,210); // 0 -> 9
inner_shoulder_strip.setPixelColor(k+9, 0,150,210); // 9 -> 18
inner_shoulder_strip.setPixelColor(k-1, 0,150,210); // -1 -> 8
outer_shoulder_strip.setPixelColor(k+19, 0);
outer_shoulder_strip.setPixelColor(k+9, 0);
outer_shoulder_strip.setPixelColor(k-1, 0);
inner_shoulder_strip.setPixelColor(k+8, 0);
inner_shoulder_strip.setPixelColor(k-2, 0);
head_strip.setPixelColor(13,0);
head_strip.setPixelColor(14,0);
outer_shoulder_strip.show();
inner_shoulder_strip.show();
delay(100);
}
}*/
}
}
Circuit:
4. The costume in action: The video
The following video shows an example dance performance using the costume.
5. What we found out: Conclusion
To find out why computational components are rarely used in dance, we developed an interactive dance costume to fit an existing choreography. The costume detects objects and persons and shows the distance as a light output, activating a varying amount of Neopixels on six strips on the costume proportional to the measured distance to the object or person. While testing it on a third dancer, who did not perform the choreography, it turned out that it was possible to use the costume for another choreography, than the one it was made for. In conclusion, we consider the costume applicable for many different dance performances, which is why we conclude, that the lack of technology in dance performances is possibly not caused by an impossible construction of a garment, which is adaptable to different performances. Still the issue of instability causes problems for a permanent use on stage. As we have seen with the first prototype, the circuits or sensors can easily break any time and cause unwanted effects during the performance. As our study did not include research on how often the costume can be washed, we cannot be sure, the costume can be used for a long time. In our interview with the dancers, we found out, that rehearsal times might get longer using an interactive costume, as the dancer probably needs time to get used to the feeling that he could break anything and has time to learn to adapt on possible modifications on a choreography, because of the constraints in movements that an electronic system can imply. In future research, it could be interesting how much more time for rehearsals would be needed exactly. This could be a reason for the rare use of technical features in dance costumes, as professional dance theaters usually have tight and fixed times for rehearsals, where nearly no flexibility is allowed.