PROTOTYPING

Digital Model - Attuner and Depositor on the geomorphology table

Systems Diagram - Feedback Loop of the sensing and actuation machines (Attuner; and Section Cutter-an iteration of Depositor)

extracted real-time contoured surfaces

Contoured surface from a live-digital scan

scanned_surface By Leif Es Modelo »

ROBOTIC STUDY #1

Depositor conceptual and algorithmic logic

An Independent Study by Leif Estrada, registered as ADV-9201-04 for the Fall 2015 term at the Harvard Graduate School of Design. Under the advisement of Bradley Cantrell | MLA Program Director + Associate Professor in Landscape Architectural Technology, Harvard University - Graduate School of Design, with the additional support of Justine Holzman | Adjunct Assistant Professor, University of Tennessee - Knoxville. A probe in relation to my graduate thesis in the MLA program at Harvard University-Graduate School of Design -- Rejection of the dichotomous image created by ‘the manmade’ and ‘the idealized’ untouched image of Nature was brought on by technological advancements humans developed for modifying all known Natures. Such production brings upon an anxiety as to what was once natural. Through our ability to create and conceptualize hybrids of biotic and abiotic systems, we have also facilitated the evolution and image of novel ecologies. Furthermore, design is consistently introduced to “tame” newly-ostracized biologic systems to human will. To legitimize uncanny creations, humans find and extract any economic and practical capacities. However, despite levels of human control, there is always a moment in which a system will fail. Today’s systemic failures, re-situate novel ecologies in the contemporary realm of “uncontrolled environments.” Can responsive systems learn from the living landscapes? Can sentient machines mitigate foreseeable systemic failures, as well as facilitate the emergence of novel ecologies? This thesis incorporates the design of a machine that will learn from initial site conditions, but also from modifications it will produce independently. The landscape machine will eventually become sentient, freeing itself from man’s control. Autonomously, it will act as a non-subjective author—constantly altering and modifying landscapes, privileging the evolution of ecology over static constructions. Future landscape designers will be creators of autonomous, human-value reinforcing machine because, as individuals, we have lost touch with our ability to negotiate the complexities of our relationships with non-human actors throughout all of earth’s landscapes. A shift in what has become the accepted norm concerning ecology is necessarily upon us.

ROBOTIC STUDY #2

PROCESS

The following are images and videos showing the process of designing, building, and testing of the robotic device:

Sketch: Initial prototyping sketch

Sketch: Initial prototyping sketch

Attuner, rendered digital model

Early Stages: Building and assembling the rows of robotic piles

Early Stages: Building and assembling the rows of robotic piles

333: 3 power supplies: 5V @ 5 Amps, powering the 3 Arduino Uno Processing Boards with 3 Adafruit 16-Channel 12-bit PWM/Servo Shield - I2C interface

333: 3 power supplies: 5V @ 5 Amps, powering the 3 Arduino Uno Processing Boards with 3 Adafruit 16-Channel 12-bit PWM/Servo Shield - I2C interface

Early Sketch Model Test
Thesis LiveModel test

 

Below is the code used for the actuation of the live model, Attuner.  It is a modified version provided by Adafruit. Original code written by Limor Fried/Ladyada for Adafruit Industries; altered and modified specifically for the project by Leif Estrada:  

Download .ino code

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>


#define SERVOMIN  150 // this is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX  510 // this is the 'maximum' pulse length count (out of 4096)


uint8_t servomax = 14;

void setup() {
  Serial.begin(9600);
  Serial.println("16 channel Servo test!");

  pwm.begin();
  
  pwm.setPWMFreq(60);  // Analog servos run at ~60 Hz updates

  yield();
}

// you can use this function if you'd like to set the pulse length in seconds
// e.g. setServoPulse(0, 0.001) is a ~1 millisecond pulse width. its not precise!
void setServoPulse(uint8_t n, double pulse) {
  double pulselength;
  
  pulselength = 1000000;   // 1,000,000 us per second
  pulselength /= 60;   // 60 Hz
  Serial.print(pulselength); Serial.println(" us per period"); 
  pulselength /= 4096;  // 12 bits of resolution
  Serial.print(pulselength); Serial.println(" us per bit"); 
  pulse *= 1000;
  pulse /= pulselength;
  Serial.println(pulse);
  pwm.setPWM(n, 0, pulse);
}

void loop() {
  // Drive each servo one at a time
  for (int servonum = 0; servonum < servomax; ++servonum) {
    for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen+= 2) {
      pwm.setPWM(servonum, 0, pulselen);
    }
    Serial.println("moved motor" + servonum);
    delay(1);
  }

  delay(45000);
  for (int servonum = 0; servonum < servomax; ++servonum) {
    for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen-= 2) {
      pwm.setPWM(servonum, 0, pulselen);
    }
    delay(1);
  }

  delay(500);

//  servonum ++;
//  if (servonum > 7) servonum = 0;
}

--

Previous: Proliferation Analyses  |  Next: Experimentation