DATA-DRIVEN ARCHITECTURAL PROGRAM

337984036

Untitled-1

STEP 1

join car registration information with census tract

CREATE TABLE haidong_carquantityT AS (

WITH car_quantity AS (
SELECT dmo_censustract_2010.geoid10, st_geometryn(dmo_censustract_2010.geom,1) as geom, trn_vehicleregistration.”HD01_VD01″
FROM dmo_censustract_2010
JOIN trn_vehicleregistration ON dmo_censustract_2010.geoid10::double precision = trn_vehicleregistration.”GEO.id2″
ORDER BY dmo_censustract_2010.geoid10
)

SELECT car_quantity.geoid10, st_multi(st_setsrid(car_quantity.geom,3435))::Geometry(MultiPolygon,3435) AS geom2, car_quantity.”HD01_VD01″
FROM car_quantity

);

STEP 2

estimate street parking space( I assume all streets are two-directional)

CREATE OR REPLACE VIEW haidong_streetcapacity AS (
SELECT cty_streetcenterlines.street_nam,
2*cty_streetcenterlines.length/19 as capacity,
cty_streetcenterlines.geom
FROM
cty_streetcenterlines)

STEP 3

buffer and building’s centroid

WITH center AS

( SELECT geom AS g FROM

cty_buildingoutlines

WHERE gid=51)

SELECT cty_buildingoutlines.bldg_id,

cty_buildingoutlines.shape_area, cty_buildingoutlines.stories,

cty_buildingoutlines.geom,

st_centroid(cty_buildingoutlines.geom)

AS centroid

FROM cty_buildingoutlines,center

WHERE st_within(st_centroid(cty_buildingoutlines.geom),st_buffer(center.g,500))

ORDER BY  cty_buildingoutlines.bldg_id

SELECT * FROM  centroid;

 

Interactive Environments

Part one: About last semester

Keywords of the project are: environment, biometric, wearable, etc.

Part two: What I will probably do this semester.

Interactive Environment & Space:

a

Since I have the data collected from the human body and the environment , I think it is a good time to use these data as parameters to design a space or city network. I think I won’t collect more data or validate these data, my focus will be the usage of the data. I see this semester’s project as an extension of my last semester. The first way to use the data is to create a space that is based on the real-time data. For example, I walk into a space, this space can actually change when my biometric data changes. Not like the traditional way of design, this space is actually designed by me, not the the designer. I can interact with the space, I can change the space whenever I want. No extra time, no extra cost.

Scale

This project could be as large as the city scale or can be small like a bedroom. The way I use data is different. When I want to design the city network , I have to used the history data that I collect last semester, because it is hard to change a city form rapidly. When I want to design a interior space, I think using the real-time data would be more appropriate, because the interior space can change easily by using some motors or servos.

Explain with pics and videos

3 Tools 

Grasshopper-Firefly-21-1024x733

3D modeling tool like Rhino or City Engine is essential. Rhino can actually interact with the external source of data(from database) through grasshopper, and the great thing about grasshopper is that it can control the physical environment through Firefly. Firefly is a plugin of grasshopper, it fills the void between the Rhino and Arduino. Arduino can receive data from rhino, and vise versa.  So in this project , most of the knowledge and techniques I learned in last semester can be reused and create something new.

Grasshopper-Firefly1-1024x702

Potential

There are  a lot of physical sensing device like Kinect, Wii , microphone, webcam that Firefly can directly read from. So this project could be much more interesting if these devices can get involved.

People can actually have fun with the space they created!

Responsive City TED

“We think we can develop a vehicle that operates on bike lanes, that’s accessible to elderly, disabled, women in skirts, business people, and address the issues of energy, congestion, mobility, aging, and obesity simultaneously.”
For the first time in history more people live in cities than in rural areas and the trend is accelerating worldwide. In this TEDPrize City 2.0 talk Kent Larson, director of the MIT Media Lab Changing Places’ group, tackles the problems of increased congestion and pollution with new models for urban dwellings, shared-use vehicles, and responsive environments.

Play the City

Play the City proposes using city gaming in real planning and city design procedures. Our Re-Play Noord! game was part of La Fabrique de la Cite’s Building the Shared City conference August 2012 in Amsterdam.
The legal plan of Overhoeks is slowly but decisively progressing. We ask what would be the most desirable form of an organic development around the Shell Tower and Grootlab? Do we really need 70.000 sqm of extra offices in Overhoeks as the legal plan suggests? How to organize the remaining 200.000sqm of housing job? Can small entrepreneurs be the authors of this task replacing a giant investor?

More Info:http://www.playthecity.eu/

Reinvent Payphones

Reinvent Payphones Winner: NYC I/O: The Responsive City – Best in Community Impact

Control Group and Titan partnered to create NYC I/O— the transformation of the corner payphone into a digital node that will usher in a new era of The Responsive City. By updating the payphone with a modern array of sensors and displays to create a foundational input/output system for an open, urban-scale computing platform, we can allow New York City to respond to and serve the people. Through open access to real time data and a distribution platform for community, civic, arts and comercial apps and messaging, we can create a safer, more efficient, and more enjoyable city.

NYC manages a telecommunications network of 11,412 public pay payphones throughout the five boroughs. Payphone use has decreased with mobile device adoption, but payphones still serve the communications needs of thousands of New Yorkers a day, especially in times of emergency. The City asked the tech and design community to reinvent New York City payphones to make our city more accessible, safer, healthier, and better informed.
GOALS

  • Create a full data network by using existing payphone infrastructure.
  • Make each payphone a primary input/output tool for interactive communication between the city and citizens
  • Make the software and hardware open and flexible to evolve over time to accomodate changes in technologies over time

