Finding a simple design
To facilitate the prototyping phase, it was decided to use an existing animatronics design. Using an existing design known to work helps to focus on the actual goal, transferring animation data from Autodesk Maya to an animatronic. It was expected that a quick Google search would be enough to find a few dozen animatronics, hit download, and print. Sadly, this wasn’t the case.
There are 3D printable animatronics online, but either they need certain parts I can’t find, special filament required, or the designs don’t come with a guide on how to build them. So it took me a bit longer to start prototyping.
A 3D printable eye animatronic that looks simple to recreate is found on the website Thingiverse. Thingiverse is a community in which 3D print designs are shared for free. It is encouraged that the files are licensed under a creative commons license, meaning that anyone can use or alter any design (thingiverse, n.d.).
The build found on Thingiverse is created by the user (sideburn, 2014). Sideburns wrote clear instructions about the build and its requirements. The build uses an Arduino board, a breadboard, two mini servos, a paperclip, some wires, and the 3D printed parts. It was decided to use this build because it looked relatively simple since it doesn’t have too many components. Because it is such a simple but practical prototype, it is less likely to become overwhelmed. It is always possible to add more complexity in later designs.
Figure 1. 3D printed parts of the eyeball prototype (Own work)
Printing
Over the course of a few months, I gained some experience working with a 3D printer. My prints are mostly limited to decorative cosplay props. As part of my graduation assignment, I want to research how new techniques like 3D printing would benefit the making of animatronics. The difference with these prints is that they need to work together with other prints or mechanical parts.
The parts for the prototype are printed with different colored PLA filament. PLA or polylactic acid is a vegetable-based plastic material, which commonly uses cornstarch as a raw material. PLA is one of the most popular materials used in FDM printing along with ABS or Acrylonitrile Butadiene Styrene(1). ABS is lightweight, has high impact resistance, tensile strength, and stiffness(2). Although PLA is less durable and more fragile, which makes it more suitable for decorative parts instead of mechanical parts, it was chosen over ABS since it is easier to print with. To ensure good quality of the final product a different filament, like ABS, might be chosen.
Once the prototype parts were done printing the parts were put together. It was expected that the parts could be used straight out of the printer, but they needed some adjustment first since they didn't fit together nicely.
Adjusting
To proceed with my prototype some of the filament from the servo holders need to be removed or the part needs to be redesigned to fit my slightly different servo motor. The sockets of the eyeball and eyelid holder need to be sanded down since the parts can't freely rotate in them. If left untouched the servo will likely strip its teeth due to the friction.
When printing parts that need to fit together some additional adjusting might need to be done. There are multiple reasons a part might not fit in its counterpart while the virtual version fits nicely. Extrusion multiplier, material shrinkage, or motor skipping can be one of those reasons. Reprinting the part with a slightly different size might help and can save you from hours of sanding.
The servo holder was adjusted by cutting away the extra filament with a circle blade on a Dremel. The accumulated melted plastic was sanded off using some sanding paper. (See fig 1.)
Figure 2. Printed servo holder adjusted to fit servo's (Own work)
The upper eyelid, eyeball, and its holders are sanded down so that the parts can be easily rotated with little pressure.
Figure 3. Sanded eyeball prototype able to move (Own work)
Connecting the servos
Once the printed parts were put together, the servos were placed in their respective slots. The servos were then connected to the breadboard using male header pins. For each servo, a capacitor is used to smooth out fluctuations in voltage. The Arduino, breadboard, and accessories used to build this prototype are taken from the Arduinos starter kit.
It was fairly easy to build the circuit since I practiced with the Arduino starter kit first. (See fig3.)
Figure 4. Circuit first eyeball prototype (Own work)
The user Sideburns included a sketch that runs a basic eye animation. A sketch is a unit of code that is uploaded to an Arduino and runs on the Arduino (Arduino, n.d.).
The first thing seen in the sketch is a servo library that is being included. A library in software terms is a collection of related procedures. In this case, a servo library is included, meaning that all basic functionality you might want to do with a servo is added to the code without writing it yourself. The code then defines recognizable names for both servos and gives names to position values of the servo’s horn to help visualize what those numbers do. Using the variable name “closed” to move the servo so that the eye closes is considered more intuitive than using a number like “90”.
In the setup, both servos are connected to their pin in which they are plugged into the Arduino board. The setup, or in code “void setup()” is a function that is called once when the sketch starts. Here you initialize variables, pin modes, or the start position of the servo. The setup() function will only be called again when the Arduino board receives a reset. (Arduino, 2018) In the setup() function, the starting positions are defined for each of the servos.
In the original sketch, the actual code that animates the eye is placed in the loop() function. The loop() function “loops consecutively, allowing your program to change and respond as it runs. Code in the loop() section of your sketch is used to actively control the board.” (Arduino, 2018) Because the animation code is placed in the loop() function, it keeps repeating, making it difficult to see where it began and where it ended.
To see the animation changes better, the animation is placed in the setup() so that the animation sequence only plays ones. Once the animation is done, the reset button can be pressed to reset the Arduino. When the Arduino resets, the setup() function will be called, playing the animation sequence again. The animation itself was also changed to a more interesting sequence.
//include library for servo
#include <Servo.h>
//define name of the servo motors
Servo upDownServo;
Servo rightLeftServo;
//define position name and value
#define left 60
#define right 120
#define middle 90
#define closed 90
#define fullOpen 180
#define halfOpen 160
#define waitTime 750
void setup() {
//define pin numbers of the servo motors
upDownServo.attach(5);
rightLeftServo.attach(6);
//starting position of the servo motors
delay(10);
upDownServo.write(closed);
rightLeftServo.write(middle);
delay(1000);
upDownServo.write(halfOpen);
delay(waitTime);
upDownServo.write(closed);
delay(waitTime);
upDownServo.write(halfOpen);
delay(waitTime);
upDownServo.write(fullOpen);
delay(waitTime);
rightLeftServo.write(right);
delay(waitTime);
rightLeftServo.write(left);
delay(waitTime);
rightLeftServo.write(middle);
delay(waitTime);
upDownServo.write(closed);
rightLeftServo.write(right);
delay(waitTime);
upDownServo.write(fullOpen);
delay(waitTime);
upDownServo.write(closed);
rightLeftServo.write(left);
delay(waitTime);
upDownServo.write(fullOpen);
delay(waitTime);
rightLeftServo.write(middle);
}
After some tweaking of the length of the paperclip and the starting position of the eyelid handle the following video is the result.
Figure 5. Animated eyeball (Own work)
Sculpteo. (2019, June 10). PLA (Polylactic Acid) Biodegrable Filament. https://www.sculpteo.com/en/glossary/pla-definition/ retrieved on 19 October 2020
Sculpteo. (2019, November 25). ABS Plastic Material for 3D Printing: FDM Thermoplastic Material. https://www.sculpteo.com/en/glossary/abs-definition/ retrieved on 19 October 2020
Comments