Category Archives: Final Project

Project Hyperessay #2: Conclusion

The objective of the collaborative project Touch was to investigate critical concepts and fundamental artistic concerns inherent in the emerging form of live networked performance in the third space, through creative dance movements, interactive wearables, smart textiles, audio-visual arts and the Critical Response Process (CRP).  

This collaboration between School of Art, Design & Media at Nanyang Technological University in Singapore and the School of Arts, Media & Engineering at Arizona State University took place on Thursday, April 21 (SGT) in a third space where the artist Angeline Young and students of ADM performed as a collective body. And the performance was being live broadcasted over the Internet to expand the experience of the networked performance to the global audience despite of the spatial divide.

23aaaaaa


My inspiration came from this project called “The Space Between Us” which was a collaborative electronic music and modern dance piece for computationally enhanced dancers and MAX/MSP, a programming language for interactive music and multimedia.

Link:

https://www.youtube.com/watch?v=msqol0w9NVs

pp1

One of the dancers’ (with the round skirt) costume combined LilyPad components and an XBee (wireless transmitter) together with pressure and flex sensors connected by conductive thread, which detected and transmitted the movements of the dancer to the composer’s laptop, which were then used to generate and control sound within a MAX/MSP environment.

So instead of a dancer’s movements being a slave to the fixed constraints of a pre-composed piece of music, the wireless dance costume put the power of live musical composition in the hands (body) of the dancer, who could explore and improvise new shapes and structures within an otherwise free musical environment. This became the concept for both my costume design and dance performance. 

 

The interactive mechanism of my costume was largely based on this idea. 

 

 

While conceptualising for the idea of the final performance, we had been explicating the concept of “touch” in the third space throughout the first half of the semester by exploring such topics as “the virtual body,” “distributed presence,” “third space,” “biometrics,””sensing garments and smart textiles,””glitch aesthetics,””dance movement” and etc. 

 

Some research critiques that helped me arrive at the final work I produced for the performance:

research2=2

This was part of a biomimicry project called braided beaded ball suit which was an emulation of the beautiful symmetry in nature. Artists who created this were very much inspired by the glowing creatures of the deep sea as well as weird formations in the human body to inform new approaches in design. This inspired my costume design of glowing LEDs in front of the background of the black velvet as well as the mesh structure created by wires which resembled vines in the nature. 

21aaaaaa

 

In my research critique of dance performance, Eiko & Koma’s iconoclastic work combined slow and nuanced movement vocabulary with bold theatrical design. Whether performing in a theater or in natural sites outdoors, Eiko & Koma often moved as if they were not human. Although this was not exactly what I imagined my dance movements in the final performance would look like, I did borrow the simpleness and directness from their dance. 

Essentially, dance is a way of communication. Without the fixed constraints of a pre-composed piece of music the artist’s personal narrative is embodied through pure movements – dance in its most pristine form.

Eiko and Koma

IMG_8736


He is a weaver of personal histories through sound, a composer, who conducts and orchestrates the sonic world that is generated by the movement and actions of Angeline and the colony. He carefully layers the sound to coordinate a sense of harmonic affiliation in the third space through the carefully blending of personal histories represented in sound. However, Yuhao’s efforts are often undermined and disrupted by the actions of Charlene and Feliciana. Yuhao seeks to overcome their resistance through mysterious answers from Angeline as to the amorphous and intangible nature of human communication in the third space to create a world of mutual understanding.

victorian_era_inverness_cape

 

Based on this character sketch, I designed and made my costume which was inspired by the Victorian Era men’s fashion. Most often associated with Sherlock Holmes, the inverness cape is a weatherproof outer coat which was often worn in 1880s London. 

 

IMG_8604

IMG_8605unspecified

With the costume in progress, I worked on electronic / wearables for incorporation into the piece. There were many possibilities for input sensing, from accelerometers to proximity sensors, and the goal was to create the ideal mapping of input and output, embedded appropriately in the garment or accessory for the performance.

Movement and gesture would be translated into sound. Each character emitted specific kinds of sounds. I spent a big portion of the time on codings especially the radio transmission of data used to generate and control sound within a MAX/MSP environment. We switched from bluetooth wireless to radio wireless as bluetooth had some connection problem with Mac causing the data transmission to be unstable.

nrf24L01-black

 

Under the guidance of Naga, I managed to transmit data between two nRF24L01 transceivers with one as the transmitter sending out the data and the other one receiving the data. The transmitter was connected to LilyPad which was sewn onto the costume. The receiver was connected to Randall’s Mac and Max software  extracted data from it to generate sound control.

