In the early 20th century, a radical modernist art movement known as Vorticism erupted in Britain but soon withered after the First World War. The distinct style of the Vorticists was about combining machine-age forms and energetic modern beliefs to “Blast” and “Bless” the environment around them – expressed through geometric abstractions.

Recently, I was asked to design a response to this short-lived movement, with a focus on blasting (opposing or being unhappy about something) or blessing (being happy about an aspect of life). I decided to focus on how I never have enough time to do anything.

When you think about it, time can be a very annoying aspect of life. Waiting, wasting, loitering, queueing, decaying, inefficiency, biding, aging, being late – these are all things that irritate me. I blast time!

In response to blasting time, I made an interactive sculpture that responds to people, consisting of two clocks. The right one was constantly ticking – representing the never ending flow of time – while the left clock represents my fantasy.

Using the Arduino Motor Shield and the Leap Motion Controller, I managed to hack the left clock so that its hands would turn in the direction that the user spun their fingers. This “control” over the clock represents the desire to master time, whether it be reversing or fast-forwarding the flow of time, to experience the most out of situations.

vorticism02

vorticism01

I designed BLAST: Time in Processing, and today I’d like to share the code with you. Maybe you can use it to create your own little piece of art, or bring some interactivity to a new piece of hardware.

import com.leapmotion.leap.CircleGesture;
import com.leapmotion.leap.Gesture.State;
import com.leapmotion.leap.Gesture.Type;
import com.leapmotion.leap.Hand;
import com.leapmotion.leap.SwipeGesture;
import com.onformative.leap.LeapMotionP5;

LeapMotionP5 leap;
float backgroundColor;

import processing.serial.*;
Serial myPort;

PImage bg;

public void setup() {
  size(300, 300);

String portName = Serial.list()[5];
  //setting up the serial connection through the chosen port
  myPort = new Serial(this, portName, 9600);

  //dont generate a serialEvent() unless you get a newline character from arduino:
  myPort.bufferUntil('\n');

  leap = new LeapMotionP5(this);
    leap.enableGesture(Type.TYPE_SWIPE);
       leap.enableGesture(Type.TYPE_CIRCLE);

       backgroundColor = (0);

        bg = loadImage("logo.jpg");

}

public void draw() {

  background(backgroundColor);
  for (Hand hand : leap.getHandList()) {
    PVector handPos = leap.getPosition(hand);
    ellipse(handPos.x, handPos.y, 20, 20);

  }

}

public void circleGestureRecognized(CircleGesture gesture, String clockwiseness) {
  if (gesture.state() == State.STATE_STOP) {
    println("//////////////////////////////////////");
    println("Gesture type: " + gesture.type().toString());
    println("ID: " + gesture.id());
    println("Radius: " + gesture.radius());
    println("Normal: " + gesture.normal());
    println("Clockwiseness: " + clockwiseness);
    println("Turns: " + gesture.progress());
    println("Center: " + leap.vectorToPVector(gesture.center()));
    println("Duration: " + gesture.durationSeconds() + "s");
    println("//////////////////////////////////////");

    if(clockwiseness == "clockwise")
    {

     backgroundColor = 255;

     myPort.write('1');

    }
    else
    {

     backgroundColor = 0;
      myPort.write('3');
    }

  }
  else if (gesture.state() == State.STATE_START) {
  }
  else if (gesture.state() == State.STATE_UPDATE) {
  }
}

public void swipeGestureRecognized(SwipeGesture gesture) {
  if (gesture.state() == State.STATE_STOP) {
    println("//////////////////////////////////////");
    println("Gesture type: " + gesture.type());
    println("ID: " + gesture.id());
    println("Position: " + leap.vectorToPVector(gesture.position()));
    println("Direction: " + gesture.direction());
    println("Duration: " + gesture.durationSeconds() + "s");
    println("Speed: " + gesture.speed());
    println("//////////////////////////////////////");

        for (Hand hand : leap.getHandList())
        {
    PVector handPos = leap.getPosition(hand);

    if(handPos.y < 200)     {      myPort.write('2');   }         }   }   else if (gesture.state() == State.STATE_START) {   }   else if (gesture.state() == State.STATE_UPDATE) {   } } public void stop() {   leap.stop(); } Arduino code: void setup() {   Serial.begin(9600);   //Setup Channel A   pinMode(12, OUTPUT); //Initiates Motor Channel A pin   pinMode(9, OUTPUT); //Initiates Brake Channel A pin } void loop(){  if (Serial.available()>0)
 {
 byte input = Serial.read();
 if(input == '1')
   {
   //forward @ full speed
   digitalWrite(12, HIGH); //Establishes forward direction of Channel A
   digitalWrite(9, LOW);   //Disengage the Brake for Channel A
   analogWrite(3, 255);   //Spins the motor on Channel A at full speed
    }

    if(input =='2')
    {
    digitalWrite(9, HIGH); //Eengage the Brake for Channel A
    }

    if(input == '3')
    {
    digitalWrite(12, LOW); //Establishes forward direction of Channel A
    digitalWrite(9, LOW);   //Disengage the Brake for Channel A
    analogWrite(3, 255);   //Spins the motor on Channel A at full speed
    }

  }
}

You can see some of my early experiment videos working with the device here (my personal favorite), and on my website, along with a live demonstration of the setup below.

I’d love to hear what you’re creating, as well as what inspires you to build new hardware integrations. Post your thoughts in the comments below.

James Miller is an undergraduate student in his final year of the Interactive Design BA Hons Degree at the University of Lincoln. You can follow his work at jamesmillerportfolio.co.uk.