Introduction: DIY Compact 3D Printed Animatronic Eye Mechanism
My previous instructable was an attempt to make an eye mechanism that was as accessible as possible to as many people as possible, but in this project I wanted to design something that was more of a middle-ground between accessibility and quality. This design features some more speciality parts such as servo ball-links and pushrods but it's still quite easy to build. It uses a mechanism design which is commonly used in professional eye mechanisms, but it circumvents any machining by using parts that are designed for 3D printing. Compared to my previous design, it is much more compact, robust, and a little lighter.
Another feature of this design is that it's designed to use snap-in eyes which can be replaced, and used with other 3d printed components to cast a highly realistic dome over the painted eye. This process is quite involved so I have another instructable on how to make the eyes, but if you'd prefer to use simple 3d printed eyes you can do that too.
The requirements aren't too high, but I'd recommend that you be fairly comfortable with 3D printing before attempting this project - you will need a printer that can reliably print at 0.15mm - 0.2mm layer height, and it'll need to be calibrated well enough to print small parts to be quite strong, which also entails using decent-quality filament. If you're using something like an ultimaker or makerbot you should have no trouble at all, but for folks like me using cheaper 3D printers you may need to go through a bit of trial and error to get your print settings perfect. If you're looking for something easier, have a look at my previous instructable.
Also, making the eyes was a tricky process and not necessarily needed to make this project, so check my other instructable for how to make the eyes.
Supplies
- Screws: https://amzn.to/32PAPo7 (this kit should cover you)
- Around 40*M2 x 6mm screws
- 6* 10mm M2 screws
- 6* MG90s servo screws (these come with the servos: https://amzn.to/33VfIlF)
- Hobby Components
4* M2 Servo Ball-links: https://amzn.to/2Kq8fDK
4* M2 x 25mm Pushrod Connectors: https://amzn.to/32XQXEt (keep in mind this is just 2mm threaded bar - you could always cut down a 25mm bolt or some plain threaded rod)
- Arduino Uno: https://amzn.to/2XoMolo (or anything that can accept three analogue signals, one digital and communicate through SDA/SCL ports)
- Adafruit PCA9685 16-Channel Servo Driver: https://amzn.to/2NQeNNT
5V Power Supply, around 4A is more than enough. Here is mine (http://tiny.cc/is4cdz)
A female DC power jack to match your power supply, to be soldered to the servo driver board
seperate: https://amzn.to/32Wnvyh)
Also, a pin vice hand drill might be useful for adjusting hole sizes: https://amzn.to/2CLsCqG
Step 1: Printing
Most parts print fine without needing supports, and 0.2mm layer height or less is ideal. Lower is likely to be better depending on how good your printer is, there will be an ideal layer height for maximum strength – mine is 0.2mm but it's not a bad idea to experiment with yours to find where it is.
It might also be a good idea to tweak your extrusion width to try and get a nice solid infill, this is particularly important on the eyelids as there is a point where the print transfers from being primarily vertical to horizontal and this can result in poor extrusion. My settings for the eyelids using Slic3r Prusa Edition were:
- Extrustion multiplier: 1.1x (in filament settings)
- Default extrustion width: 160%
- Height: 0.18mm
- Perimeters: 3
100% infill was not necessary for any components but many will end up fully infilled due to the small size. I do recommend using several perimeters/shells to ensure that parts with holes have enough strength - this can sometimes result in warping though so don't go to high with it. My tip is to get a nice fat cooling fan!
I used PLA for everything other than the eyes, but I think ABS would have been a better choice due to the low friction it tends to have, and the flexibility that would have lended itself well to the snap-fit parts. PLA has the advantage of holding screws very securely though (not to mention that it's way easier to print), so maybe don't get too hung up on material choice.
Step 2: Post-Processing
Many parts may need adjustments to run smoothly, the eyelids in particular are likely to need quite a bit of sanding because the tolerance between the eyes and the lids are fairly tight (which makes it look more realistic). the tolerances I've used in this design for stationary parts is around 0.2mm, and for moving parts it's up to 0.6mm, obviously different printers will have different abilities so unfortunately there may be a little post processing required.
I'd recommend sanding anything that's obviously out of shape as soon as its printed, but some problems may only become apparent once you start putting the model together. Just keep a small file or craft knife handy to adjust bits as you go. Its also best to drill out holes that act as pivots to ensure they're the perfect size, so refer to the graphics to figure out what to drill.
If you encounter any big problems with mis-alignment you can always use a heat gun to make the PLA more malleable and re-adjust it, but I can't imagine you'd need to.
Step 3: Assembly
With everything printed, you can begin putting the model together. It may be useful to refer to the video for this stage. Also there's all the reference pics in one folder in my download, including an .stl of the complete model you can look at.
- Start by attaching the pushrods to the eye links. Screw in very carefully to avoid de-laminating the links, if this happens you may need to drill the hole to be larger or make your 3D print stronger (increase temperature, decrease layer height etc). Attach a ball-link to the other end of the pushrod, and try to ensure all four pushrods are the same length. Attach servo horns to the ball-links - two of which should attach at the fourth hole from the centre, and the other two which attach to the second hole from the centre - in both cases the bolt head should be on the side that has the raised section on the eye links, and the servo horn should be underneath the ball-link.
- Using the M2 x 6mm screws, assemble the inner eye mechanism. Its critical to get everything in the right orientation, so check the graphics and/or the video to make sure you have it right. First attach one pushrod to the large pivot with the bolt head on the side of the eye connector with the raised section, along with the eye centre holder. Then attach a pushrod to the small pivot with the bolt head on the flat of the eye connector.
- Flex the eye adaptor to accept the large and small pivots. Ensure everything is able to move smoothly, and sand/cut anything that isn't. Check everything is oriented correctly, then repeat step 2 to make the other eye mechanism - but keep in mind this will be a mirror image of the first.
- Plug in the servos to the left and right bases using M2 x 6mm screws - the wires should come out towards the back of the mechanism - i.e., the opposite side to where the raised part is. Then use an M2 x 10mm screw to attach the eye mechanism to each base - check above to ensure they go on the right way. It's a good idea to use some glue between the eye holder and the left/right base too to ensure it doesn't rotate.
- Attach the four eyelid holders with 3 M2 x 6mm screws each. Note that the sloped part should face the outside (but both should face the same direction each side of the overall mechanism, check above to be clear on this point). Also screw in an M2 x 10mm screw to each eyelid holder such that they face inwards towards each other. These don't go in all the way - it may be helpful to wait untill the eyelids are in place to work out exactly how far in they should go.
- Load the sub-base with two MG90s servos facing each other, held in with M2 x 6mm screws. Link the two bases by attaching this sub-base to the left and right bases using four M2 x 6mm screws, and also attach the front strip which uses six M2 x 6mm screws.
- Work out which eyelid is which with reference to above and link the two pairs with the eyelid actuator arms. Attach a servo horn to each of the eyelid arms on the second hole from the centre using an M2 x 10mm screw.
- Plug in the eyes first, then slide in the bottom eyelid assembly, flexing the eyelid holders to get the lids into the pivots. Then attach the top eyelid assembly. Don't worry about linking up any of the servo horns yet.
Step 4: Electronics and Final Assembly
By referring to the graphic, upload the code to the arduino and wire everything up. Check the Adafruit guide if you need help setting up the servo driver board. All servos should now be powered and in their neutral position, so use this opportunity to link up all the servo arms to the servos with the eyes facing straight forward in a neutral position. You can just plug them in, then disconnect the power to screw them in properly. I'd recommend testing the motion with your joystick at this stage to make sure there are no issues. If the eyes are facing slightly different directions, you can unscrew the ball-links and tighten/loosen them on the pushrods to adjust the direction of the eyes.
For the eyelids, its best if you set the servos to be in the blinking position so you can line them all up in the centre. Do this by either holding down the blink switch or creating a short over it. The eyelid servo horns are in an awkward position to accept a screw, but it should be possible to flex the assembly enough to get a screwdriver in.
Your model should be complete! If you want to see how to make the realistic eyes, check my previous instructable. I'm also planning on releasing an instructable soon to show you how to make a controller, so check back if you're interested!
If you're interested in following my progress on the various robotics and animatronics projects I have on the go, consider checking out my Patreon page to get a look behind the scenes.
26 Comments
2 years ago
Does anyone else have an issue with their eyes going the opposite ways? I've checked the wiring and servo connections several times. When I push "Up" on the joystick, one eye goes up and the other goes down. When I push "left" or "right, the eyes go opposite ways. It's almost like the servos are turning in opposite directions. They are all MG90s, purchased at the same time, from the same mfr. My next adventure will be trying to decode the C++ in the Arduino code.
Reply 4 weeks ago
Has anyone figured this out? I am wondering if it has to do with the PCA9685 board. I got 2 of the cheap knock offs, first one worked great then stopped (board and Servos had power, but no servo movement). I swapped to the other board and the servos worked again, but had this issue of moving in opposite directions. I have an official Adafruit board coming soon. All I did was swap the pca9685 (same wiring/same code) so that is why I think it's the issue. If the Adafruit board works as it should, I will let you all know.
Reply 1 year ago
Yes! I have the exact same problem. Did you ever figure it out? Also, the eyes don't move as fluidly with the eye lids as they do in the video so I'm thinking there's some more advanced code out there. Can anyone help with this? w
Reply 2 years ago
Having the same issue. Did you ever figure this out?
Reply 2 years ago
I ended up having to mount the eye that moved wrong to the servo horn on the opposite side. My right eye is now mounted to the servo horn on the LEFT side of the servo. Hope that this helps.
Question 4 weeks ago
I have a silly question about your M2 screws where they're used as pivots - did you skip putting nuts and washers on if they're fit well enough?
If you did use nuts, did you have to do something special to keep them from backing out over time?
7 weeks ago
I also made a board for the Nano
Question 8 weeks ago on Step 1
I am new to building this have got most of the parts but don't have a 3d printer can I buy the 3d printed parts as a kit or can you direct me to a download of files I can give to someone to print out for me appreciate any help regards Trevor
Question 1 year ago
Can this be put on a Arduino Nano? I couldn't get the sketch to transfer but I'm not sure if I'm doing it right haha
Answer 7 months ago
Late response, but yes you can use the Arduino nano, just make sure the pins between the Nano and the Adafruit Servo Driver are setup like this:
(Adafruit) SDA > A4 (Arduino Nano)
(Adafruit) SCL > A5 (Arduino Nano)
Question 1 year ago
Hi there
Great project, Id love to build it. Only thing stopping me is the eyeball itself. Its beyond me to build it but you can buy them online. Just wondered what size eyeball we need!!
Answer 1 year ago
the placeholder eyes in the package are 32mm
Answer 1 year ago
Don't let that stop you. I was able to make this using the file from this instructable. It just takes a little bit of work but is really pretty simple.
1 year ago
Can someone give me this 3D print design
1 year ago
How to control
Question 2 years ago on Introduction
Love it, any chance of getting the CAD files as opposed to the STL files?
3 years ago
Can you recommend a 3d printed face to install this in?
Thanks,
Theron Wierenga
Question 3 years ago
Yet another! The specs call for a 25 mm pushrod. The hole in the link in 5 mm deep and in my ball-link it is 10 mm, so does that mean we should aim to have 10 mm of thread exposed when assembled? Thanks.
Question 3 years ago
Another question please. Have you looked at PETG for these parts? Seems to be stronger and a little more flexible that PLA.
Tony
3 years ago
Just about to start this, having just finished the original single-eye. A comment and a question. I think it would be helpful to add a regular circuit diagram to the instructions, as the Fritzing image is sometimes not clear to us noobs. Is there a specific reason for the switch to metal-geared MG90s servos from SG90s? I have SG90's and would like to keep the cost down! Thanks for a great project. Tony