panel1

Project Description:

A central panel is suspended from the ceiling grid.  The panel is painted black representing the night sky.  Holes punched through the board contain LEDs displaying several different constellation patterns and random stars.

Four motion sensors are inserted into separate black boxes.  Each box is centered on one wall of the room.  As one walks past a motion sensor, there presence will activate the constellation pattern and random stars at that side of the room.   The closer one gets to the sensor, the brighter the constellation patterns will get.  When the other motion sensors detect activity, they will display other constellation patterns on the ceiling panel corresponding to that specific side of the room.  The farther away from the sensors, the dimmer the ceiling panel LEDs become.

MediaStoryboard

Tools:

22 gauge solid core wire (approximately 600 ft), 100 LEDs (we used Christmas lights), 100 –  100 ohm resistors , Wire strippers, Soldering pencil, Solder, Flux, Two ¼” MDF 4’x8’ Panels, One 2”x4” Stud, Pneumatic nailer, Drill and bits, 3/8” threaded rod and nuts, Black spray paint (gloss)

 

Step 1:

Disassemble the LEDs from a strand of Christmas lights, cut equal lengths of wire (6” and 4”), solder the resistors to the voltage side of the LED and to the 4” wire, solder the 6” wire to the ground of the LED

step 1

 Step 2:

Laser cut and assemble acrylic boxes with openings to fit the dimensions of the long distance IR sensors. These sensors get three 25’ cables attached to reach the perimeter of the room up to the ceiling panel. Shorter wires can be placed by wire nuts to allow for other groups ease of attachment to their assembled projects. (Spray painting the sand blasted boxes was a cosmetic choice)

 plex

 Step 3:

Assembling the multiplexer trees. The assembly of these multiplexers off one another should allow each panel to house up to 42 individually signaled LEDs far more than what the arduino can house on its digital pins. This is done through signals of high and low which control a certain pin through their combanation, images of this truth table are mapped out below. Unfortunatly these “trees” were broadcasting duplicated signals resulting in undesired lights to flicker on. The use of two multiplexers was used in the final product.

branching_multiplexers

multiplexer

MULTIPLEXERCHAIN.xls

Step 4:

Fabrication:

The ceiling panel is constructed of 2 1/4″ thick MDF panels cut in 30” x 60” sections.  Small holes are drilled through the boards to stick the LED heads through.  The holes are arranged in a night sky star pattern using constellations and random stars for a layout.  The Ardunio board and multiplexers are mounted to the top of the ceiling panel with all wiring connections including the wiring from the four motion sensors and dance shoe.  LEDs were grouped with a common ground (indicated by red wire) and constellations were individually wire to be controlled seperately. The other remaining leds were coupled to save space on the mutiplexer. The ceiling panels were secured together on site to create a 60” x 60” large panel.  Ceiling mounts connected to the top of the panel consist of 2×4 wood pieces with holes drilled through.  A bolted threaded rod hangs over the ceiling grid at the top of the drilled 2×4 suspending the panel from the ceiling. 

circuit

wireing

attaching

 

Step 5:

Secondary Input:

The XBeeautiful Dancing project (creators Nellie Niespodzinski and Aaron Tarnowski) gives input data to the ceiling panel.  The dancing shoe contains a pressure sensor on the bottom sole.  Each time the shoe hits the floor, the tap is detected and starts a count.  After a certain number of hits, the dress lights up a series of LEDs.  At the same time, the ceiling panel will display a constellation pattern at the brightest lighting capacity.  A few more steps of the dance will then activate another set of lights on the dress and will switch to a different constellation displayed on the ceiling panel.  This pattern of lights displayed on the dress and bright constellation patterns will continue until the dance is finished. 

 media-robotics-final-3

CLICK THE IMAGE BELOW TO SEE HOW THE DANCE EFFECTS OUR PANEL constellations used Ursa Minor, Ursa Major, Draco, Hercules, Cygnus, Cassiopeia, Camelopardalis 

 to-make-gif

 

arduino_ideBelow is the script writen for arduino in C for our project

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/*

Media Robotics I

Professor: Mark Shepard

TA: Trinadh Pydipally

Date: December 16, 2009

 

Team Members:

Nick Capozzoli, Jodi Pfister, Brian Podleski

Project Description:

- 4 motion sensors on mounted on the wall, 1 ceiling panel mounted to ceiling grid with embedded LEDs

LEDs to map the movement around the room through patterning dimming when farther away from a Motion Sensor

and brightening when closer to a Motion Sensor

- Constellation light up when Dance Shoe Sensor reaches a certain number of counts for steps and alternates

different constellations to coordinate with dress LEDs

*/

 

