{ Brain } – beta version

6B2A0867

Brain <beta version>

Brain is an automata that shows how the brain works when you think. Composed of handmade steel wires and knotted rope as pulley system. Brain functions in two ways:

1) Conscious –> Hand cranking the steel wheel to fluctuate the shells, and also rotating the wheels on the other face of brain.

2) Subconscious –> Using ultrasonic sensor to measure the distance, part of the brain will function automatically once the user is in position / wearing the helmet.

 

Exposing yourself & Taking in the unknown

The most exciting/weird experience of this project is the moment you stick your head into it. The motor above you starts moving; the vibration and sounds of the pulley system; the view you see through the wood cubes, knotted ropes, and steel wheels. It’s the mixture feelling of exposing yourself to undergo the vulnerability, and taking in the unknown to activate all your senses in the narrow space.

 

2D/paper –> 3D/physical

Inspired by renowned kinetic sculptor Arthur Ganson, I decided to use steel wire as the means for my Automata final project. Based on the photos and videos collecting from internet, I sketched out the shape first, and then tried to figure out how to bend the steel wire into wheel.

brain_node

It’s a trial and error process, but thanks to magical Zoe Logan, I learned different pliers and jigs to make proper(at least better than free style) steel wheel. The whole journey is a little bit pain in the ass, but the result is satisfying. Beside boosting my stamina with heavy laboring, I’m glad the efforts somehow accumulating into something weird and terrifying looking.

 

I learned a lot from this transforming 2d ideas into 3d physical form process: the pros and cons of wire bending compare to the thick steel connected by welding; the limit of series connection the wheels with knotted ropes; the necessity of middleware of two big wheels to increase the tension.

 

gamma version

Multiple motors to fully construct the node system of brain on all the faces. Pill the paper off the acrylic sheets so it’d be totally transparent. Could have multiple hand crank nodes as well so it will become a cooperative “thinking” system.

brain_idea

 

Related posts

Concept Sketch, Process of Making.

 

Haunted House _{ Brothers’ Room }

poster

For the class Haunted House Final, which is a real haunted house held on the floor of ITP, Jonathan, Michelle and I created “Brothers’ Room“, depicting a tragedy happened between brothers and how the lived one is haunted by the guilt and grief.

 

Story

  • Pere and his brother died in an accident and arrived at this intermediate stage between life/death. Brother, feeling unconflicted, moved on to afterlife, but Pere stays out of guilt, because he’s responsible for his brother’s death.
  • Pere is haunted by himself.

 

Concept

  • The room is a representation of Pere’s mind.
  • Showing the loop of emotions
  • (1) sweet memory with brother
  • (2) scared of Brother’s death
  • (3) freaks out as Brother’s ghost showing up in the mirror
  • (4) guilty and asks for forgiving
  • back to (1)

 

Technique / Effects
–> Reflecting Pere’s emotions, the room reflects this with more intense light, sound, and walls shaking. At the climax, the man realizes he’s responsible for his brother’s death, the wall of the hidden room drops, and his brother appears in the 2-way mirror. The man sees him and cracks. Annnnd, start over!

  • DMX lights: controlled by Arduino, Tinker.it! DMX shield, and Max/Msp patch
  • Sounds / Music: controlled by Max/Msp patch
  • Burned scar of Brother: latex gel, tissues, and colors
  • Hidden Room Revealed: fabric and strings!

 

Script

 

Prep / Installation

 

Show Time

 

Other Scenes

 

Whole Crews :D

 

{ Brain } – process of painfully crafting your idea

SO. Here’s the report of my { brain } automata making process.

First, prototype with cardboard. Laser cut 11 pieces of pentagons, and stick them together with my favorite tool – duck tapes.
helmet

 

And endless steel wire bending.2014-11-23 22.56.04

 

Laser Cut transparent 3/16″ acrylic and build into dodecahedron  with hinges and machine screws.
2014-11-30 17.00.26

And mount the motor my pulley system!
pully_Motor

 

