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); }