Drawing Machines

Drawing Machines

https://github.com/hackersanddesigners/tool_hacking https://hackersanddesigners.github.io/tool_hacking/build

Albrecht Durer

Jean Tinguely

Olafur Eliason

Harmonograph

This work is a machine for producing geometrical drawings. Inspired by the harmonograph, an invention from the nineteenth-century, the device uses a pen attached to a system of pendulums to generate complex forms comprised of curved lines. Once the initial conditions – pen, pendulums, momentum – are established, the unfolding process completes the artwork.

Damien Hirst

I love making spin paintings with kids, I’ve got a spin machine that I take to my kids' school and get all the kids doing them, the joy of making them is what somehow makes them great art and all those crazy moments throwing paint around and mostly not knowing what you’re doing is distilled in the final result and that’s why they’re so amazing; they immortalise a feeling or a collection of feelings, a fleeting, colourful happiness, they are like tracks in time, like footprints in the snow. What does an artwork say about an artist’s personality? Is the person of the artist always present in the piece of art? It’s something I’ve thought of quite often with the spins because they’re an interesting meditation on the role of the artist – the results manage to say not a lot about the person who has spun them, because they’re governed by the forces of chance and movement, and in the end it’s harder to make a bad one than a good one and they all look similar in some way whoever makes them.

David called them 'art without the angst'.

https://www.sothebys.com/en/articles/hirst-on-bowie

Damien Hirst

Tim Lewis

Harvey Moon

Approaches

Servos

Library

Menu > Sketch > Include Library

Linear

#include <Servo.h>

Servo myservo;
int pos = 0;
int step = 1;

void setup() {
  myservo.attach(9); // attaches the servo on pin 9 to the servo object
}

void loop() {
  myservo.write(pos); // tell servo to go to position in variable 'pos'
  pos = pos + step;
  if( pos >= 180 || pos <= 0 ) {
    step = -step;
  }
  delay(15);
}

Sinusoidal

#include <Servo.h>

Servo myservo;
int pos = 0;
float count = 0;
float step = 0.01;

void setup() {
  myservo.attach(9);
}

void loop() {
  pos = sin(step) * 90 + 90;
  myservo.write(pos);
  step += 0.1;
  delay(50);
}

Random

#include <Servo.h>

Servo myservo;
int pos = 0;
int step = 1;
int from = 0;
int to = 180;

void setup() {
  myservo.attach(9);
}

void loop() {
  myservo.write(pos);
  pos = pos + step;
  if( pos >= to ) {
    step = -step;
    from = random(0,90);
  } else if(pos <= from ) {
    step = -step;
    to = random(90, 180);
  }
  delay(15);
}

Steppers

Back & Forth

#include <Stepper.h>
const int stepsPerRevolution = 2048;

// Connect Arduino to ULN2003 like so:
// Pin 8 -> IN1, Pin 9 -> IN2, Pin 10 -> IN3, Pin 11 -> IN4
Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11);

void setup() {
  myStepper.setSpeed(5); // maximum = 15!
}

void loop() {
  // Step one revolution in one direction:
  myStepper.step(stepsPerRevolution);
  delay(500);
  // Step one revolution in the other direction:
  myStepper.step(-stepsPerRevolution);
  delay(500);
}

Potentiometer

#include <Stepper.h>

const int stepsPerRevolution = 2048;
// Arduino -> ULN2003
// Pin 8 -> IN1, Pin 9 -> IN2, Pin 10 -> IN3, Pin 11 -> IN4
Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11);

void setup() {
  myStepper.setSpeed(5); // maximum = 15!
}
void loop() {
  int potValue = analogRead(A0);
  // map analog values (0-1023) to stepper speed (1-15)
  int spd = map(potValue, 0, 1023, 1, 15);
  myStepper.setSpeed(spd);
  myStepper.step(10);
}

External Power