Wearable Electronics . Siggraph 2010 LED tshirts

As part of our presentation at SIGGRAPH 2010 conference in LA, we have developed this wearable electronics project with LED light assembly and programming with Arduino Lilypads.

A collaborative project among Sandro Alberti (concept, design and programming), Melinda Barnadas (development), Claudia Hill (silkscreen printing), Katie Rast and Bea Alvarez (assembly, tailoring and late night magic), the result: jaw dropping LED illuminated t-shirts for the winners of Siggraph International Resources Annual t-shirt giveaway!!!!

[nggallery id=23]

The initial LED light assembly and programming was created using Arduino Lilypads. Check out a test in this
video in Youtube

For this project, the lights were programmed in Arduino to follow a slow, subtle pattern (with slight random variations). The lights at bottom of video are in one group of 5, and then there is a light further up which stays on a bit longer (on the shirt, that light will be separate from the rest). Then, after some time, all the lights come alive as the rhythm speeds up. Then, back to a subtle pattern for a few minutes.

Arduino is a programming language with an interface that is available free (open source), here:
www.arduino.cc

Here’s the code that we’re running; feel free to paste it into your very own Arduino ‘sketch’ (‘program’) as a head-start for some cool programming:

s2010 international blinking t-shirt LEDs

Created 2 July 2010
By Sandro Alberti

int led6Neg = 1;
int led6Pos = 0;
int led5Neg = 17;
int led4Neg = 16;
int led3Neg = 15;
int led345Pos = 14;
int led12Pos = 11;
int led2Neg = 10;
int led1Neg = 9;
int x=0;
int y=0;
int looper=0;
int randNumber001=0;
int randNumber002=0;
int randNumber003=0;
int randNumber004=0;
int randomTime=3;
int randomLoop=0;

void setup()
{
pinMode(led5Neg, OUTPUT);
pinMode(led4Neg, OUTPUT);
pinMode(led3Neg, OUTPUT);
pinMode(led345Pos, OUTPUT);
pinMode(led6Pos, OUTPUT);
pinMode(led6Neg, OUTPUT);
pinMode(led12Pos, OUTPUT);
pinMode(led2Neg, OUTPUT);
pinMode(led1Neg, OUTPUT);
}

void loop()
{

led1On(); // led1 to turn on
randNumber001 = random(1, 5000);
delay(randNumber001);

led2On(); // led2 to turn on
delay(1000);

led3On(); // led3 to turn on
randNumber001 = random(0, 1000);
delay(randNumber001);

led4On(); // led4 to turn on
randNumber001 = random(0, 1000);
delay(randNumber001);

led5On(); // led5 to turn on
delay(1000);

while(looper < 3){
led6OnFast(); // led6 to turn on
delay(100);
led6OnFast(); // led6 to turn on
delay(100);
led6OnFast(); // led6 to turn on
delay(100);
led6On(); // led6 to turn on
delay(100);
looper++;
}
looper=0;

y=++x;
if (y==randomTime) {
jumpAround();
}

}

void jumpAround() {
randomLoop = random(10,50);
while(looper < randomLoop){
randNumber002 = random(0, 2);
while(randNumber002 == 0){
led1OnFast(); // led1 to turn on
led2OnFast(); // led2 to turn on
randNumber002 = random(0, 2);
}

randNumber003 = random(0, 2);
while(randNumber003 == 0){
led3OnFast(); // led3 to turn on
led4OnFast(); // led4 to turn on
led5OnFast(); // led5 to turn on
randNumber003 = random(0, 2);
}

randNumber004 = random(0, 2);
while(randNumber004 == 0){
led6OnFast(); // led6 to turn on
randNumber004 = random(0, 2);
}
looper++;
}
looper=0;
x=0;
randomTime = random(12, 60);
}

int led1On()
{
digitalWrite(led1Neg, LOW);   // sets the LED on
digitalWrite(led12Pos, HIGH);
delay(1000);                  // waits for a second
digitalWrite(led1Neg, HIGH);    // sets the LED off
digitalWrite(led12Pos, LOW);
}

int led1OnFast()
{
digitalWrite(led1Neg, LOW);   // sets the LED on
digitalWrite(led12Pos, HIGH);
delay(100);                  // waits for a second
digitalWrite(led1Neg, HIGH);    // sets the LED off
digitalWrite(led12Pos, LOW);
}

int led2On()
{
digitalWrite(led2Neg, LOW);   // sets the LED on
digitalWrite(led12Pos, HIGH);
delay(1000);                  // waits for a second
digitalWrite(led2Neg, HIGH);    // sets the LED off
digitalWrite(led12Pos, LOW);
}

int led2OnFast()
{
digitalWrite(led2Neg, LOW);   // sets the LED on
digitalWrite(led12Pos, HIGH);
delay(100);                  // waits for a second
digitalWrite(led2Neg, HIGH);    // sets the LED off
digitalWrite(led12Pos, LOW);
}

int led3On()
{
digitalWrite(led3Neg, LOW);   // sets the LED on
digitalWrite(led345Pos, HIGH);
delay(500);                  // waits for a second
digitalWrite(led3Neg, HIGH);    // sets the LED off
digitalWrite(led345Pos, LOW);
}

int led3OnFast()
{
digitalWrite(led3Neg, LOW);   // sets the LED on
digitalWrite(led345Pos, HIGH);
delay(100);                  // waits for a second
digitalWrite(led3Neg, HIGH);    // sets the LED off
digitalWrite(led345Pos, LOW);
}

int led4On()
{
digitalWrite(led4Neg, LOW);   // sets the LED on
digitalWrite(led345Pos, HIGH);
delay(500);                  // waits for a second
digitalWrite(led4Neg, HIGH);    // sets the LED off
digitalWrite(led345Pos, LOW);
}

int led4OnFast()
{
digitalWrite(led4Neg, LOW);   // sets the LED on
digitalWrite(led345Pos, HIGH);
delay(100);                  // waits for a second
digitalWrite(led4Neg, HIGH);    // sets the LED off
digitalWrite(led345Pos, LOW);
}

int led5On()
{
digitalWrite(led5Neg, LOW);   // sets the LED on
digitalWrite(led345Pos, HIGH);
delay(500);                  // waits for a second
digitalWrite(led5Neg, HIGH);    // sets the LED off
digitalWrite(led345Pos, LOW);
}

int led5OnFast()
{
digitalWrite(led5Neg, LOW);   // sets the LED on
digitalWrite(led345Pos, HIGH);
delay(100);                  // waits for a second
digitalWrite(led5Neg, HIGH);    // sets the LED off
digitalWrite(led345Pos, LOW);
}

int led6On()
{
digitalWrite(led6Neg, LOW);   // sets the LED on
digitalWrite(led6Pos, HIGH);
delay(1000);                  // waits for a second
digitalWrite(led6Neg, HIGH);    // sets the LED off
digitalWrite(led6Pos, LOW);
}

int led6OnFast()
{
digitalWrite(led6Neg, LOW);   // sets the LED on
digitalWrite(led6Pos, HIGH);
delay(100);                  // waits for a second
digitalWrite(led6Neg, HIGH);    // sets the LED off
digitalWrite(led6Pos, LOW);
}

Siggraph 2010