You are on page 1of 17

flex wall

arc3015 :: Studio Assignment 01


The wall is completely

composed of separat
at spring-
ate

like elements. In its initial

state, the room offers equal

possibilities for passsage.

Approaching any on
ne of the

spring elements willl cause thee

element to lower morphing

from wall to floor, solid


olid to void
d.

In real-
eal-world applications,
eal-w

hydraulic
aulics would presumably be
aulic

used for this action.

Sensors on the floor in front

and behind each spring element

react to the approach of the

user.
If entered, the spring closes
ess

behind the user and


d iis lit

from below. Each en


ntrance
ntrance

increases the light, each exit

diminishes the lightt.


As activity occurs across

the threshold, certain


ain

paths become brigh


hter,

and logically, their

brightness labels them

as “entrances” thereeby

attracting more useers.

Over time, the open


n

possibility off the blank

walllll slo
slowly drifts into

well wor
worn paths...
...only to be broken by the brave and the curious.
possible scenario A: blank slate

plan elevation
plan elevation
plan elevation
plan elevation
plan elevation
possible scenario B: aggregation

plan elevation
plan elevation
plan elevation
plan elevation
plan elevation
code: initialization & setup
//Sensor A is Connected to Analog pin 5 --> Outside Sensor
//Sensor B is Connected to Analog pin 4 --> Inside Sensor

/////////////////////////////////// Declare Universal Variables

// calibration averages
int averageA;
int averageB;

// timing elements
long a_Passed_Time;
long b_Passed_Time;
long t;

// people tracking
int just_Passed_A=-1;
int just_Passed_B=-1;
int people_Count=0;

// include Servo
#include <Servo.h>
Servo myservo; // create servo object to control a servo

///////////////////////////////////// Setup

void setup(){
Serial.begin(9600);
pinMode(6,OUTPUT);

// setup servo
myservo.attach(3);
myservo.write(170);

//Calibrate the first sensor


for(int i=0;i<10;i++) {
averageA += analogRead(5);
}
averageA/=10;
//Calibrate the second sensor
for(int i=0;i<10;i++) {
averageB+=analogRead(4);
}
averageB/=10;

Serial.println(“System Ready”); //System let us know that the calibration is done


}
code: loop

//////////////////////////////////////Begin Program // if passage is triggered and used


if (just_Passed_A==1 && just_Passed_B==1){
void loop(){ // reset just_Passed
just_Passed_A = -1;
// Read photocells just_Passed_B = -1;
int A = analogRead(5); // use time to judge direction
int B = analogRead(4); if(a_Passed_Time<b_Passed_Time) {
people_Count=people_Count+1;
// entrance photocell is triggered }
if (A < averageA /2){ if(a_Passed_Time>b_Passed_Time){
a_Passed_Time=millis(); people_Count=people_Count-1;
just_Passed_A=1; if (people_Count < 0) {
myservo.write(0); people_Count = 0;
} }
}
// exit photocell is triggered myservo.write(170); // raise wall
if (B < averageB/2 ){ analogWrite(6,people_Count*20); // adjust light level
b_Passed_Time=millis();
just_Passed_B=1; // give time to move out of the way before recalibrating
myservo.write(0); delay (1000);
}
// recalibrate as the light levels would have changed
// if passage is triggered but not used in 5 sec, close passage //Calibrate the first sensor
t = millis(); for(int i=0;i<10;i++) {
if (just_Passed_A==1 && just_Passed_B==-1 && t-a_Passed_Time averageA += analogRead(5);
>5000|| just_Passed_A==-1 && just_Passed_B==1 && t-b_Passed_ }
Time >5000){ averageA/=10;
long t = millis(); //Calibrate the second sensor
just_Passed_A = -1; for(int i=0;i<10;i++) {
just_Passed_B = -1; averageB+=analogRead(4);
myservo.write(170); }
} averageB/=10;

}
}

You might also like