Things all sound easy but there are actually lot of painful struggling –>

  1. Pre drilling hole on small wood tube is hard. Crack easily.
  2. Rope has to be trimmed neatly or it will stuck with wires.
  3. Bad binding with wire and motor shaft. Asked magical Ben Light, ordered a shaft coupler to connect wire and DC motor.
  4. Have to relocation the motor. Should leave more space for the shaft side.
  5. Friction debugging nightmare…

SO. I’m really concerned about the possibility of finishing it before Final…. but whatever, I’ll keep working on it :DDDDD

 

{Rabbit_Hole}

{currently works with Chrome and Firefox browser}

For the composition assignment the final of Coding for Emotional Impact class, I want to create something with multiple layers and is self-explained. Inspired by the description of computer vision is a rabbit hole from Andy(because I’m learning Three.js by myself recently), I wanted to make a game about “Rabbit Hole”, and my biggest assumption is that everyone is sort of down the rabbit hole.

ps. It’s not really a fun game to play. Still confusing should it be fun to play or just an emotion-building nowhere…

– Title
Rabbit Hole
– Environment
environment     environment2
– Audience
Whoever also down the rabbit hole or wonder how it feel down there.
 
– Narrative arc
Rabbit HoleMetaphor for the conceptual path which is thought to lead to the true nature of reality. Infinitesimally deep and complex, venturing too far down is probably not that great of an idea.

Literary Nonsense- has no system of logic, although it may imply the existence of an inscrutable one, just beyond our grasp.

And below are three snapshots of what I’ve built so far. I made my own models in Maya and drew textures in Photoshop. Can’t view online because of some web-related issue I can’t solve to load the music(SOLVED_by hard coding the url of music file path). But have no ideas how to do the transition from scene to scene…

SCENE_ZERO: http://www.rabbithole.link/

open

SCENE_ONE: http://www.rabbithole.link/index_D.html

Screen Shot 2014-04-13 at 10.26.14 PM

SCENCE_TWO: http://www.rabbithole.link/index_G.html

Screen Shot 2014-04-13 at 10.27.30 PM

SCENE_THREE: http://www.rabbithole.link/index_S.html

Screen Shot 2014-04-20 at 6.44.00 PM

SCENE_FOUR: http://www.rabbithole.link/index_M.html

maze

SCENE_FIVE: http://www.rabbithole.link/index_T.html

TV

SCENE_SIX: http://www.rabbithole.link/index_F.html

jump

SCENE_SEVEN: http://www.rabbithole.link/index_V.html

voice

SCENE_EIGHT: http://www.rabbithole.link/index_E.html

Elevator

( Three.js + web stuff ) == super deep rabbit hole.

{Walk & Talk}

IMG_5162 copy

Walk & Talk

is the final project of me and Ziv for Spatial Media.

 

Ideas

For the final of Spatial Media, there’s no restriction on content and context, so because of the struggling process of brainstorming, we decided to make a project helping brainstorming! Getting the inspirations from Land and Sea, a game heard from Ziv from Israel, and the Boundary Functions of Scott Snibbe that exploring the relation between people and spaces, we built up a system that people can expand their territory by walking and shaking, and once people stop moving, their territories will shrink and eventually disappear. Based on several researches proved that “Body Movements Can Influence Problem Solving”(e.g. Science Daily, May 13, 2009), it has the potential to be installed in office space, and help employees brainstorming.

traditional_territory_small

 

Concept

Each person in the game is assigned an initial territory, which he can expand by walking. If they don’t walk, their territory gets smaller. Also, if they don’t talk (to brainstorm or just chit chat), their territories will shrink. This way, people have to walk and talk in order to keep his/her territory.

 

Context

This game can be used for multiple purposes, e.g. DECISION MAKING • BRAINSTORMING • VOTING ON IDEAS • BUDGET PLANNING. Overall the main function is provoking thoughts about sharing and space with movements.

 

Technique

process

Tools: OpenFrameworks, Kinect*1, projectors*2.

 

Developing

1) The first attempt to expand the territories based on the blobs movement captured by Kinect.

2) Using ofPolylines to smooth the shape of geometry.

3) Beautiful mistakes ;)