Galvanic Skin Response Sensor

Galvanic skin response readings are simply the measurement of electrical resistance through the body. Two leads are attached to two fingertips. One lead sends current while the other measures the difference. This setup measures GSR every 50 milliseconds. Each reading is graphed, while peaks are highlighted and an average is calculated to smooth out the values. A baseline reading is taken for 10 seconds if the readings go flat (fingers removed from leads).

Arduino Code:

void setup(){
  Serial.begin(9600);
}

void loop(){
  int a=analogRead(0);
  if (Serial.available() > 0) {

    byte inbyte=Serial.read();
    if(inbyte=='a'){
      Serial.print(a,BYTE);

    }
  }
}

Processing Code:

import processing.serial.*;
Serial myPort;  

int hPosition = 1;     // the horizontal position on the graph
float currentReading;
float lastReading;
int count=0;
int zeroLinePos=0;

float gsrAverage,prevGsrAverage;
float baseLine=0;
long lastFlatLine=0;
color graphColor=color(255,255,255);
int baselineTimer=10000;
int gsrValue;
int gsrZeroCount=0;
float gsrRange=0;
int downhillCount=0;
int uphillCount=0;
boolean downhill;
boolean peaked=false;
float peak, valley;

void setup () {
  size(900, 450);
  // List all the available serial ports
  //println(Serial.list());

  myPort = new Serial(this, Serial.list()[0], 9600);
  currentReading=0;
  lastReading=0;
  gsrAverage=0;
  background(0);

  smooth();
}

void draw () {
  //best delay setting for gsr readings
  delay(50);
  //image(myMovie, 0, 0);

  if (gsrValue<15 &&gsrValue>-15){
    if( gsrZeroCount>10){
      currentReading=0;//flatline
      gsrAverage=0;
      baseLine=0;
      lastFlatLine=millis();
      gsrZeroCount=0;
      // println("reset");

    }
    gsrZeroCount++;
  }
  else{
    currentReading=gsrValue-baseLine;
    gsrZeroCount=0;
  }

  if(millis()-lastFlatLine>baselineTimer){
    baseLine=gsrAverage;
  }

  //graph colors
  if(gsrAverage>0 && gsrAverage<height/2.0*.25) graphColor=color(255,255,255);
  else if(gsrAverage>height/2.0*.25 && gsrAverage<height/2.0*.5) graphColor=color(255,250,100);
  else if(gsrAverage>height/2.0*.5 && gsrAverage<height/2.0*.75) graphColor=color(255,250,0);
  else if(gsrAverage>height/2.0*.75) graphColor=color(255,100,0);

  gsrRange=peak-valley;

  // at the edge of the screen, go back to the beginning:
  if (hPosition >= width) {
    hPosition = 0;

    //cover last drawing
    fill(0,200);
    noStroke();
    rect(0,0,width,height);
  }
  else {
    hPosition+=1;
  }

  gsrAverage=smooth(currentReading,.97,gsrAverage);

  //draw stuff

  //spike
  noStroke();
  if(gsrRange>200){
    fill(255);
    ellipse(10,10,20,20);
  }
  else{
    fill(0);
    ellipse(10,10,20,20);
  }

  //graph
  strokeWeight(.5);
  stroke(graphColor);
  line(hPosition-1, height/2.0-lastReading, hPosition, height/2.0-currentReading);
  stroke(255,0,100);
  line(hPosition-1,height/2.0-prevGsrAverage,hPosition,height/2.0-gsrAverage);

  //draw peaks
  int thres=7;

  noFill();
  stroke(255,0,0);
  strokeWeight(2);

  if (currentReading-thres>lastReading&& peaked==true){
    downhill=false;
    //println(downhillCount);
    uphillCount++;
    downhillCount=0;
    point(hPosition-1, height/2.0-lastReading);
    valley=lastReading;
    peaked=false;

  }
  if(currentReading+thres<lastReading && peaked==false){
    //println(uphillCount);
    downhill=true;
    uphillCount=0;
    downhillCount++;
    point(hPosition-1, height/2.0-lastReading);
    peak=lastReading;
    peaked=true;
  }

  prevGsrAverage=gsrAverage;
  lastReading=currentReading;
  //send 'a' for more bytes
  myPort.write('a');
}

void serialEvent (Serial myPort) {
  int inByte=myPort.read();
  //0-255
  gsrValue=inByte;
}

void keyPressed(){
  if (keyCode==DOWN)zeroLinePos+=3;
  if (keyCode==UP)zeroLinePos-=3;

  strokeWeight(1);
  stroke(255,0,0);
  line(0,zeroLinePos,2,zeroLinePos);
}

int smooth(float data, float filterVal, float smoothedVal){
  if (filterVal > 1){      // check to make sure param's are within range
    filterVal = .99;
  }
  else if (filterVal <= 0){
    filterVal = 0;
  }
  smoothedVal = (data * (1 - filterVal)) + (smoothedVal  *  filterVal);
  return (int)smoothedVal;
}



Tips: Arduino code is not supported by new version, so you have to alter the code.
      The resistor have to be around 300K, because human body's resistance is about 300K , if it is too low,
      the reading would be very low(almost zero), if it too high, the reading woud be 1023.
      The basic principle is that the analogRead is actually reading the voltage of the resistor, not the body, 
      if body resistance is much much bigger than the resistor, even if the body resistance changed , the voltage
      of the resistor will not change much(I am sure we have learned this in senior high school)