Final performance

recording_4-14.01_18_03_08.Still001

recording_4-14.01_36_41_23.Still008 recording_4-14.02_01_46_14.Still011

 

Touch is not fundamentally about technology. Nor is it an attempt to define a new genre of art practice. It is about what we have been researching and exploring over the course of the semester which is called “the virtual embrace”. It is about experience. You will only know what it means after you experience it. The questions at the start of the project: What is “touch” in the third space?  How does it feel to “touch” without physically touching? How do our digital representations in the third space connect to our corporeal bodies during the “touch”? How has the “virtual embrace” transformed the way in which we engage in social media and digital communications? Maybe only six of us have an answer for ourselves and these answers don’t have to be the same. 

1aaaaaaa

Final Project: Project Update #4

Last week I worked on the wireless transmission of data between the costume (Arduino Lilypad Board) and the Max software on the laptop. After adopting the trial-and-error method, I managed to achieve a relatively smoother data flow. With both electronics and the clothes ready, the last thing to be done is to integrate everything and test the sounds/lights, and that the costume withstands duress from stretching, heat, and perspiration, etc.


 

IMG_8778

The first step toward a both functional and aesthetic costume is to sew electronic components onto the coat. My initial idea was to hide all the wires underneath the fabrics and exposing only sensors and LED lights. During the making process, I found that the exposed wires actually created unexpected aesthetic effects by adding another layer of texture on top of the black velvet material. Due to the elastic property of the wire, I was able to change its shape to construct a mesh in which LED lights were randomly yet evenly distributed.


IMG_8787
More wires and a more complicated mesh.

Another major concern was where to place the Lilypad main board. As it controls the functionality of the costume, it has very complex connections to rest of the circuit thus has lots of wires. I didn’t want it to be exposed so I made a slit near the collar and hid the slit with a fold.

IMG_8780

IMG_8784

 

IMG_8785


As a result the board was hid under the cape and would not affect the appearance of the costume. Moreover, I was able to adjust the direction to which the proximity sensor faced so it could give more accurate data.

 

And lastly, I tried dancing in the costume and it didn’t hinder most of my movements except some arm and shoulder ones because the existence of the cape and the wire mesh. I placed the power bank in my pants pocket and it worked normally. Another issue was that I had to adjust the angle of the proximity sensor from time to time as the wires connecting it tended to twist away from its original position.

 

Final Project: Project Update #3

Last week I finished most of the non-electronic aspect of the costume design.

On the performance day, I will wear a white shirt under the outer garment and probably black pants to look like a conductor of an orchestra.

IMG_8775


This week I focused more on codings especially the radio transmission of data used to generate and control sound within a MAX/MSP environment. We switched from bluetooth wireless to radio wireless (as shown in the picture below) as bluetooth had some connection problem with Mac causing the data transmission to be unstable.

nrf24L01-black
The nRF24L01 is a highly integrated, ultra low power (ULP) 2Mbps RF transceiver IC for the 2.4GHz ISM (Industrial, Scientific and Medical) band.

Basically there are two nRF24L01 transceivers with one as the transmitter sending out the data and the other one receiving the data. The transmitter will be connected to Lilypad which is sewn onto the costume. The receiver will be connected to Randall’s Mac and Max software will be extracting data from it to generate sound control.

Following is the code I have developed under the guidance of Naga. It is for both receiver and transmitter. Just change the value of the variable “role” to either “sender” or “receiver” when programming respective boards.

Probably you have noticed the big chunks of “if-else” clauses. They were written to ensure a gradual change of the parameter. As the proximity sensor sometimes gave us very sudden changes of the data, which in turn caused Max software unable to perceive and process it.

/* THIS PROGRAM IS SENDER AND RECEIVER FOR RADIO COMMUNICATION

SENDER HAS THE SENSOR CONNECTED
RECEIVER IS CONNECTED TO LAPTOP

*/

#include <SPI.h>
#include “nRF24L01.h”
#include “RF24.h”
#include “printf.h”

RF24 radio(9,10);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };

typedef enum { SENDER=1, RECEIVER} role_e;
const char* role_name[] = { “invalid”, “SENDER”, “RECEIVER”};

role_e role = SENDER;

int sensor_pin = A0;
int recv_values[3];
int sensor_values[3];
int ack_values[3];
int ar_size = 3;
uint8_t tmp;
uint8_t cnt;
bool read_status = false;
bool write_status = false;
int current_val ;
int previous_val;
int new_distance;
int old_distance;
int diff_distance;
int distance;

