The process over the last couple of weeks has been ridiculous! Over Thanksgiving break, Celeste and I set about to making our “creatures”. We made one structure out of spray foam, and the other out of paper mache. To make these structures, we used balloons - we taped a bunch of balloons together in the shape that we wanted, and then sprayed the spray foam around it, or in the other case built the paper mache around those balloons.

Over the last two weeks we have worked on building the guts of these guys. We had multiple occasions where we would wire together the LEDs then check to make sure they worked before putting them into the structure, but then after they were taped and secured inside the structure, they wouldn’t work anymore. It was exhausting and we’d have to take the whole thing out to find one small mistake or wire gone array. I found a code through open processing and made some adjustments to create the environment we needed for our creatures, then exported it and edited it some in Final Cut Pro.

Hopefully these guys will work - ideally, they will be doing opposite things. One of them vibrates and glows in the dark and is still during the day, while the other one vibrates and glows during the day but is still during the dark.

For our final project in Fundamentals of Art With Technology, my partner (Celeste) and I plan on making motion-activated creatures that respond and move when they detect movement. This would be done using motors and other such devices activated by an Arduino. Instead of creatures, we are also considering making organic forms that respond to movement, such as paper mache objects that are possibly suspended from the ceiling.

Video made using different variations of this code and edited in Final Cut Pro:

import processing.opengl.*;

 int    nbrSides = 7; int    scopeRadius = 400;int    scopeMargin = 8; float  mirrorRadians = 0;int    objectCellHeight = 0,        objectCellWidth = 0; PGraphics objectCell;PGraphics wedgePG; Boolean usesMirrors = true; void setup() {  // size(scopeRadius*2+scopeMargin*2, scopeRadius*2+scopeMargin*2, OPENGL);  size(816, 816, OPENGL);  smooth();  SetupMirror();} // CHANGE THIS FUNCTION TO GET DIFFERENT KALEIDOSCOPESvoid DrawCell(PGraphics oc){  float tm = (millis() % 1000) / 1000.0;   oc.beginDraw();  oc.smooth();  oc.background(0);  oc.noStroke();   int  nbrStripes = 40;  int  stripeThick = 5;  int  stripeSpacing = 10;     for (int i = 0; i < nbrStripes; ++i)  {    oc.fill(sin(i*2+2*tm)*128+128,sin(i*2+2+2*tm)*128+128,sin(i*2+4+2*tm)*128+128);    oc.rect(0, i*stripeSpacing+tm*stripeSpacing-stripeSpacing, width, stripeThick);    if (i*stripeSpacing > objectCellHeight)      break;  }  oc.endDraw();}         void SetupMirror(){    mirrorRadians = 2*PI / (nbrSides*2);     objectCellWidth = scopeRadius;    objectCellHeight = ceil(sin(mirrorRadians)*scopeRadius);    objectCell = createGraphics(objectCellWidth, objectCellHeight, P2D);    wedgePG = createGraphics(objectCellWidth, objectCellHeight, P2D);       wedgePG.beginDraw();      wedgePG.smooth();      wedgePG.background(0);      wedgePG.fill(255);      wedgePG.stroke(255);        wedgePG.beginShape();      wedgePG.vertex(0,0);      wedgePG.curveVertex(scopeRadius,0);      wedgePG.curveVertex(scopeRadius,0);      wedgePG.curveVertex(cos(mirrorRadians*.5)*scopeRadius, sin(mirrorRadians*.5)*scopeRadius);      wedgePG.curveVertex(cos(mirrorRadians)*scopeRadius, sin(mirrorRadians)*scopeRadius);      wedgePG.curveVertex(cos(mirrorRadians)*scopeRadius, sin(mirrorRadians)*scopeRadius);      wedgePG.endShape(CLOSE);    wedgePG.endDraw();} void draw() {  background(0);     DrawCell(objectCell);   if (usesMirrors)    objectCell.mask(wedgePG);   pushMatrix();    translate(width/2, height/2);    rotate(millis() * .00005);    // rotating of scope as a whole    if (usesMirrors)    {      for (int i = 0; i < nbrSides; ++i)      {        // for each reflection        pushMatrix();          rotate(mirrorRadians*i*2);          image(objectCell, 0, 0);          scale(1,-1);          image(objectCell, 0, 0);        popMatrix();      }    }    else {        image(objectCell, 0, 0);    }  popMatrix();} void keyPressed() {  if (key == 'm')   {    usesMirrors = !usesMirrors;    println("MIRRORS " + (usesMirrors? "ON" : "OFF"));  }  else if (key >= '2' && key <= '9') {    nbrSides = key - '0';    SetupMirror();  }  else if (key >= 'a' && key <= 'l') {    nbrSides = 10 + key - 'a';    SetupMirror();  }

}

Sketch 5

When clicked, image is compressed.

C myC1;

C myC2;

C myC3;

void setup() {

size(500,500);

background(0);

float r = random(100);

myC1 = new C (color(0,0,13,100),250,225, 50, 50, 1); // Parameters go inside the parentheses when the object is constructed.

myC2 = new C (color(255,0,0,100),250,200,60, 60, 5);

myC3 = new C (color(250,250,250,100),250,250, 30, 30, 30);

}