4) Final version of color-filled geometry.

Awareness

(3/25_Updated_footage version)

It’s a project of material experiment and mycelium network simulation. The ultimate goal is to pull closer humans’ relationship with fungus, increase awareness, and explore the usage of mycelium by holding workshop and gathering public source.

 

 

material experiment

In 2007, Eben Bayer and Gavin McIntyre noticed mycelium’s self-assembling glue-like character. By growing mycelium with agricultural byproducts, they discovered a biological, durable, and compostable material that performs, and they found a company called ecovatice. Their products are pressed with pressure during production, and are thick, chunky, and volumetric. Inspired by artist Eric Klarenbeek‘s 3D printed case with straw, I guessed as long as I follow the principle that “mycelium digests nutrient and water and grows harder”, the process of production can be free-formed and without boundary. So I gave it a try.

diagram

For the blender part, the ratio of mycelium+straw & water is approximately 2:1.

Hang the balls in a separated area in order to avoid be contaminated. And after 3~5 days the ball will become obvious white, showing the growing of mycelium.

After 10 days, harvest the balls and pop the balloons, and voila!

Put them aside and dry their interiors for a day(because they were blocked by the balloon).

IMG_3105

IMG_3145

IMG_3130

IMG_3110

IMG_3157

 

 

mycelium network

I’m also interested in how mycelium communicates with each others. The roots of most land plants are colonised by mycorrhizal fungi that provide mineral nutrients in exchange for carbon, and based on “Underground signals carried through common mycelial networks warn neighbouring plants of aphid attack” on Ecology Letter, by Zdenka Babikova, Lucy Gilbert, Toby J. A. Bruce,3 Michael Birkett, John C. Caulfield, Christine Woodcock, John A. Pickett and David Johnson, mycorrhizal mycelia can also act as a conduit for signaling between plants, acting as an early warning system for herbivore attack.

Screen Shot 2014-03-19 at 10.39.44 AM

The experiment is based on the fact that Vicia Faba will emit plant volatiles, particularly methyl salicylate, making this bean plants repellent to aphids but attractive to aphid(bugs) enemies such as parasitoids. It sets up 5 Vicia Faba, having only one of them attacked by aphids,  and having it either connected to other plants with roots or without roots, with mycelium or without mycelium(as picture right above). And the result(as picture left above) shows that the plants, which are connected to the Donor(infested w/ aphids) by mycelium, act same as the Donor, producing volatiles to repel aphids and attract aphids’ enemy. It means This underground messaging system allows neighboring plants to invoke herbivore defenses before attack.

It interests me a lot, and I want to use it as the content to inform people about the amazing behavior of fungus by visualizing the network of mycelium. The idea is–>

  1. when there’s no one around, the mycelium bulb will breathe in its own pattern, presenting w/ LEDs, and there is a video playing footages of fungus & mycelium life.
  2. once someone comes near, the mycelium bulbs will communicate with each other, lighting up and off one by one, and the video will change to broadcast the human-related footages(e.g. garbage, oil spill, and mycoremediation).

2014-03-12 09.48.46

footage Breathing, password: fungus

footage Awarepassword: fungus

 

 

And here are my Arduino code. I wrote digitalWrite into PMW pins.

//#include <LED.h>
#include <NewPing.h>

#define TRIGGER_PIN 8
#define ECHO_PIN 7
#define MAX_DISTANCE 30

//for ultrasonic sensor
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
int value;
int interval;  //to trigger the change of LEDs

//for smoothing
const int numReadings = 5;
int readings[numReadings];
int oriReading;
int index = 0;
int total = 0;
int average = 0;

//pin
int ledPins[] = { 
  3,5,6,9,10,11 };

int lastFade[6] = {
  0};
int level[] = {
  10, 23, 45, 50, 100, 205};

//output
int maxV = 220;
int minV = 5;

//slope & intercept
double ain[6], bin[6], aex[6], bex[6];

//time
double inTime[] = {
  1500, 1700, 1900, 2000, 2100, 2300};
double pauseTime[] = {
  350, 400, 450, 500, 550, 600};
