Shadow Box



“Shadow Box” is an interactive shadow puppertry box
where the interactivity is conducted by the gaze of the viewer.

In the house of nine rooms, nine incoherent scenes are taking place.
As you move on your attention, you create your own interpretation of the cinematic experience.








partner: Mark Matamoros
type: art object, interactive
date: Oct 30 2019


I. Concept Idea
We started off deciding to make a shadow puppetry box, using some sort of an interaction.


1. a simple shadow box


2. thinking about shadow and perspective


3. multi-perspective interface in the shape of house


4. shadow play and layers




II. Components


from left to right: 1. an outer box with sub led light to give an atomsphere of the house. 
2. an accelerometer and arduino uno lighting up each rooms accordingly to the direction of each cells.
3. back piece with reflective tape to concentrate light source, two power supplies.



III. Interactivity

To execute our idea to 

#include
#include

//create accelerometer oblject
Adafruit_LIS3DH accelerometer = Adafruit_LIS3DH();

//global variables for accelerometer readdings
int xRead = 0;
int yRead = 0;
int zRead = 0;

void setup() {
//set baud
Serial.begin(9600);

//check accelerometer connection
while (!Serial);
if (! accelerometer.begin(0x18))
{
Serial.println("Couldn't start accelerometer. Check wiring.");
while (true); // stop here and do nothing
}
accelerometer.setRange(LIS3DH_RANGE_8_G); // 2, 4, 8 or 16 G

//set Digital pin outs
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
}

void loop()
{
getAveragedAccel(); //grab accelerometer values and average
printValues(); //print values for monitoring
handleLights(); //trigger light activation based on accelerometer readings
}

/*************************************************************
* Function grabs accelerometer values 5 times, then averages
**************************************************************/
void getAveragedAccel()
{
//grab five values for each axis reading
for (int i = 0; i < 5; i++)
{
accelerometer.read(); //read data

//sum data per variable
xRead += accelerometer.x;
yRead += accelerometer.y;
zRead += accelerometer.z;
}

//average axis readings and set associated variable
xRead = xRead / 5;
yRead = yRead / 5;
zRead = zRead / 5;
}

/****************************************
* Function prints values for monitoring
****************************************/
void printValues()
{
Serial.print("X-Axis: ");
Serial.print(xRead);
Serial.print(",");
Serial.print(" Y-Axis: ");
Serial.print(yRead);
Serial.print(",");
Serial.print(" Z-Axis: ");
Serial.println(zRead);
delay(100);
}
/************************************************************************
* Function handles the triggering of individual LED's based
* on accelerometer readings - gridded system. killLights() function
* initially deactivates all LED's (for programming convenience)
**************************************************************************/
void handleLights()
{
//Window 1
if (xRead < -1334 && yRead < -1334)
{
killLights();
digitalWrite(4, HIGH);
}

//Window 2
if (xRead > -1334 && xRead < 1334 && yRead < -1334)
{
killLights();
digitalWrite(3,HIGH);
}

//Window 3
if (xRead > 1334 && yRead < -1334)
{
killLights();
digitalWrite(2, HIGH);
}

//Window 4
if (xRead < -1334 && yRead > -1334 && yRead < 1334)
{
killLights();
digitalWrite(7, HIGH);
}

//Window 5
if (xRead > -1334 && xRead < 1334 && yRead > -1334 && yRead < 1334)
{
killLights();
digitalWrite(6, HIGH);
}

//Window 6
if (xRead > 1334 && yRead > -1334 && yRead < 1334)
{
killLights();
digitalWrite(5, HIGH);
}

//Window 7
if (xRead < -1334 && yRead > 1334)
{
killLights();
digitalWrite(10, HIGH);
}

//Window 8
if (xRead > -1334 && xRead < 1334 && yRead > 1334)
{
killLights();
digitalWrite(9, HIGH);
}

//Window 9
if (xRead > 1334 && yRead > 1334)
{
killLights();
digitalWrite(8, HIGH);
}
}

/***********************************************************
* Function cycles through all digital pins and turns off
* LED's (sets to LOW)
***********************************************************/
void killLights()
{
//cycle through all LED's and set to LOW
for (int i = 2; i < 11; i++)
{
digitalWrite(i, LOW);
delay(2);
}
}

IV.


© ymchoi 2019