// Material components needed for project:

// (1) arduino USB board, (1) USB cable, 100ohm resistors, LEDs (used LEDs off of christmas light strand), 22 gauge wire,

// (4) infrared proximity sensor long range – sharp GP2Y0A02YK0F, (2) 16-channel analog/digital mulitplexer/demultiplexer CD74HC4067,

// black spray painted acrylic sheets to form (4) box(es) housing motion sensors, (1) sheet panel for ceiling spray painted black

 

// Multiplexer truth table for transfer of data from S pins to C pins available at http://focus.ti.com/lit/ds/symlink/cd74hc4067.pdf

 

/*

To set up Multiplexer 1 pins:

 Put SIG pin into digital out pin 1

 Put EN pin with 100ohm resitor into GROUND

 Put VCC pin into 5V

 Put GND pin into GROUND

*/

 

/*

To set up Multiplexer 2 pins:

 Put SIG pin into digital out pin 1

 Put EN pin with 100ohm resitor into GROUND

 Put VCC pin into 5V

 Put GND pin into GROUND

*/

 

 

 

 

// Multiplexer 1

byte m1SIG = 1;

byte m1S0 = 3;  // put S0 pin into digital out pin 2 for multiplexer 1

byte m1S1 = 5;  // put S1 pin into digital out pin 3 for multiplexer 1

byte m1S2 = 6;  // put S2 pin into digital out pin 4 for multiplexer 1

byte m1S3 = 7;  // put S3 pin into digital out pin 5 for multiplexer 1

 

// Multiplexer 2

byte m2SIG = 1;

byte m2S0 = 8;  // put S0 pin into digital out pin 2 for multiplexer 2

byte m2S1 = 9;  // put S1 pin into digital out pin 3 for multiplexer 2

byte m2S2 = 10; // put S2 pin into digital out pin 4 for multiplexer 2

byte m2S3 = 11;  // put S3 pin into digital out pin 5 for multiplexer 2

 

// Motion Sensor values for analog output displayed in LEDs

int outputValue0 = 0;

int outputValue1 = 0;

int outputValue2 = 0;

int outputValue3 = 0;

int sensorValue0 = 0;

int sensorValue1 = 0;

int sensorValue2 = 0;

int sensorValue3 = 0;

 

// Input data from Dance Shoe Sensor

int x = 0;

boolean tempstate;

boolean currstate;

int pulsePin = 12; // Set pin data into digital output pin 12

 

 

 

 

void setup() {

 pinMode(m1S0, OUTPUT); // Sets the digital pin as output for Multiplexer 1

 pinMode(m1S1, OUTPUT); // Sets the digital pin as output for Multiplexer 1

 pinMode(m1S2, OUTPUT); // Sets the digital pin as output for Multiplexer 1

 pinMode(m1S3, OUTPUT); // Sets the digital pin as output for Multiplexer 1

 pinMode(m2S0, OUTPUT); // Sets the digital pin as output for Multiplexer 2

 pinMode(m2S1, OUTPUT); // Sets the digital pin as output for Multiplexer 2

 pinMode(m2S2, OUTPUT); // Sets the digital pin as output for Multiplexer 2

 pinMode(m2S3, OUTPUT); // Sets the digital pin as output for Multiplexer 2

 Serial.begin(9600);

 

 ///////////////////////////////////////////////

 // Input data from Dance Shoe Sensor

 pinMode(pulsePin, INPUT);

 tempstate = digitalRead(pulsePin);

 Serial.begin(9600);

}

 

 

 

 

