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