//LED section
int led = 8; // the PWM pin the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by

void setup()
{

pinMode(sensor_pin, INPUT);
// declare pin 8 to be an output:
pinMode(led, OUTPUT);
Serial.begin(57600);
printf_begin();
Serial.println(role_name[role]);

radio.begin();
radio.setRetries(15,15);
radio.setPayloadSize(sizeof(int)*ar_size);

if(role == SENDER)
{
radio.openWritingPipe(pipes[0]);
radio.openReadingPipe(1,pipes[1]);
}
if(role == RECEIVER)
{
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1,pipes[0]);
}
radio.startListening();
radio.printDetails();
delay(20);

old_distance = analogRead(sensor_pin);
}

void loop()
{

if(role == SENDER)
{
radio.stopListening();
unsigned long time = millis();
//printf(“Now sending %lu…”,time);

new_distance = analogRead(sensor_pin);
diff_distance = new_distance – old_distance;

printf(“%d %d %d”, new_distance, old_distance, diff_distance);

if (diff_distance >=10){ //sudden change in data
//make sudden changes smooth
distance = old_distance;
printf(“%d”,distance);
//for (int counter = 0; counter < diff_distance; counter++) {
distance = distance + int(diff_distance/4);
if (distance <= 12) {
distance = 1;
} else if (distance <= 14){
distance = 2;
} else if (distance <= 16){
distance = 3;
} else if (distance <= 18 ){
distance = 4;
} else if (distance <= 20 ){
distance = 5;
} else if (distance <= 22 ){
distance = 6;
} else if (distance <= 24){
distance = 7;
} else if (distance <= 26){
distance = 8;
} else if (distance <= 28){
distance = 9;
} else if (distance <= 30){
distance = 10;
} else if (distance <= 32){
distance = 11;
} else if (distance <= 34){
distance = 12;
} else if (distance <= 36){
distance = 13;
} else if (distance <= 38 ){
distance = 14;
} else if (distance <= 40){
distance = 15;
} else if (distance <= 42){
distance = 16;
} else if (distance <= 44){
distance = 17;
} else if (distance <= 46){
distance = 18;
} else if (distance <= 48){
distance = 19;
} else if (distance <= 50){
distance = 20;
} else if (distance <= 52){
distance = 21;
} else if (distance <= 54 ){
distance = 22;
} else if (distance <= 56){
distance = 23;
} else if (distance <= 58){
distance = 24;
} else if (distance <= 60){
distance = 25;
} else if (distance <= 62){
distance = 26;
} else if (distance <= 64){
distance = 27;
} else if (distance <= 66){
distance = 28;
} else if (distance <= 68){
distance = 29;
} else if (distance <= 70 ){
distance = 30;
} else if (distance <= 72){
distance = 31;
} else if (distance <= 74){
distance = 32;
} else if (distance <= 76){
distance = 33;
} else if (distance <= 78){
distance = 34;
} else if (distance <= 80){
distance = 35;
} else if (distance <= 82){
distance = 36;
} else if (distance <= 84){
distance = 37;
} else if (distance <= 86 ){
distance = 38;
} else if (distance <= 88){
distance = 39;
} else if (distance <= 90){
distance = 40;
} else if (distance <= 92){
distance = 41;
} else if (distance <= 94){
distance = 42;
} else if (distance <= 96){
distance = 43;
} else if (distance <= 98){
distance = 44;
} else if (distance <= 100){
distance = 45;
} else if (distance <= 102){
distance = 46;
} else if (distance <= 104){
distance =47;
} else if (distance <= 106){
distance = 48;
} else if (distance <= 108 ){
distance = 49;
} else if (distance <= 110){
distance = 50;
}else if (distance <= 112){
distance = 51;
}else if (distance <= 114){
distance = 52;
}else if (distance <= 116){
distance = 53;
}else if (distance <= 118){
distance = 54;
}else if (distance <= 120 ){
distance = 55;
} else if (distance <= 122 ){
distance = 56;
} else if (distance <= 124){
distance = 57;
} else if (distance <= 126){
distance = 58;
} else if (distance <= 128){
distance = 59;
} else if (distance <= 130){
distance = 60;
} else if (distance <= 132){
distance = 61;
} else if (distance <= 134){
distance = 62;
} else if (distance <= 136){
distance = 63;
} else if (distance <= 138 ){
distance = 64;
} else if (distance <= 140){
distance = 65;
} else if (distance <= 142){
distance = 66;
} else if (distance <= 144){
distance = 67;
} else if (distance <= 146){
distance = 68;
} else if (distance <= 148){
distance = 69;
} else if (distance <= 150){
distance = 70;
} else if (distance <= 152){
distance = 71;
} else if (distance <= 154 ){
distance = 72;
} else if (distance <= 156){
distance = 73;
} else if (distance <= 158){
distance = 74;
} else if (distance <= 160){
distance = 75;
} else if (distance <= 162){
distance = 76;
} else if (distance <= 164){
distance = 77;
} else if (distance <= 166){
distance = 78;
} else if (distance <= 168){
distance = 79;
} else if (distance <= 170 ){
distance = 80;
} else if (distance <= 172){
distance = 81;
} else if (distance <= 174){
distance = 82;
} else if (distance <= 176){
distance = 83;
} else if (distance <= 178){
distance = 84;
} else if (distance <= 180){
distance = 85;
} else if (distance <= 182){
distance = 86;
} else if (distance <= 184){
distance = 87;
} else if (distance <= 186 ){
distance = 88;
} else if (distance <= 188){
distance = 89;
} else if (distance <= 190){
distance = 90;
} else if (distance <= 192){
distance = 91;
} else if (distance <= 194){
distance = 92;
} else if (distance <= 196){
distance = 93;
} else if (distance <= 198){
distance = 94;
} else if (distance <= 200){
distance = 95;
} else if (distance <= 202){
distance = 96;
} else if (distance <= 204){
distance = 97;
} else if (distance <= 206){
distance = 98;
} else if (distance <= 208){
distance = 99;
} else if (distance <= 210){
distance = 100;
} else if (distance <= 212){
distance = 101;
} else if (distance <= 214){
distance = 102;
} else if (distance <= 216){
distance = 103;
} else if (distance <= 218){
distance = 104;
} else if (distance <= 220){
distance = 105;
} else if (distance <= 222){
distance = 106;
} else if (distance <= 224){
distance = 107;
} else if (distance <= 226){
distance = 108;
} else if (distance <= 228){
distance = 109;
} else if (distance <= 230){
distance = 110;
} else if (distance <= 232){
distance = 111;
} else if (distance <= 234){
distance = 112;
} else if (distance <= 236){
distance = 113;
} else if (distance <= 238){
distance = 114;
} else if (distance <= 240){
distance = 115;
} else if (distance <= 242){
distance = 116;
} else if (distance <= 244){
distance = 117;
} else if (distance <= 246){
distance = 118;
} else if (distance <= 248){
distance = 119;
} else if (distance <= 250){
distance = 120;
} else if (distance <= 252){
distance = 121;
} else if (distance <= 254){
distance = 122;
} else if (distance <= 256){
distance = 123;
} else if (distance <= 258){
distance = 124;
} else if (distance <= 260){
distance = 125;
} else if (distance <= 262){
distance = 126;
} else if (distance <= 264){
distance = 127;
} else if (distance <= 266){
distance = 128;
} else if (distance <= 268){
distance = 129;
} else if (distance <= 500){
distance = 130;
}

// } //for loop end

old_distance = new_distance;

}else if (diff_distance <= -10) {
//make sudden changes smooth
distance = old_distance;

//for (int counter = 0; counter > diff_distance; counter–) {
distance = distance – int(diff_distance/4);
if (distance <= 12) {
distance = 1;
} else if (distance <= 14){
distance = 2;
} else if (distance <= 16){
distance = 3;
} else if (distance <= 18 ){
distance = 4;
} else if (distance <= 20 ){
distance = 5;
} else if (distance <= 22 ){
distance = 6;
} else if (distance <= 24){
distance = 7;
} else if (distance <= 26){
distance = 8;
} else if (distance <= 28){
distance = 9;
} else if (distance <= 30){
distance = 10;
} else if (distance <= 32){
distance = 11;
} else if (distance <= 34){
distance = 12;
} else if (distance <= 36){
distance = 13;
} else if (distance <= 38 ){
distance = 14;
} else if (distance <= 40){
distance = 15;
} else if (distance <= 42){
distance = 16;
} else if (distance <= 44){
distance = 17;
} else if (distance <= 46){
distance = 18;
} else if (distance <= 48){
distance = 19;
} else if (distance <= 50){
distance = 20;
} else if (distance <= 52){
distance = 21;
} else if (distance <= 54 ){
distance = 22;
} else if (distance <= 56){
distance = 23;
} else if (distance <= 58){
distance = 24;
} else if (distance <= 60){
distance = 25;
} else if (distance <= 62){
distance = 26;
} else if (distance <= 64){
distance = 27;
} else if (distance <= 66){
distance = 28;
} else if (distance <= 68){
distance = 29;
} else if (distance <= 70 ){
distance = 30;
} else if (distance <= 72){
distance = 31;
} else if (distance <= 74){
distance = 32;
} else if (distance <= 76){
distance = 33;
} else if (distance <= 78){
distance = 34;
} else if (distance <= 80){
distance = 35;
} else if (distance <= 82){
distance = 36;
} else if (distance <= 84){
distance = 37;
} else if (distance <= 86 ){
distance = 38;
} else if (distance <= 88){
distance = 39;
} else if (distance <= 90){
distance = 40;
} else if (distance <= 92){
distance = 41;
} else if (distance <= 94){
distance = 42;
} else if (distance <= 96){
distance = 43;
} else if (distance <= 98){
distance = 44;
} else if (distance <= 100){
distance = 45;
} else if (distance <= 102){
distance = 46;
} else if (distance <= 104){
distance =47;
} else if (distance <= 106){
distance = 48;
} else if (distance <= 108 ){
distance = 49;
} else if (distance <= 110){
distance = 50;
}else if (distance <= 112){
distance = 51;
}else if (distance <= 114){
distance = 52;
}else if (distance <= 116){
distance = 53;
}else if (distance <= 118){
distance = 54;
}else if (distance <= 120 ){
distance = 55;
} else if (distance <= 122 ){
distance = 56;
} else if (distance <= 124){
distance = 57;
} else if (distance <= 126){
distance = 58;
} else if (distance <= 128){
distance = 59;
} else if (distance <= 130){
distance = 60;
} else if (distance <= 132){
distance = 61;
} else if (distance <= 134){
distance = 62;
} else if (distance <= 136){
distance = 63;
} else if (distance <= 138 ){
distance = 64;
} else if (distance <= 140){
distance = 65;
} else if (distance <= 142){
distance = 66;
} else if (distance <= 144){
distance = 67;
} else if (distance <= 146){
distance = 68;
} else if (distance <= 148){
distance = 69;
} else if (distance <= 150){
distance = 70;
} else if (distance <= 152){
distance = 71;
} else if (distance <= 154 ){
distance = 72;
} else if (distance <= 156){
distance = 73;
} else if (distance <= 158){
distance = 74;
} else if (distance <= 160){
distance = 75;
} else if (distance <= 162){
distance = 76;
} else if (distance <= 164){
distance = 77;
} else if (distance <= 166){
distance = 78;
} else if (distance <= 168){
distance = 79;
} else if (distance <= 170 ){
distance = 80;
} else if (distance <= 172){
distance = 81;
} else if (distance <= 174){
distance = 82;
} else if (distance <= 176){
distance = 83;
} else if (distance <= 178){
distance = 84;
} else if (distance <= 180){
distance = 85;
} else if (distance <= 182){
distance = 86;
} else if (distance <= 184){
distance = 87;
} else if (distance <= 186 ){
distance = 88;
} else if (distance <= 188){
distance = 89;
} else if (distance <= 190){
distance = 90;
} else if (distance <= 192){
distance = 91;
} else if (distance <= 194){
distance = 92;
} else if (distance <= 196){
distance = 93;
} else if (distance <= 198){
distance = 94;
} else if (distance <= 200){
distance = 95;
} else if (distance <= 202){
distance = 96;
} else if (distance <= 204){
distance = 97;
} else if (distance <= 206){
distance = 98;
} else if (distance <= 208){
distance = 99;
} else if (distance <= 210){
distance = 100;
} else if (distance <= 212){
distance = 101;
} else if (distance <= 214){
distance = 102;
} else if (distance <= 216){
distance = 103;
} else if (distance <= 218){
distance = 104;
} else if (distance <= 220){
distance = 105;
} else if (distance <= 222){
distance = 106;
} else if (distance <= 224){
distance = 107;
} else if (distance <= 226){
distance = 108;
} else if (distance <= 228){
distance = 109;
} else if (distance <= 230){
distance = 110;
} else if (distance <= 232){
distance = 111;
} else if (distance <= 234){
distance = 112;
} else if (distance <= 236){
distance = 113;
} else if (distance <= 238){
distance = 114;
} else if (distance <= 240){
distance = 115;
} else if (distance <= 242){
distance = 116;
} else if (distance <= 244){
distance = 117;
} else if (distance <= 246){
distance = 118;
} else if (distance <= 248){
distance = 119;
} else if (distance <= 250){
distance = 120;
} else if (distance <= 252){
distance = 121;
} else if (distance <= 254){
distance = 122;
} else if (distance <= 256){
distance = 123;
} else if (distance <= 258){
distance = 124;
} else if (distance <= 260){
distance = 125;
} else if (distance <= 262){
distance = 126;
} else if (distance <= 264){
distance = 127;
} else if (distance <= 266){
distance = 128;
} else if (distance <= 268){
distance = 129;
} else if (distance <= 500){
distance = 130;
}

// } //end of for loop

old_distance = new_distance;

} else { //smooth change in data
distance = new_distance;
old_distance = new_distance;
if (distance <= 12) {
distance = 1;
} else if (distance <= 14){
distance = 2;
} else if (distance <= 16){
distance = 3;
} else if (distance <= 18 ){
distance = 4;
} else if (distance <= 20 ){
distance = 5;
} else if (distance <= 22 ){
distance = 6;
} else if (distance <= 24){
distance = 7;
} else if (distance <= 26){
distance = 8;
} else if (distance <= 28){
distance = 9;
} else if (distance <= 30){
distance = 10;
} else if (distance <= 32){
distance = 11;
} else if (distance <= 34){
distance = 12;
} else if (distance <= 36){
distance = 13;
} else if (distance <= 38 ){
distance = 14;
} else if (distance <= 40){
distance = 15;
} else if (distance <= 42){
distance = 16;
} else if (distance <= 44){
distance = 17;
} else if (distance <= 46){
distance = 18;
} else if (distance <= 48){
distance = 19;
} else if (distance <= 50){
distance = 20;
} else if (distance <= 52){
distance = 21;
} else if (distance <= 54 ){
distance = 22;
} else if (distance <= 56){
distance = 23;
} else if (distance <= 58){
distance = 24;
} else if (distance <= 60){
distance = 25;
} else if (distance <= 62){
distance = 26;
} else if (distance <= 64){
distance = 27;
} else if (distance <= 66){
distance = 28;
} else if (distance <= 68){
distance = 29;
} else if (distance <= 70 ){
distance = 30;
} else if (distance <= 72){
distance = 31;
} else if (distance <= 74){
distance = 32;
} else if (distance <= 76){
distance = 33;
} else if (distance <= 78){
distance = 34;
} else if (distance <= 80){
distance = 35;
} else if (distance <= 82){
distance = 36;
} else if (distance <= 84){
distance = 37;
} else if (distance <= 86 ){
distance = 38;
} else if (distance <= 88){
distance = 39;
} else if (distance <= 90){
distance = 40;
} else if (distance <= 92){
distance = 41;
} else if (distance <= 94){
distance = 42;
} else if (distance <= 96){
distance = 43;
} else if (distance <= 98){
distance = 44;
} else if (distance <= 100){
distance = 45;
} else if (distance <= 102){
distance = 46;
} else if (distance <= 104){
distance =47;
} else if (distance <= 106){
distance = 48;
} else if (distance <= 108 ){
distance = 49;
} else if (distance <= 110){
distance = 50;
}else if (distance <= 112){
distance = 51;
}else if (distance <= 114){
distance = 52;
}else if (distance <= 116){
distance = 53;
}else if (distance <= 118){
distance = 54;
}else if (distance <= 120 ){
distance = 55;
} else if (distance <= 122 ){
distance = 56;
} else if (distance <= 124){
distance = 57;
} else if (distance <= 126){
distance = 58;
} else if (distance <= 128){
distance = 59;
} else if (distance <= 130){
distance = 60;
} else if (distance <= 132){
distance = 61;
} else if (distance <= 134){
distance = 62;
} else if (distance <= 136){
distance = 63;
} else if (distance <= 138 ){
distance = 64;
} else if (distance <= 140){
distance = 65;
} else if (distance <= 142){
distance = 66;
} else if (distance <= 144){
distance = 67;
} else if (distance <= 146){
distance = 68;
} else if (distance <= 148){
distance = 69;
} else if (distance <= 150){
distance = 70;
} else if (distance <= 152){
distance = 71;
} else if (distance <= 154 ){
distance = 72;
} else if (distance <= 156){
distance = 73;
} else if (distance <= 158){
distance = 74;
} else if (distance <= 160){
distance = 75;
} else if (distance <= 162){
distance = 76;
} else if (distance <= 164){
distance = 77;
} else if (distance <= 166){
distance = 78;
} else if (distance <= 168){
distance = 79;
} else if (distance <= 170 ){
distance = 80;
} else if (distance <= 172){
distance = 81;
} else if (distance <= 174){
distance = 82;
} else if (distance <= 176){
distance = 83;
} else if (distance <= 178){
distance = 84;
} else if (distance <= 180){
distance = 85;
} else if (distance <= 182){
distance = 86;
} else if (distance <= 184){
distance = 87;
} else if (distance <= 186 ){
distance = 88;
} else if (distance <= 188){
distance = 89;
} else if (distance <= 190){
distance = 90;
} else if (distance <= 192){
distance = 91;
} else if (distance <= 194){
distance = 92;
} else if (distance <= 196){
distance = 93;
} else if (distance <= 198){
distance = 94;
} else if (distance <= 200){
distance = 95;
} else if (distance <= 202){
distance = 96;
} else if (distance <= 204){
distance = 97;
} else if (distance <= 206){
distance = 98;
} else if (distance <= 208){
distance = 99;
} else if (distance <= 210){
distance = 100;
} else if (distance <= 212){
distance = 101;
} else if (distance <= 214){
distance = 102;
} else if (distance <= 216){
distance = 103;
} else if (distance <= 218){
distance = 104;
} else if (distance <= 220){
distance = 105;
} else if (distance <= 222){
distance = 106;
} else if (distance <= 224){
distance = 107;
} else if (distance <= 226){
distance = 108;
} else if (distance <= 228){
distance = 109;
} else if (distance <= 230){
distance = 110;
} else if (distance <= 232){
distance = 111;
} else if (distance <= 234){
distance = 112;
} else if (distance <= 236){
distance = 113;
} else if (distance <= 238){
distance = 114;
} else if (distance <= 240){
distance = 115;
} else if (distance <= 242){
distance = 116;
} else if (distance <= 244){
distance = 117;
} else if (distance <= 246){
distance = 118;
} else if (distance <= 248){
distance = 119;
} else if (distance <= 250){
distance = 120;
} else if (distance <= 252){
distance = 121;
} else if (distance <= 254){
distance = 122;
} else if (distance <= 256){
distance = 123;
} else if (distance <= 258){
distance = 124;
} else if (distance <= 260){
distance = 125;
} else if (distance <= 262){
distance = 126;
} else if (distance <= 264){
distance = 127;
} else if (distance <= 266){
distance = 128;
} else if (distance <= 268){
distance = 129;
} else if (distance <= 500){
distance = 130;
}

} //end of else

sensor_values[0] = distance;
sensor_values[1] = (cnt)%10;
sensor_values[2] = (cnt)%100;
delay(20);
write_status = radio.write( &sensor_values[0], sizeof(int)* ar_size);
printf(“SENSOR VAL %d %d %d \n”, sensor_values[0], sensor_values[1], sensor_values[2]);
if( ! write_status)
{
Serial.println(“ERROR WRITE”);
}

radio.startListening();// Wait here until we get a response, or timeout (250ms)
unsigned long started_waiting_at = millis();
bool timeout = false;
while ( ! radio.available() && ! timeout )
if (millis() – started_waiting_at > 200 )
timeout = true;

brightness = distance * 2;
if (brightness > 255){
brightness = 255;
}
brightness = 255 – brightness;

// set the brightness of pin 8:
analogWrite(led, brightness);

}

if(role == RECEIVER)
{
if(radio.available())
{
read_status = false;
while(!read_status)
{
read_status = radio.read(&recv_values[0], sizeof(int) * ar_size );
delay(100);
}
//printf(“RECEIVED %d %d %d\n”, recv_values[0], recv_values[1], recv_values[2]);
radio.stopListening();
//radio.write( &recv_values[0], sizeof(int)*ar_size );

//Serial.println(recv_values[0]);
Serial.print(recv_values[0], DEC);
Serial.print(” “);
Serial.print(recv_values[1], DEC);
Serial.print(” “);
Serial.print(recv_values[2], DEC);
Serial.print(” “);
Serial.println(“\r”);
radio.startListening();
}
}
}

 