void loop() {

 allOff;  // Turns off all LEDs on Multiplexer

 sensorValue0 = analogRead(0) + 400;  // Reads input from IR Motion Sensor 0

 sensorValue1 = analogRead(1) + 400;  // Reads input from IR Motion Sensor 1

 sensorValue2 = analogRead(2) + 400;  // Reads input from IR Motion Sensor 2

 sensorValue3 = analogRead(3) + 400;  // Reads input from IR Motion Sensor 3

 

 outputValue0 = map(sensorValue0, 0, 1023, 0, 255);  // Maps data from analog input to analog output for Motion Sensor 0

 outputValue1 = map(sensorValue1, 0, 1023, 0, 255);  // Maps data from analog input to analog output for Motion Sensor 1

 outputValue2 = map(sensorValue2, 0, 1023, 0, 255);  // Maps data from analog input to analog output for Motion Sensor 2

 outputValue3 = map(sensorValue3, 0, 1023, 0, 255);  // Maps data from analog input to analog output for Motion Sensor 3

 

 ///////////////////////////////////////////////

 // Maps Motion Sensors to operate the LEDs in analog values on the ceiling panel

 if (outputValue0 > 50) {

  m1C1();

  m1C4();

  m1C10();

  m1C11();

  m1C12();

 }

 if (outputValue1 > 50) {

  m1C8();

  m2C6();

  m1C13();

  m1C14();

  m2C1();

  m2C2();

 }

 if (outputValue2 > 50) {

  m2C11();

  m2C3();

  m2C4();

  m2C5();

  m2C6();

 }

 if (outputValue3 > 50) {

  m1C2();

  m2C12();

  m2C7();

  m2C8();

  m2C9();

  m2C10();

 }

 

 ///////////////////////////////////////////////

 // Input data from Dance Shoe Sensor to count and operate constellation switches

 currstate = digitalRead(pulsePin);

 if (currstate != tempstate)  {

   if ((tempstate-currstate)<0)  {

         x = x+1;

         }

       tempstate = currstate;

       }

 

 if (x < 15) {

   outputValue0 = 255;

   m1C1();

 }

 if (15 < x < 30) {

   outputValue0 = 255;

   m1C1();

 }

 if (30 < x < 45) {

   outputValue0 = 255;

   m1C8();

 }

 if (45 < x < 60) {

   outputValue0 = 255;

   m2C12();

 }

 if (60 < x < 75) {

   outputValue0 = 255;

   m2C11();

 }

 if (75 < x < 90) {

   outputValue0 = 255;

   m1C2();

 }

 if (90 < x < 105) {

   outputValue0 = 255;

   m1C4();

 }

 if (105 < x) {

   outputValue0 = 255;

   m1C4();

 }

 

 ///////////////////////////////////////////////

 // Print values for Motion Sensors

 Serial.print(“S1 – “);

 Serial.print(sensorValue0);

 Serial.print(“/tS2 – “);

 Serial.print(sensorValue1);

 Serial.print(“/yS3 – “);

 Serial.print(sensorValue2);

 Serial.print(“/tS4 – “);

 Serial.print(sensorValue3);

 // Print calues for x count on Dance Shoe Sensor

 Serial.print(“/tx is  : “);

 Serial.print(x);

 Serial.print(“/toutputValue – “);

 Serial.println(outputValue0);

}

 

 

 

 

///////////////////////////////////////////////

// LED operation to turn off all LEDs on Multiplexer

void allOff() {

 analogWrite(m1SIG, HIGH);

 analogWrite(m1S0, LOW);

 analogWrite(m1S1, LOW);

 analogWrite(m1S2, LOW);

 analogWrite(m1S3, LOW);

 analogWrite(m2SIG, HIGH);

 analogWrite(m2S0, LOW);

 analogWrite(m2S1, LOW);

 analogWrite(m2S2, LOW);

 analogWrite(m2S3, LOW);

}

 

///////////////////////////////////////////////

// LED operation for Multiplexer 1

void m1C1() {  //Sensor0 – Draco

 analogWrite(m1SIG, LOW);

 analogWrite(m1S0, outputValue0);

 analogWrite(m1S1, LOW);

 analogWrite(m1S2, LOW);

 analogWrite(m1S3, LOW);

}

 

void m1C2() {  //Sensor3 – Ursa Major

 analogWrite(m1SIG, LOW);

 analogWrite(m1S0, LOW);

 analogWrite(m1S1, outputValue3);

 analogWrite(m1S2, LOW);

 analogWrite(m1S3, LOW);

}

 

void m1C4() {  //Sensor0 – Ursa Minor

 analogWrite(m1SIG, LOW);

 analogWrite(m1S0, LOW);

 analogWrite(m1S1, LOW);

 analogWrite(m1S2, outputValue0);

 analogWrite(m1S3, LOW);

}

 

void m1C8() {  //Sensor1 – Camelopardus

 analogWrite(m1SIG, LOW);

 analogWrite(m1S0, LOW);

 analogWrite(m1S1, LOW);

 analogWrite(m1S2, LOW);

 analogWrite(m1S3, outputValue1);

}

 

void m1C10() {  //Sensor0 – Star

 analogWrite(m1SIG, LOW);

 analogWrite(m1S0, LOW);

 analogWrite(m1S1, outputValue0);

 analogWrite(m1S2, LOW);

 analogWrite(m1S3, outputValue0);

}

 

void m1C11() {  //Sensor0 – Star

 analogWrite(m1SIG, LOW);

 analogWrite(m1S0, outputValue0);

 analogWrite(m1S1, outputValue0);

 analogWrite(m1S2, LOW);

 analogWrite(m1S3, outputValue0);

}

 