void draw() {

fill(30, 12);

rect(0, 0, width, height);

myC1.move();

myC1.display();

myC2.move();

myC2.display();

myC3.move();

myC3.display();

if (mousePressed){

myC1 = new C (color(250,250,250,100),250,250, 10, 10, 10);

myC2 = new C (color(255,0,0,100),250,200,30, 30, 5);

myC3 = new C (color(0,0,13,100),250,225,15, 15, 1);

} else {return;

}

}

class C { // Even though there are multiple objects, we still only need one class. No matter how many cookies we make, only one cookie cutter is needed. Isn’t object-oriented programming swell?

color c;

float xpos;

float ypos;

float xspeed = 0.4;

float angle = 2.4;

float offset = 30;

float direction = 4;

float ew;

float eh;

C (color tempC, float tempXpos, float tempYpos, float ewidth, float eheight, float tempXspeed) { // The Constructor is defined with arguments.

c = tempC;

xpos = tempXpos;

ypos = tempYpos;

xspeed = tempXspeed;

ew = ewidth;

eh = eheight;

}

void display() {

noStroke();

fill(c);

ellipseMode(CENTER);

float r = random(3);

ellipse(xpos,ypos,ew*r,eh*r);

}

void move() {

xpos += xspeed*direction;

if((xpos > width) || (xpos < 6)){

direction *= -1;

}

}

}

Sketch 4

float x = 50.0; // X-coordinate

float y = 50.0; // Y-coordinate

float radius = 30.0; // Radius of the circle

float speedX = 1.0; // Speed of motion on the x-axis

float speedY = 0.4; // Speed of motion on the y-axis

int directionX = 1; // Direction of motion on the x-axis

int directionY = -1; // Direction of motion on the y-axis

float speed = 2.0;

float angle = 0.0;

 

void setup() {

size(500, 500);

smooth();

noStroke();

ellipseMode(RADIUS);

}

 

void draw() {

fill(0, 12);

rect(0, 0, width, height);

 

pushMatrix();

 

fill(280, 0, 15);

translate(300, 300);

angle = angle + 0.001;

rotate(angle);

rect(0, 0, 5, 100);

 

fill(234, 20, 182);

translate(10, 10);

angle = angle + 0.001;

rotate(angle);

rect(0, 100, 5, 150);

 

fill(34, 25, 52);

translate(10, 10);

angle = angle + 0.001;

rotate(angle);

rect(0, 100, 5, 200);

 

fill(246, 55, 126);

translate(10, 10);

angle = angle + 0.001;

rotate(angle);

rect(240, 0, 5, 250);

 

fill(200, 0, 255);

translate(10, 10);

angle = angle + 0.05;

rotate(angle);

rect(50, 100, 5, 300);

popMatrix();

}

Made using Processing - when you press any key, the color changes from white to black. When you click, it will reset.

CODE:

float  x;

float  y;

float  px;

float  py;

float easing = 0.01;

void setup(){

size(480, 320);

background(214);

smooth();

stroke(50, 12);

}

void draw(){

if (keyPressed){

stroke(0);

} else {

stroke(255);

}

if(mousePressed){

background(214);

}

float  targetX = mouseX;

x += (targetX - x)*easing;

float  targetY = mouseY;

y += (targetY -y)*easing;

float weight = dist(y, x, px, py);

strokeWeight(weight);

line(x, x, px, py);

py = y;

px = x;

}

Done in Processing.

CODE:

size(630,500);

smooth();

strokeWeight(4);

background(200, 0, 0);

for (int y=0; y <=height; y+=30){
 
for (int x=0; x <= width; x+=30){

ellipse(x, y, 20, 20);

}

}

strokeJoin(BEVEL);

strokeJoin(SQUARE);


fill(61, 157, 43);

ellipse(188, 118, 100, 100);

ellipse(188, 208, 100, 100);

ellipse(268, 118, 100, 100);

ellipse(468, 208, 100, 100);

ellipse(388, 118, 100, 100);

ellipse(468, 118, 100, 100);

ellipse(388, 208, 100, 100);

ellipse(268, 208, 100, 100);

fill(64, 237, 255);

ellipse(428, 158, 100, 100);

ellipse(228, 158, 100, 100);

fill(0, 0, 0);

ellipse(428, 158, 25, 25);

ellipse(228, 158, 25, 25);

fill(255, 255, 255);

rect(80, 300, 100, 100);

rect(180, 300, 100, 100);

rect(280, 300, 100, 100);

rect(380, 300, 100, 100);

rect(480, 300, 100, 100);

This blog was created specifically for posting work and progress from my Fundamentals of Art with Technology class at SAIC. I am a video and new media artist and want to add technology and installation to my practice, so I’m pretty excited for what this course has to offer and for what I am going to learn.

Yay!

You can see some of my previous work done in video on my vimeo, here:

http://vimeo.com/user4789261

A lot of my work in the past, especially in video, has been focused on the relationship between society and the internet. I find the relationship between real life and cyber culture fascinating. Prior to my interest in using video as a creative medium, I was interested in photo - you can find some of my photography here:

http://beckymakesart.tumblr.com