Besides the implementation of wireless transmission, the code contains the control of LED lights in response to the proximity with objects in the environment.

 

Final Project: Project Update #2

Last week I researched on the various electronic components that might be needed for the costume and tested some basic functional circuits off the fabrics( as things will get a tad complicated after the electronics are sewed onto the fabrics). Based on the concept of my costume, which is to explore the relationship between live music improvisation and dance choreography/freestyle, I explored:

  • Light-sensitive LED circuit (as the decoration on the costume as well as an indication of its interactivity with the environment)
  • Circuit with a buzzer as the output (which can generate sounds of different pitches)
  • Wireless transmission of data to the laptop using bluetooth (which is critical in the process of creating sounds from movements)
  • Motion-sensitive circuit with LED and buzzer (as a simulation of the functionality of the costume)

victorian_era_inverness_capeI mainly worked on the artistic aspect of the costume design in the week followed. I was inspired by the Victorian Era men’s fashion. Most often associated with Sherlock Holmes, the inverness cape is a weatherproof outer coat which was often worn in 1880s London. The inverness cape is a sleeveless outer garment, which was typically worn in 2 styles: a more formal version where the topcoat is finished with short lapels and the capes are set back behind them, as well as a less formal “coachman’s cape” which had no lapels.

I decided to go with the less formal “coachman’s cape” as the lapels might hinder head movements and it would be easier for me as an inexperienced fashion designer to start with.

 

 

