how to make (almost) anything



Final Project_ Mirror


-Digital Modeling: GenerativeComponents parametric modeling combined with after free form modeling in MAYA

-Machining: cnc milling, shopbot: two different types of foam with different densities

-Casting: smooth on plastic cast 45D, skin dragon, drystone

-Electronics: light sensor board, programmed from arduino

-Programming interface: Processing reading serial data from light sensor to modificate the visual data from an external webcam

Initial studies, mirror have been always a mistic artefact where the ornament reflected cultural differences and believes. This project is a research on new computational design modeling techniques that are looking for a signifier and a unique expression.

Mirrors, a collection of mirrors that were picked due the beauty and specificity of the aesthetic language that is reflected on each one, these images are shown in order starting from Greace, Rome, Bizantine, Renaissance, Baroque, Gothic, Art Nouveau, Salvador Dali and Gaudi.

The mirror is, after all, a utopia, since it is a placeless place. In the mirror, I see myself there where I am not, in an unreal, virtual space that opens up behind the surface...

Michel Foucault. Of Other Spaces (1967), Heterotopias.

computational design studies

parametric modeling within generativecomponents, these experiments tried to go beyond parametrics on the search for a unique and contemporary language.

this workflow allows the designer to control the subdivision on the surface and looks for principles of differentiation, symmetry and ambiguity.

first model

final model

machining, shopbot: two different foam densities

first test, casting smooth cast 45d (measuring the volume using water first & don't forget to use mold release)

second cast of smoth on 45d on high density foam (use easy mold release!)

second moldusing dragon skin to reproduce mold using multiple materials

drystone casting

final models

processing code / external webcam / read serial from reflect sensor / change


hello.reflect.45 / board / components / machining modela / soldering / programming within arduino /



Processing code

* Brightness Thresholding
* by Golan Levin.
* Determines whether a test location (such as the cursor) is contained within
* the silhouette of a dark object.

import processing.serial.*;

Serial port_;
int lastValue_ = 0;
int amountOfLight_ = 0; // ranges from 0 (total dark) to 1023 (very, very bright)
int MAX_VALUE = 1023;

color black = color(0);
color white = color(255);
int numPixels;
Capture video;

void setup() {
size(640, 480, P2D); // Change size to 320 x 240 if too slow at 640 x 480
// Uses the default video input, see the reference if this causes an error
String[] devices = Capture.list();
for (int i=0; i < devices.length; ++i) {
video = new Capture(this, width, height, "VF0700 Live! Cam Chat HD");
numPixels = video.width * video.height;

String portName = Serial.list()[0]; // make sure this is the right port
port_ = new Serial(this, portName, 9600);


void serialEvent(Serial port) {
String val = null;
if (port.available() > 0) {
val = port.readStringUntil('\n');
if (val != null) {
val = trim(val);
lastValue_ = int(val);
amountOfLight_ = MAX_VALUE - lastValue_;
void draw() {
if (video.available()) {;
int threshold = 127; // Set the threshold value
float pixelBrightness; // Declare variable to store a pixel's color
// Turn each pixel in the video frame black or white depending on its brightness
for (int i = 0; i < numPixels; i++) {
pixelBrightness = brightness(video.pixels[i]);
if (pixelBrightness > threshold) { // If the pixel is brighter than the
pixels[i] = white-amountOfLight_*100; // threshold value, make it white
else { // Otherwise,
pixels[i] = black+amountOfLight_*10; // make it black
// Test a location to see where it is contained. Fetch the pixel at the test
// location (the cursor), and compute its brightness
int testValue = get(mouseX, mouseY);
float testBrightness = brightness(testValue);
if (testBrightness > threshold) { // If the test location is brighter than
fill(black); // the threshold set the fill to black
else { // Otherwise,
fill(white); // set the fill to white
ellipse(mouseX, mouseY, 20, 20);



systems integration