double outTime[] = {
  2000, 2200, 2400, 2500, 2600, 2800};
double thirdT[6], cycleT[6];
double levels[6];

boolean lightUp[6];
int awareTime[] = {
  0, 1, 2, 3, 4, 5};
int awareOriTime[] = {
  0, 1, 2, 3, 4, 5};

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

  //smoothing
  for(int i=0; i<numReadings; i++){
    readings[i] = 0;
  }

  for(int i=0; i<6; i++) {
    pinMode(ledPins[i], OUTPUT);

    thirdT[i] = inTime[i] + pauseTime[i];
    cycleT[i] = inTime[i] + pauseTime[i] + outTime[i];

    ain[i] = (maxV - minV)/inTime[i];
    bin[i] = minV;
    aex[i] = (minV - maxV)/outTime[i];
    bex[i] = maxV - aex[i]*(inTime[i]+pauseTime[i]);

    lightUp[i] = false;
  }  
}

unsigned long tstart[6];
double time;

void loop() {

  //ultrasonic sensor
  oriReading = sonar.ping();
  value = (int) oriReading/US_ROUNDTRIP_CM;

  for(int thisChannel=0; thisChannel<6; thisChannel++) {

    //if detect ppl, all light up
    if(value > 0) {

      //if time can be dividable by 60
      if ( (awareTime[thisChannel])%6 == 0 ) {
        lightUp[thisChannel] = !lightUp[thisChannel];
      }

      if(lightUp[thisChannel] == true)
        levels[thisChannel] = 255;
      else
        levels[thisChannel] = 0;

      analogWrite(ledPins[thisChannel], levels[thisChannel]);

      //determin whether to restart the cycle of time
      awareTime[thisChannel] += 1;

      if( awareTime[thisChannel] >= (180) )
        awareTime[thisChannel] = awareOriTime[0];
    } 

    //if not, do LED pattern
    else {

      if (lastFade[thisChannel] <= inTime[thisChannel]) {
        levels[thisChannel] = int( ain[thisChannel]*lastFade[thisChannel] + bin[thisChannel] );
      }
      else if (lastFade[thisChannel] <= thirdT[thisChannel]) {
        levels[thisChannel] = maxV;
      }
      else {
        levels[thisChannel] = int( aex[thisChannel]*lastFade[thisChannel] + bex[thisChannel] );
      }

      analogWrite(ledPins[thisChannel], levels[thisChannel]);
      delay(1);

      //determin whether to restart the cycle of time
      if(lastFade[thisChannel] >= cycleT[thisChannel]) {
        lastFade[thisChannel] = 0;
        tstart[thisChannel] = millis();
      }
      else {
        lastFade[thisChannel] = millis() - tstart[thisChannel];
      }
    }
  }
}

 

And my Processing code to switch footages based on the Serial signal got from Arduino.

import processing.serial.*;
import processing.video.*;
import java.awt.MouseInfo;
import java.util.Arrays;
import java.util.Collections;
import java.awt.Rectangle;

Movie aware;
Movie grow;
boolean playGrow = true;

Serial myPort;

void setup() {
  size(displayWidth, displayHeight);
  if (frame != null) {
    frame.setResizable(true);
  }
  background(0);
  // Load and play the video in a loop
  aware = new Movie(this, "aware_2.mp4");
  grow = new Movie(this, "grow_v2.mp4");
  aware.loop();
  grow.loop();

//  println(Serial.list());
  String portName = Serial.list()[5];
  myPort = new Serial(this, portName, 9600);
}

void movieEvent(Movie m) {
  m.read();
}

void draw() {
  if(playGrow)
    image(grow, 0, 0, width, height);
  else
    image(aware, 0, 0, width, height);
}

void serialEvent (Serial myPort) {
  int inByte = myPort.read();
  println(inByte);

  if (inByte > 10)
    playGrow = false;
  else
    playGrow = true;

}

void keyPressed() {
  if(key == '1')
    playGrow = true;
  if(key == '2')
    playGrow = false;
}

int mX;
int mY;

boolean sketchFullScreen() {
  return true;
}

