interactive elevator installation
For our living architecture course, we created an interactive light installation in the elevator of Avery Hall, controllable by anyone with a cell phone and a twitter account. The simplified process includes texting an emotion to twitter from any cellular phone using the #livarch hashtag. That tweet is then picked up by a realtime search, fed through our twitterfeed rss, then added to our own twitter account. For a more detailed explanation, see this previous post on getting multiple twitter users onto one twitter feed. That emotion is then directed to our pachube feed and sent through processing to an arduino microcontroller that controls the color and pulsing of the individual leds. The installation non-invasively attaches to the surface of the elevator via magnets. Allowing it to be placed on any metal surface, such as a building exterior, furniture, or a vehicle.
The lights within the elevator respond to the mood of the user. For instance, if a student texted “happy #livarch” the space within the elevator would begin to slowly pulse with a greenish/blue hue. However, if another student sent “angry #livarch” the first light will quickly flash a bright red. There are twelve lights total and show the collective mood of the twelve most recent users.
In this way, the elevator becomes a living representation of the collective mood of the building, but it is also hoped that a feedback loop can be created, a loop that actually influences the mood of those that ride the elevator. The emotion felt in the lobby will be altered by the time you reach the sixth floor. And that new emotion becomes what gets texted back to the elevator.
Lastly, future installations will be physically located away from the target user. For instance, Avery’s mood will be projected to the elevator in Uris Hall and vice versa. In this manner, we can both create a new form of pen-pal with distant locations, but also hope that our mood, whether angry, sad, happy or nervous, will both manifest itself in a new form of architecture, but also have an effect on the greater world around us.
The project team also included Talya Jacobs and Guanghong Ou.
See more for video and code:
Super-Long Source Code:
The main thing to remember is in arduino to load the ‘standard firmata’ library and in processing to use the EEML language d.getStringValue(0); to make sure the value of stream id 0 is a word, or string, rather than a numeric value.
import processing.serial.*;
import cc.arduino.*;
import eeml.*;
Serial port; //Create object from Serial class
Arduino arduino;
String myValue;
String Led1Status;
String Led2Status;
String Led3Status;
String Led4Status;
String Led5Status;
String Led6Status;
String turnAngry = “angry”;
String turnAngryLiv = “angry_#livarch”;
String turnCalm = “calm”;
String turnCalmLiv = “calm_#livarch”;
String turnRelaxed = “relaxed”;
String turnRelaxedLiv = “relaxed_#livarch”;
String turnNervous = “nervous”;
String turnNervousLiv = “nervous_#livarch”;
String turnHappy = “happy”;
String turnHappyLiv = “happy_#livarch”;
String turnSad = “sad”;
String turnSadLiv = “sad_#livarch”;
DataIn dIn;
int value = 0;
int x = 0;
//int waitTime= 30; // 10ms delay
int Led1Red = 13;
int Led1Green = 2;
int Led1Blue = 3;
int Led2Red = 4;
int Led2Green = 5;
int Led2Blue = 6;
int Led3Red = 7;
int Led3Green = 8;
int Led3Blue = 9;
int Led4Red = 10;
int Led4Green = 11;
int Led4Blue = 12;
int Led5Red = 14;
int Led5Green = 15;
int Led5Blue = 16;
int Led6Red = 17;
int Led6Green = 18;
int Led6Blue = 19;
void setup()
{
frameRate(200);
println(Arduino.list());
arduino = new Arduino(this, Arduino.list()[0], 115200);
dIn = new DataIn(this, “http://www.pachube.com/api/1499.xml”, “fe2ac5cde083af08a353b9862a8d65b4d62caf94a40bfa5e6ea90f82f244f0ac”, 50000);
println(Serial.list());
arduino.pinMode(Led6Red, Arduino.OUTPUT);
arduino.pinMode(Led6Green, Arduino.OUTPUT);
arduino.pinMode(Led6Blue, Arduino.OUTPUT);
}
void draw(){
x += 1;
if (x>2){ //Set Time Here
x = 0;
x+= 1;
}
println(x);
if (x == 2) {
//if (Led1Status != myValue){
Led6Status = Led5Status;
Led5Status = Led4Status;
Led4Status = Led3Status;
Led3Status = Led2Status;
Led2Status = Led1Status;
Led1Status = myValue;
//}
}
println(“led2Status: ” + Led1Status);
println(“led2Status: ” + Led2Status);
println(“led3Status: ” + Led3Status);
println(“led4Status: ” + Led4Status);
println(“led5Status: ” + Led4Status);
println(“led6Status: ” + Led4Status);
//——————–IF/THEN-LED5————————————————————-
if((turnAngry.equals(Led5Status)) || (turnAngryLiv.equals(Led5Status))){
angry5();
}
else
if((turnCalm.equals(Led5Status)) || (turnCalmLiv.equals(Led5Status))){
calm5();
}
else
if((turnNervous.equals(Led5Status)) || (turnNervousLiv.equals(Led5Status))){
nervous5();
}
else
if((turnHappy.equals(Led5Status)) || (turnHappyLiv.equals(Led5Status))){
happy5();
}
else
if((turnSad.equals(Led5Status)) || (turnSadLiv.equals(Led5Status))){
sad5();
}
//——————–IF/THEN-LED4————————————————————-
if((turnAngry.equals(Led4Status)) || (turnAngryLiv.equals(Led4Status))){
angry4();
}
else
if((turnCalm.equals(Led4Status)) || (turnCalmLiv.equals(Led4Status))){
calm4();
}
else
if((turnNervous.equals(Led4Status)) || (turnNervousLiv.equals(Led4Status))){
nervous4();
}
else
if((turnHappy.equals(Led4Status)) || (turnHappyLiv.equals(Led4Status))){
happy4();
}
else
if((turnSad.equals(Led4Status)) || (turnSadLiv.equals(Led4Status))){
sad4();
}
//——————–IF/THEN-LED3————————————————————-
if((turnAngry.equals(Led3Status)) || (turnAngryLiv.equals(Led3Status))){
angry3();
}
else
if((turnCalm.equals(Led3Status)) || (turnCalmLiv.equals(Led3Status))){
calm3();
}
else
if((turnNervous.equals(Led3Status)) || (turnNervousLiv.equals(Led3Status))){
nervous3();
}
else
if((turnHappy.equals(Led3Status)) || (turnHappyLiv.equals(Led3Status))){
happy3();
}
else
if((turnSad.equals(Led3Status)) || (turnSadLiv.equals(Led3Status))){
sad3();
}
//——————–IF/THEN-LED2————————————————————-
if((turnAngry.equals(Led2Status)) || (turnAngryLiv.equals(Led2Status))){
angry2();
}
else
if((turnCalm.equals(Led2Status)) || (turnCalmLiv.equals(Led2Status))){
calm2();
}
else
if((turnNervous.equals(Led2Status)) || (turnNervousLiv.equals(Led2Status))){
nervous2();
}
else
if((turnHappy.equals(Led2Status)) || (turnHappyLiv.equals(Led2Status))){
happy2();
}
else
if((turnSad.equals(Led2Status)) || (turnSadLiv.equals(Led2Status))){
sad2();
}
//——————–IF/THEN-LED1————————————————————-
if((turnAngry.equals(Led1Status)) || (turnAngryLiv.equals(Led1Status))){
angry1();
}
else
if((turnCalm.equals(Led1Status)) || (turnCalmLiv.equals(Led1Status))){
calm1();
}
else
if((turnNervous.equals(Led1Status)) || (turnNervousLiv.equals(Led1Status))){
nervous1();
}
else
if((turnHappy.equals(Led1Status)) || (turnHappyLiv.equals(Led1Status))){
happy1();
}
else
if((turnSad.equals(Led1Status)) || (turnSadLiv.equals(Led1Status))){
sad1();
}
//——————–IF/THEN-LED6————————————————————-
if((turnAngry.equals(Led6Status)) || (turnAngryLiv.equals(Led6Status))){
angry6();
}
else
if((turnCalm.equals(Led6Status)) || (turnCalmLiv.equals(Led6Status))){
calm6();
}
else
if((turnNervous.equals(Led6Status)) || (turnNervousLiv.equals(Led6Status))){
nervous6();
}
else
if((turnHappy.equals(Led6Status)) || (turnHappyLiv.equals(Led6Status))){
happy6();
}
else
if((turnSad.equals(Led6Status)) || (turnSadLiv.equals(Led6Status))){
sad6();
}
}
//——————–CALM——–CALM————————————————————–
void calm1(){
for(value = 0; value<=255; value++){
arduino.analogWrite(Led1Blue, value);
arduino.analogWrite(Led1Green, 130);
arduino.analogWrite(Led1Red, 0);
delay(25);
}
for(value = 255; value >=0; value –)
{
arduino.analogWrite(Led1Blue, value);
arduino.analogWrite(Led1Green, 130);
arduino.analogWrite(Led1Red, 0);
delay(25);
}
}
void calm2(){
for(value = 0; value<=255; value++){
arduino.analogWrite(Led2Blue, value);
arduino.analogWrite(Led2Green, 130);
arduino.analogWrite(Led2Red, 0);
delay(25);
}
for(value = 255; value >=0; value –)
{
arduino.analogWrite(Led2Blue, value);
arduino.analogWrite(Led2Green, 130);
arduino.analogWrite(Led2Red, 0);
delay(25);
}
}
void calm3(){
for(value = 0; value<=255; value++){
arduino.analogWrite(Led3Blue, value);
arduino.analogWrite(Led3Green, 130);
arduino.analogWrite(Led3Red, 0);
delay(25);
}
for(value = 255; value >=0; value –)
{
arduino.analogWrite(Led3Blue, value);
arduino.analogWrite(Led3Green, 130);
arduino.analogWrite(Led3Red, 0);
delay(25);
}
}
void calm4(){
for(value = 0; value<=255; value++){
arduino.analogWrite(Led4Blue, value);
arduino.analogWrite(Led4Green, 130);
arduino.analogWrite(Led4Red, 0);
delay(25);
}
for(value = 255; value >=0; value –)
{
arduino.analogWrite(Led4Blue, value);
arduino.analogWrite(Led4Green, 130);
arduino.analogWrite(Led4Red, 0);
delay(25);
}
}
void calm5(){
for(value = 0; value<=255; value++){
arduino.analogWrite(Led5Blue, value);
arduino.analogWrite(Led5Green, 130);
arduino.analogWrite(Led5Red, 0);
delay(25);
}
for(value = 255; value >=0; value –)
{
arduino.analogWrite(Led5Blue, value);
arduino.analogWrite(Led5Green, 130);
arduino.analogWrite(Led5Red, 0);
delay(25);
}
}
void calm6(){
for(value = 0; value<=255; value++){
arduino.analogWrite(Led6Blue, value);
arduino.analogWrite(Led6Green, 130);
arduino.analogWrite(Led6Red, 0);
delay(25);
}
for(value = 255; value >=0; value –)
{
arduino.analogWrite(Led6Blue, value);
arduino.analogWrite(Led6Green, 130);
arduino.analogWrite(Led6Red, 0);
delay(25);
}
}
//——————–ANGRY——–ANGRY————————————————————–
void angry1(){
arduino.analogWrite(Led1Red,255);
//arduino.analgoWrite(Led1Green, 0);
arduino.analogWrite(Led1Blue, 0);
delay(10);
arduino.analogWrite(Led1Red,0);
//arduino.analgoWrite(Led1Green, 0);
arduino.analogWrite(Led1Blue, 0);
delay(10);
}
void angry2(){
arduino.analogWrite(Led2Red,255);
//arduino.analgoWrite(Led2Green, 0);
arduino.analogWrite(Led2Blue, 0);
delay(10);
arduino.analogWrite(Led2Red,0);
//arduino.analgoWrite(Led2Green, 0);
arduino.analogWrite(Led2Blue, 0);
delay(10);
}
void angry3(){
arduino.analogWrite(Led3Red,255);
//arduino.analgoWrite(Led3Green, 0);
arduino.analogWrite(Led3Blue, 0);
delay(10);
arduino.analogWrite(Led3Red,0);
//arduino.analgoWrite(Led3Green, 0);
arduino.analogWrite(Led3Blue, 0);
delay(10);
}
void angry4(){
arduino.analogWrite(Led4Red,255);
//arduino.analgoWrite(Led4Green, 0);
arduino.analogWrite(Led4Blue, 0);
delay(10);
arduino.analogWrite(Led4Red,0);
//arduino.analgoWrite(Led4Green, 0);
arduino.analogWrite(Led4Blue, 0);
delay(10);
}
void angry5(){
arduino.analogWrite(Led5Red,255);
//arduino.analgoWrite(Led5Green, 0);
arduino.analogWrite(Led5Blue, 0);
delay(10);
arduino.analogWrite(Led5Red,0);
//arduino.analgoWrite(Led5Green, 0);
arduino.analogWrite(Led5Blue, 0);
delay(10);
}
void angry6(){
arduino.analogWrite(Led6Red,255);
//arduino.analgoWrite(Led6Green, 0);
arduino.analogWrite(Led6Blue, 0);
delay(10);
arduino.analogWrite(Led6Red,0);
//arduino.analgoWrite(Led6Green, 0);
arduino.analogWrite(Led6Blue, 0);
delay(10);
}
//——————–Nervous——–Nervous————————————————————–
void nervous1(){
arduino.analogWrite(Led1Green,255);
arduino.analogWrite(Led1Red, 120);
arduino.analogWrite(Led1Blue, 0);
delay(300);
arduino.analogWrite(Led1Green,0);
arduino.analogWrite(Led1Red,120);
arduino.analogWrite(Led1Blue, 0);
delay(300);
}
void nervous2(){
arduino.analogWrite(Led2Green,255);
arduino.analogWrite(Led2Red, 120);
arduino.analogWrite(Led2Blue, 0);
delay(300);
arduino.analogWrite(Led2Green,0);
arduino.analogWrite(Led2Red,120);
arduino.analogWrite(Led2Blue, 0);
delay(300);
}
void nervous3(){
arduino.analogWrite(Led3Green,255);
arduino.analogWrite(Led3Red, 120);
arduino.analogWrite(Led3Blue, 0);
delay(300);
arduino.analogWrite(Led3Green,0);
arduino.analogWrite(Led3Red,120);
arduino.analogWrite(Led3Blue, 0);
delay(300);
}
void nervous4(){
arduino.analogWrite(Led4Green,255);
arduino.analogWrite(Led4Red, 120);
arduino.analogWrite(Led4Blue, 0);
delay(300);
arduino.analogWrite(Led4Green,0);
arduino.analogWrite(Led4Red,120);
arduino.analogWrite(Led4Blue, 0);
delay(300);
}
void nervous5(){
arduino.analogWrite(Led5Green,255);
arduino.analogWrite(Led5Red, 120);
arduino.analogWrite(Led5Blue, 0);
delay(300);
arduino.analogWrite(Led5Green,0);
arduino.analogWrite(Led5Red,120);
arduino.analogWrite(Led5Blue, 0);
delay(300);
}
void nervous6(){
arduino.analogWrite(Led6Green,255);
arduino.analogWrite(Led6Red, 120);
arduino.analogWrite(Led6Blue, 0);
delay(300);
arduino.analogWrite(Led6Green,0);
arduino.analogWrite(Led6Red,120);
arduino.analogWrite(Led6Blue, 0);
delay(300);
}
//——————–Happy——–Happy————————————————————–
void happy1(){
for(value = 0; value<=255; value++){
arduino.analogWrite(Led1Blue, value);
arduino.analogWrite(Led1Green, 255-value);
arduino.analogWrite(Led1Red, 0);
delay(25);
}
for(value = 255; value >=0; value -=15)
{
arduino.analogWrite(Led1Blue, value);
arduino.analogWrite(Led1Green, 255-value);
arduino.analogWrite(Led1Red, 0);
delay(25);
}
}
void happy2(){
for(value = 0; value<=255; value++){
arduino.analogWrite(Led2Blue, value);
arduino.analogWrite(Led2Green, 255-value);
arduino.analogWrite(Led2Red, 0);
delay(25);
}
for(value = 255; value >=0; value -=15)
{
arduino.analogWrite(Led2Blue, value);
arduino.analogWrite(Led2Green, 255-value);
arduino.analogWrite(Led2Red, 0);
delay(25);
}
}
void happy3(){
for(value = 0; value<=255; value++){
arduino.analogWrite(Led3Blue, value);
arduino.analogWrite(Led3Green, 255-value);
arduino.analogWrite(Led3Red, 0);
delay(25);
}
for(value = 255; value >=0; value -=15)
{
arduino.analogWrite(Led3Blue, value);
arduino.analogWrite(Led3Green, 255-value);
arduino.analogWrite(Led3Red, 0);
delay(25);
}
}
void happy4(){
for(value = 0; value<=255; value++){
arduino.analogWrite(Led4Blue, value);
arduino.analogWrite(Led4Green, 255-value);
arduino.analogWrite(Led4Red,0);
delay(25);
}
for(value = 255; value >=0; value -=15)
{
arduino.analogWrite(Led4Blue, value);
arduino.analogWrite(Led4Green, 255-value);
arduino.analogWrite(Led4Red, 0);
delay(25);
}
}
void happy5(){
for(value = 0; value<=255; value++){
arduino.analogWrite(Led5Blue, value);
arduino.analogWrite(Led5Green,255-value);
arduino.analogWrite(Led5Red, 0);
delay(25);
}
for(value = 255; value >=0; value -=15)
{
arduino.analogWrite(Led5Blue, value);
arduino.analogWrite(Led5Green, 255-value);
arduino.analogWrite(Led5Red, 0);
delay(25);
}
}
void happy6(){
for(value = 0; value<=255; value++){
arduino.analogWrite(Led6Blue, value);
arduino.analogWrite(Led6Green, 255-value);
arduino.analogWrite(Led6Red, 0);
delay(25);
}
for(value = 255; value >=0; value -=15)
{
arduino.analogWrite(Led6Blue, value);
arduino.analogWrite(Led6Green, 255-value);
arduino.analogWrite(Led6Red, 0);
delay(25);
}
}
//——————–Sad——–Sad————————————————————–
void sad1(){
for(value = 0; value<=255; value+=5){
arduino.analogWrite(Led1Blue, value);
arduino.analogWrite(Led1Green, 0);
arduino.analogWrite(Led1Red, 0);
delay(10);
}
for(value = 255; value >=0; value -=5)
{
arduino.analogWrite(Led1Blue, 255);
arduino.analogWrite(Led1Green, value);
arduino.analogWrite(Led1Red, 0);
delay(10);
}
for(value = 0; value<=255; value+=5){
arduino.analogWrite(Led1Blue, 255-value);
arduino.analogWrite(Led1Green, 255);
arduino.analogWrite(Led1Red, 0);
delay(10);
}
for(value = 255; value >=0; value -=5)
{
arduino.analogWrite(Led1Blue, 120);
arduino.analogWrite(Led1Green, 255-value);
arduino.analogWrite(Led1Red, 0);
delay(10);
}
}
void sad2(){
for(value = 0; value<=255; value+=5){
arduino.analogWrite(Led2Blue, value);
arduino.analogWrite(Led2Green, 0);
arduino.analogWrite(Led2Red, 0);
delay(10);
}
for(value = 255; value >=0; value -=5)
{
arduino.analogWrite(Led2Blue, 255);
arduino.analogWrite(Led2Green, value);
arduino.analogWrite(Led2Red, 0);
delay(10);
}
for(value = 0; value<=255; value+=5){
arduino.analogWrite(Led2Blue, 255-value);
arduino.analogWrite(Led2Green, 255);
arduino.analogWrite(Led2Red, 0);
delay(10);
}
for(value = 255; value >=0; value -=5)
{
arduino.analogWrite(Led2Blue, 120);
arduino.analogWrite(Led2Green, 255-value);
arduino.analogWrite(Led2Red, 0);
delay(10);
}
}
void sad3(){
for(value = 0; value<=255; value+=5){
arduino.analogWrite(Led3Blue, value);
arduino.analogWrite(Led3Green, 0);
arduino.analogWrite(Led3Red, 0);
delay(10);
}
for(value = 255; value >=0; value -=5)
{
arduino.analogWrite(Led3Blue, 255);
arduino.analogWrite(Led3Green, value);
arduino.analogWrite(Led3Red, 0);
delay(10);
}
for(value = 0; value<=255; value+=5){
arduino.analogWrite(Led3Blue, 255-value);
arduino.analogWrite(Led3Green, 255);
arduino.analogWrite(Led3Red, 0);
delay(10);
}
for(value = 255; value >=0; value -=5)
{
arduino.analogWrite(Led3Blue, 120 );
arduino.analogWrite(Led3Green, 255-value);
arduino.analogWrite(Led3Red, 0);
delay(10);
}
}
void sad4(){
for(value = 0; value<=255; value+=5){
arduino.analogWrite(Led4Blue, value);
arduino.analogWrite(Led4Green, 0);
arduino.analogWrite(Led4Red, 0);
delay(10);
}
for(value = 255; value >=0; value -=5)
{
arduino.analogWrite(Led4Blue, 255);
arduino.analogWrite(Led4Green, value);
arduino.analogWrite(Led4Red, 0);
delay(10);
}
for(value = 0; value<=255; value+=5){
arduino.analogWrite(Led4Blue, 255-value);
arduino.analogWrite(Led4Green, 255);
arduino.analogWrite(Led4Red, 0);
delay(10);
}
for(value = 255; value >=0; value -=5)
{
arduino.analogWrite(Led4Blue, 120);
arduino.analogWrite(Led4Green, 255-value);
arduino.analogWrite(Led4Red, 0);
delay(10);
}
}
void sad5(){
for(value = 0; value<=255; value+=5){
arduino.analogWrite(Led5Blue, value);
arduino.analogWrite(Led5Green, 0);
arduino.analogWrite(Led5Red, 0);
delay(10);
}
for(value = 255; value >=0; value -=5)
{
arduino.analogWrite(Led5Blue, 255);
arduino.analogWrite(Led5Green, value);
arduino.analogWrite(Led5Red, 0);
delay(10);
}
for(value = 0; value<=255; value+=5){
arduino.analogWrite(Led5Blue, 255-value);
arduino.analogWrite(Led5Green, 255);
arduino.analogWrite(Led5Red, 0);
delay(10);
}
for(value = 255; value >=0; value -=5)
{
arduino.analogWrite(Led5Blue, 120 );
arduino.analogWrite(Led5Green, 255-value);
arduino.analogWrite(Led5Red, 0);
delay(10);
}
}
void sad6(){
for(value = 0; value<=255; value+=5){
arduino.analogWrite(Led6Blue, value);
arduino.analogWrite(Led6Green, 0);
arduino.analogWrite(Led6Red, 0);
delay(10);
}
for(value = 255; value >=0; value -=5)
{
arduino.analogWrite(Led6Blue, 255);
arduino.analogWrite(Led6Green, value);
arduino.analogWrite(Led6Red, 0);
delay(10);
}
for(value = 0; value<=255; value+=5){
arduino.analogWrite(Led6Blue, 255-value);
arduino.analogWrite(Led6Green, 255);
arduino.analogWrite(Led6Red, 0);
delay(10);
}
for(value = 255; value >=0; value -=5)
{
arduino.analogWrite(Led6Blue, 120 );
arduino.analogWrite(Led6Green, 255-value);
arduino.analogWrite(Led6Red, 0);
delay(10);
}
}
void onReceiveEEML(DataIn d){
//set the value of remoteValue to equal the value of stream id 0 of the feed notated by d
String remoteValue = d.getStringValue(0);
myValue = (remoteValue);
}