Introduction: Lifesize Poseable Animatronic Endoskeleton

About: I've been building up gadgets from scraps and re-missioned tech since the days when a 555 was considered high function silicon. People doing such things weren't called "Makers", but that's what it wa…

General guidelines for assembling a full size endoskeleton featuring poseable limbs and animatronic head.

What you'll need.

Large Diameter PVC pipes
Large Double Compression Fitting
Smaller Diameter PVC Pipes
Smaller Double Compression T Fitting
Plastic Waste Basket
Plastic Tub
4 Single PVC Compression Fittings
Assorted PVC Fittings
Toy Robot Hands
Foam Skull
Silver Paint
Ductape
PVC Glue
Arduino
Motor Shield
Stepper Motor
Optical Sensors

Step 1: Building the Torso Structure With Rotating, Lockable Shoulders and Hips

The building material for the endoskeleton frame is PVC pipe and fittings. The primary shoulder and hip joints are made from double sided compression fitting couplers. These fittings have rubber seals that bind the pipe as the threaded caps are tightened.

The shoulder compression fitting is a T with a threaded center tap. The larger diameter spine attaches to the center of the shoulder T fitting with a threaded reducing coupler. I chose a larger diameter fitting for the hips that was not available as a T. I made it into a T by splitting a standard, gluable T fitting lengthwise and gluing the T side to the compression fitting. This larger T compression fitting is attached to the bottom of the spine.

The threaded shoulder fitting is not glued to the spine. It provides limited rotation of the entire shoulder assembly around the spinal column.

Step 2: Fashioning the Chest and Pelvis.

The chest and shoulder caps were made by cutting two corners off the bottom of a plastic trash bucket. Cut holes in the bucket corners to pass shoulder pipes through and into the compression shoulder fittings . Cut a hole in the bucket bottom to attach it upside down between the reducing connector at the top of the spine and the shoulder assembly.

The pelvis is fashioned by cutting a front notch in a plastic tub. Add holes in the sides of the tub to pass hip pipes through and into the hip compression fittings. I placed a large diameter hardwood dowel through the hip pipes and central fitting to help support the weight of the body.

Step 3: Building the Arms

The arms are fashioned from smaller diameter PVC pipes and fittings. Start with a 90 degree elbow at the end of the shoulder pipe. Next connect a single threaded compression fitting to provide a 2nd axis of shoulder rotation that is orthogonal to the compression fitting at the top of the spine. On the other side of the new compression fitting add another 90 elbow fitting. The upper arm pipe is then attached. The two orthoganal compression fittings allow the arm to rotate forward and back, and out to the side. Simply loosen the compression fitting cap to free the joint, pose the shoulder, and tighten the compression caps to lock the joints.

At the free end of the upper arm add another 90 elbow and another single compression fitting to form the elbow joint. Rather than a simple 90 elbow bend to connect the lower arm to the compression fitting , I chose to use two 45 degree elbows after the 90 degree elbow. This staggered bend helps to realign the forearm pipe with the upper arm.

Step 4: Add Legs

At the ends of the wooden dowel reinforced hip pipes, glue a 45 degree elbow fitting. Use a short section of pipe to attach a 2nd 45 degree fitting that is not glued. To the other side of the 2nd 45 fitting attach the upper leg pipe. This 45 degree swivel allows the leg splay to be adjustable.

I chose to use another pair of 45 degree fittings to fashion each knee. This unglued 45 swivel allows the knee to place the leg in a long or right angle position.

Add the lower leg pipe, a T to form an ankle, and a piece of pipe to form the foot. I used a heat gun to soften and flatten the toes.

Step 5: The Endoskull

The endoskull started as a one piece foam prop. The foam has a hard shell which I painted silver. The jaw was removed with a razor saw and replaced with a broader one fashioned of cardboard covered with duct tape. Some chrome fittings from toy cars were used to dress up the robotic nature of the skull.

A motor shield on an Arduino controls a stepper motor attached to the bottom of the skull. The control sketch polls the values of two optical resistors mounted on the sides of the jaw. The stepper turns the skull towards the sensor with the brightest light. The sketch calibrates the two sensors at each reboot which defines what the skull considers the center point and neutral illumination.

An LED for each eye socket is connected to one of two motor winding drives on the shield, causing the eyes to wink as the motor steps back and forth.

Step 6: Finishing Details

A pair of toy store child's robot hands are attached to the arms. They were both righties, so one thumb was sawed off and epoxied to the other side of the palm to fashion a left hand.

Some braided stainless plumbing lines were added to simulate power lines. Foil backed rigid foam was used to fashion dimensional pieces for the limbs.

The spine pipe was dressed up with foam blocks wrapped in duck tape to simulate the segments.

Step 7: The Light Seeking Arduino Sketch

The following code embodies the Arduino sketch for seeking a bright light with a stepper motor.

/*
Stepper Motor Control - hunt to find a strong light source This program drives a unipolar or bipolar stepper motor. The motor is attached to digital pins 8 - 11 of the Arduino. The motor should revolve one revolution in one direction, then one revolution in the other direction. Created by Scott Turnbull October 30, 2014 */

#include

const int stepsPerRevolution = 72; // change this to fit the number of steps per revolution // for your motor

// initialize the stepper library on pins 8 through 11:

Stepper myStepper(stepsPerRevolution, 8,11,12,13);

int sensorPin = A4; // select the input pin for the photoresistor

int sensorPin2 = A5; // select the input pin for 2nd photoresistor

int sensorValue = 0; // variable for light input value

int sensorValue2 = 0; // variable for 2nd light input value

int sensecalibrate = 0; // a value to calibrate matched sensor values

int sensorValue_old = 0; // previous value from sensor

int stepvalue = 2; // step value to move

int stepbump = stepvalue; // value (with sign) to move each update

int stepmax = stepsPerRevolution/4; // how far to sweep to either side

int steptally = 0; // keep count of steps from initial position

void setup() {

// set the speed at 5 rpm:

myStepper.setSpeed(5); // initialize the serial port:

Serial.begin(9600);

pinMode(9,OUTPUT);

pinMode(10,OUTPUT);

digitalWrite(9,HIGH);

digitalWrite(10,HIGH);

sensorValue = analogRead(sensorPin);

sensorValue2 = analogRead(sensorPin2);

sensecalibrate = sensorValue - sensorValue2;

}

void loop() { // read the value from the sensor:

sensorValue = analogRead(sensorPin);

sensorValue2 = analogRead(sensorPin2)+sensecalibrate;

Serial.print("Sensor Value: ");

Serial.print(sensorValue);

Serial.print("Sensor Value 2: ");

Serial.println(sensorValue2); //Serial.print(" Step Tally:"); //Serial.println(steptally);

// if light is stronger, keep moving in that direction

if ( sensorValue > sensorValue2 ){

if ( abs(steptally+stepvalue) < stepmax ) {

myStepper.step(stepvalue);

steptally = steptally + stepvalue;

} else {

myStepper.step(-10);

steptally = steptally -10;

}

} else {

// if light is dimmer, switch direction, and double back

stepbump = 0-stepvalue;

if ( abs(steptally+stepbump) < stepmax ) {

myStepper.step(stepbump);

steptally = steptally + stepbump;

} else {

myStepper.step(10);

steptally = steptally +10;

}

}

delay(400);

}

Halloween Decor Contest

Participated in the
Halloween Decor Contest

First Time Author Challenge

Participated in the
First Time Author Challenge

Microcontroller Contest

Participated in the
Microcontroller Contest