IMG_8773

 

 

I found this black velvet material in one of the clothing outlet in Chinatown.

 

 

 

IMG_8605

 

I showed Galina the design and she taught
me the sewing basics including how to use the sewing machine to make different stitches.

 

 

 

IMG_8604

 

I finished the rest of the sewing on my own. It was a fulfilling learning experience.

 

 

 

 

This is the completed costume!

unspecified

 

Final Project: Project Update #1

Materials – Electronics

Main Board:

IMG_7564
LilyPad Arduino 328 Main Board with FTDI Basic Breakout

Power Supply:

  • CR2032 Lithium Cell Battery – 3 V
  • Polymer Lithium Ion Batteries – 2000mAh 3.7V
IMG_7567
CR2032 Lithium Cell Battery and battery holders
IMG_7579
Polymer Lithium Ion Batteries With JST Connector

 

Sensors:

IMG_7569
Light Sensor
  • Light sensor: This is a simple to use light sensor that outputs an analog value from 0 to 5V. With exposure to daylight, this sensor will output 5V. Covering the sensor with your hand, the sensor will output 0V. In a normal indoor lighting situation, the sensor will output from 1 to 2V.
IMG_7580
Accelerometers

Accelerometer: The LilyPad Accelerometer can detect joint movement as well as inclination and vibration. The ADXL335 outputs a 0V to 3V analog signal on each of the X, Y, and Z axis. We will need to convert this analog voltage to a gravity amount and use trigonometry to calculate a true ‘angle’. If we are not looking for tilt, it is very easy to use this sensor for basic motion sensing.

