Oliver and Michael – Automaton

Our goal for this project was to give our automaton less than admirable human qualities juxtaposed against a desperate will to survive and be free. Our hopes were to capture the gesture of the struggle to free oneself from a straight jacket. As we head towards artificial intelligence with great advances in computing technology and science we began to question if artificial emotion will be developed as well. Is it possible to an intelligent computer to have emotional or mental sickness?

We created this automaton using two servo motors attached to laser-cut wooden framework and gears. It wears a hand-sewn straight jacket to constrain its motion. The figure is attached to a metal box with an on-off switch on the outside and all of the wiring, the Arduino, and the breadboard inside.

The automaton’s movement has three stages: frantic motion, reserved motion, and rest. The servo angles and delay times use a constrained randomized method to simulate struggle.

 

Photos:

   

 

Video:

[youtube http://youtu.be/-bNvmn04A_Q]

 

Fritzing diagram:

 

Code:

// less than and greater than signs messed up the code on this 
// blog post so I had to spell out "is less than" and 
// "is greater than"

#include Servo.h

Servo servo1, servo2;
const int buzzerPin = 4;
const int franticReps = 18;
const int reservedReps = 7;
int position;

void setup() {
  servo1.attach(8);
  servo2.attach(9);
  pinMode(buzzerPin, OUTPUT);
}

void loop() {
  int m=0;
  // frantic motion
  while (m is less than franticReps){
    franticMotion();
    m++;
  }
  // reserved motion
  int n=0;
  while (n is less than reservedReps){
    reservedMotion();
    n++;
  }
  // rest
  delay(random(8000,10000));
}

void reservedMotion() {
  for(position=40; position is less than 140; position+=4) {
    // shoulders
    servo1.write(position);
    // elbows
    servo2.write(position);
    delay(30);
  }
  for(position=140; position is greater than 40; position-=4) {
    // shoulders
    servo1.write(position);
    // elbows
    servo2.write(position);
    delay(30);
  }
}

void franticMotion() {
  // shoulders
  servo1.write(random(20,60));
  // elbows
  servo2.write(180);
  delay(random(200));
  // shoulders
  servo1.write(random(120,160));
  // elbows
  servo2.write(0);
  delay(random(200));
}

Post a comment