void m1C12() {  //Sensor0 – Star

 analogWrite(m1SIG, LOW);

 analogWrite(m1S0, LOW);

 analogWrite(m1S1, LOW);

 analogWrite(m1S2, outputValue0);

 analogWrite(m1S3, outputValue0);

}

 

void m1C13() {  //Sensor1 – Star

 analogWrite(m1SIG, LOW);

 analogWrite(m1S0, outputValue1);

 analogWrite(m1S1, LOW);

 analogWrite(m1S2, outputValue1);

 analogWrite(m1S3, outputValue1);

}

 

void m1C14() {  //Sensor1 – Star

 analogWrite(m1SIG, LOW);

 analogWrite(m1S0, LOW);

 analogWrite(m1S1, outputValue1);

 analogWrite(m1S2, outputValue1);

 analogWrite(m1S3, outputValue1);

}

 

///////////////////////////////////////////////

// LED operation for Multiplexer 2

void m2C1() {  //Sensor1 – Star

 analogWrite(m2SIG, LOW);

 analogWrite(m2S0, outputValue1);

 analogWrite(m2S1, LOW);

 analogWrite(m2S2, LOW);

 analogWrite(m2S3, LOW);

}

 

void m2C2() {  //Sensor1 – Star

 analogWrite(m2SIG, LOW);

 analogWrite(m2S0, LOW);

 analogWrite(m2S1, outputValue1);

 analogWrite(m2S2, LOW);

 analogWrite(m2S3, LOW);

}

 

void m2C3() {  //Sensor2 – Star

 analogWrite(m2SIG, LOW);

 analogWrite(m2S0, outputValue2);

 analogWrite(m2S1, outputValue2);

 analogWrite(m2S2, LOW);

 analogWrite(m2S3, LOW);

}

 

void m2C4() {  //Sensor2 – Star

 analogWrite(m2SIG, LOW);

 analogWrite(m2S0, LOW);

 analogWrite(m2S1, LOW);

 analogWrite(m2S2, outputValue2);

 analogWrite(m2S3, LOW);

}

 

void m2C5() {  //Sensor2 – Star

 analogWrite(m2SIG, LOW);

 analogWrite(m2S0, outputValue2);

 analogWrite(m2S1, LOW);

 analogWrite(m2S2, outputValue2);

 analogWrite(m2S3, LOW);

}

 

void m2C6() {  //Sensor2 – Star

 analogWrite(m2SIG, LOW);

 analogWrite(m2S0, LOW);

 analogWrite(m2S1, outputValue2);

 analogWrite(m2S2, outputValue2);

 analogWrite(m2S3, LOW);

}

 

void m2C7() {  //Sensor3 – Star

 analogWrite(m2SIG, LOW);

 analogWrite(m2S0, outputValue3);

 analogWrite(m2S1, outputValue3);

 analogWrite(m2S2, outputValue3);

 analogWrite(m2S3, LOW);

}

 

void m2C8() {  //Sensor3 – Star

 analogWrite(m2SIG, LOW);

 analogWrite(m2S0, LOW);

 analogWrite(m2S1, LOW);

 analogWrite(m2S2, LOW);

 analogWrite(m2S3, outputValue3);

}

 

void m2C9() {  //Sensor3 – Star

 analogWrite(m2SIG, LOW);

 analogWrite(m2S0, outputValue3);

 analogWrite(m2S1, LOW);

 analogWrite(m2S2, LOW);

 analogWrite(m2S3, outputValue3);

}

 

void m2C10() {  //Sensor3 – Star

 analogWrite(m2SIG, LOW);

 analogWrite(m2S0, LOW);

 analogWrite(m2S1, outputValue3);

 analogWrite(m2S2, LOW);

 analogWrite(m2S3, outputValue3);

}

 

void m2C11() {  //Sensor2 – Hercules

 analogWrite(m2SIG, LOW);

 analogWrite(m2S0, outputValue2);

 analogWrite(m2S1, outputValue2);

 analogWrite(m2S2, LOW);

 analogWrite(m2S3, outputValue2);

}

 

void m2C12() {  //Sensor3 – Signus

 analogWrite(m2SIG, LOW);

 analogWrite(m2S0, LOW);

 analogWrite(m2S1, LOW);

 analogWrite(m2S2, outputValue3);

 analogWrite(m2S3, outputValue3);

}


Subscribe to comments Comment | Trackback |
Post Tags:

Browse Timeline


Add a Comment


XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>