Outputs:

  • LED – Blue, pink, yellow and white.
  • Tri-Color LED: Use the Tri-Color LED board as a simple indicator, or by pulsing the red, green, and blue channels, we can create any color.
  • Buzzer
IMG_7566
LED (Blue, Yellow, Pink and White)

 

 

IMG_7577
Tri-Color LED
IMG_7575
Buzzer

Switches, Buttons and Protoboard

IMG_7570

 

Wireless Communication

  • Bluetooth Mate Gold

IMG_7571

 

Breadboard

IMG_7573

Conductive Thread and Needle Set
IMG_7576

 

Functionalities:

Light Sensor

The LED is turned off when it’s bright and turned on when it’s dark. I used conductive thread as connections and it worked pretty well. Then I used a small cell battery as the power supply.

 

Buzzer:

I used the buzzer to play different tones. (Basically just change the vibration frequency of the buzzer.)

 

Bluetooth:

I tested the connection of Bluetooth Mate to my Mac. It took quite a while to connect to my Mac and the connection seemed unstable.

I managed to connect the device and send data (8888888….) to my laptop as you can see from the serial monitor. However, the connection always failed after a short period of time. I am still figuring out why.

 

Accelerometer: Motion Detection

One input: accelerometer.

One output: Buzzer

I used an accelerometer to detect my wrist movements along x, y and z-axis. Any acceleration along these axes will trigger the buzzer.

In the second video:

One input: Accelerometer

Two outputs: Buzzer and Tri-color LED

I also increase the threshold to change the sensitivity of the accelerometer. So if the movement is not big enough, it won’t be detected as you can see in the video. However, there are still some delays. And the sounds generated are quite random and inharmonious.

 

That’s the progress I have made during the past week. It’s mostly electronics. However, I also went to the studio and found Galina to learn about the sewing machine and how to fuse platics for the costume design. I will focus more on the costume design in the coming week.