void mouseDragged() {
  frame.setLocation(
  MouseInfo.getPointerInfo().getLocation().x-mX, 
  MouseInfo.getPointerInfo().getLocation().y-mY);
}

public void init() {
  frame.removeNotify();
  frame.setUndecorated(true);
  frame.addNotify();
  super.init();
}

 

 

photos of Fabrication2014-03-11 12.19.29

2014-03-12 00.24.24

lightUp2

lightUp1

 

IMG_9685

IMG_9701

For further development, I’m thinking about maybe cooperate with Kate‘s “mushroom craft” and have some craft workshops! After all the process of making those mycelium light bulbs, I’ve been through the fabrication works which I’ve never tried before, and it felt great! I think direct “Hand” touch is the most effective way to pull closer the relationship between people and materials.

By starting the production from searching and growing the material, we can appreciate more about the resource we take from nature and also be more aware about the environmental issues. Not just sitting there receiving the news from TV, but actually  caring and being aware of it because you feel it affecting the fabrication process directly. Maker/Crafter spirit is one of the answer to the future.

ICM_Glitchtchtchitch

ICM Final– Glitchtchtchitch.

Manipulation and surveillance visualization.

Featured in ITP Winter Show 2013(See all the pics!).

Glitchtchtchitch is a live interactive installation showing multiple short-lived fault in a system. By bringing out the imperfection of technology with massive pixels manipulation, sound distortion, and multiple screens display, Glitchtchtchitch visualize the transient fault and the incapability of communication. Although mainly sending serious messages, with the effect of headless illusions, heads displacement, and delay, it leaves audience undergoing an experience without too much pressure.

Glitchtchtchitch is presented by running more than 10 Processing sketches at the same time, and using 2-3 projectors to increase the amount of screen, the variety, and increase the level of distortion.

 

Main idea –>  In order to cubify heads, instead of just altering pixels, I made an object “Cube” to get, restore, alter, and display the pixels of specific range. Also to achieve the headless effect, besides the library OpenCV, I took a background image beforehand, and display its pixels within certain ranges, once detecting a face. ALL THE SOURCE CODES

 

Notes

  • Speed issue has room for improvement.
  • Different scale presentation style(projectors included) looks nice.
  • From user test and presentation feedback, people love headless and delay effect the most. Because they’re the most bizarre, unrealistic, and uncommon visual impact.

Problems with solutions

  • OutOfBounds —> constrain(xxx, 0, numPixels-1)
  • flip horizontal —> video.width-fx-1
  • can’t cover image with pixels[ ] —> solved by using pixels for both
  • improve the sketch speed —> P2D, PFrame,
  • connect to webcam? PS eye? —> camera list, example

References

  • scale PImage http://stackoverflow.com/questions/17705781/video-delay-buffer-in-processing-2-0
  • Minim noise http://code.compartmental.net/tools/minim/manual-noise/
  • hide menu http://processing.org/discourse/beta/num_1224367967.html

Original proposal –> Here.

ICM_Faking multi-window display mode! (update)

black desktop!

black desktop!

(Update_11/25)

Find the way to move menu-hidden sketch window!

import java.awt.MouseInfo;

// do whatever you want

int mX;
int mY;

void mousePressed() {
  mX = mouseX;
  mY = mouseY;
}

void mouseDragged() {
  frame.setLocation(
  MouseInfo.getPointerInfo().getLocation().x-mX,
  MouseInfo.getPointerInfo().getLocation().y-mY);
}

reference from here.

————————————————————————————-

Found the Plan-Z to present my Glitchtchtchitch final– make my desktop all black and  hide the title bar of all my sketches!!! It’s a dumb way I know… but at least it works!

codes for Processing

public void init(){
  frame.removeNotify();
  frame.setUndecorated(true);
  frame.addNotify();
  super.init();
}

The only drawback is… I can’t move the sketch window after doing this! Which means I should run my sketches twice for each one, first time comment the magic codes out and adjust the location, then close it and bring the magic codes back, and then run it again…

Viva la vie.

resources: 1, 2, 3