Introduction: Simplified 3D Printed Animatronic Dual Eye Mechanism
Having built a simple single-eye mechanism in the past, I wanted to improve on the design as well as making it more accessible to the maker community. The updated assembly uses parts that can easily be bought online, and almost all the components can be printed easily without supports. Designing the model in this way does sacrifice some functionality, but I'll be releasing an optimised design in the future. This project is ideal if you want to build a functional and realistic eye mechanism, but don't necessarily have access to tools like a lathe or speciality components.
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.
This project will require some post processing of your prints, including some (hand) drilling and sanding, but other than the basics (3D printer, craft knife, screwdriver, Allen keys) there are no special tools needed.
Attachments
Supplies
Materials and Components:
- 3D Printer Filament: PLA is fine although I'd recommend you use a good brand because some parts are quite small and fragile. ABS is good for making realistic eyes but not necessary.
- 6x SG90 Micro Servos: https://amzn.to/2pG3crm
- Various M2 and M3 screws although any screws roughly that size should work ok. A kit like this:https://amzn.to/2JOafVQ should cover you.
- Arduino: This design was tested using a genuine Uno, but it's likely that any board which has SDA/SCL pins, 3 analogue inputs and a digital input will work. Arduino Uno: https://amzn.to/2JTs1Hs
- Servo Driver Board: I opted for a 16 channel PWM driver board from Adafruit: https://amzn.to/2JPOzsx
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
Tools:
- A pin vice hand drill might be useful for adjusting hole sizes: https://amzn.to/36BZNKM
Step 1: Printing
Printing may be somewhat challenging due to the small parts, but the majority of the parts print quickly and easily without supports. I used PLA for all my parts other than the eyes (which were ABS as it looks a bit more natural). There are a few delicate parts to look out for as well, but if you're using decent quality filament and you're happy with your print settings you should be fine. Finally, I used a layer height of 0.2mm and this was more than precise enough for this model - I suspect you could get away with 0.3mm even.
Step 2: Post-Processing
The eyes can be sanded and smoothed as much as you like, but a minimum of sanding may be necessary on the bottom of the model where the printer would have been printing an overhang. This is just to ensure the eye can rotate smoothly within the eyelids. The only other parts that I sanded were the eye adaptor components, just because they are a tight fit and the bottom few layers on my prints always tend to be a bit swollen.
The parts are designed to print such that some holes are undersized enough to be directly screwed into, whereas others are oversized enough so the screw will pass through them snugly. If your printer is making the holes to small to screw into or rotate smoothly around however you can use a little hand drill to drill out some of the holes to make them more precise, and tapping threads is an option too (although PLA usually grips screws fairly well anyway). Check the images for a guide as to which holes should be which size.
Step 3: Assembly
Once all your parts are printed and processed, you can assemble your model! It may be helpful to refer to the video to see how it all goes together. Also there's all the reference pics in one folder in my download, including an stl of the complete model you can look at.
- Connect the two bases with 10mm/12mm M3 bolts, this pivot point is for the y-axis of the eye motion and the eyelids.
- Place the servo in position and screw it in with some 4 or 6mm M2 screws, this serves as the actuator for the x-axis motion
- Attach the y-axis arm to the sub-base with a 4/5/6mm M3 screw, and attach a servo horn on the third hole from the centre using a 4mm or 6mm M2 screw. Check above to make sure the orientation of everything is right.
Start building the x-axis assembly by screwing the forks into the eye-adaptors with 4/5/6mm M3 bolts, the fork holes should be oversized so the screws bite into the adaptor, one goes in on a funny angle but you should be able to get it in.
Attach the three-point connector to the top of the forks, the M3 screw will bite into the undersized hole in the fork component. Also attach a servo arm on the final hole to the centre of the three-point connector using a 5mm M3 bolt (the hole on the servo arm will likely need to be drilled to 2.5mm - 2.8mm to accept the screw). I'd recommend manipulating the assembly to make sure it all moves okay without friction regularly as you build it up too.
Attach the eye centre-link to the eye adaptors with a 8mm M3 screw, make sure the flat surface of the centre-link is facing up and the sloping section facing down. You can also plug in the eyes at this stage.
Screw all this to the centre of the sub-base with two 8/12mm M3 bolts.
Load up the servo block with 5 TowerPro SG90 servos, in the correct orientation shown.
Work out which eyelid is which using the graphic, and connect the relevant connector with a 4mm or 6mm M2 screw, and attach a servo arm to the other end (use the last hole in the servo horn - you may need to drill this to 1.5mm - 1.8mm).
Attach the eyelids to the base, but don't worry about connecting any servo horns yet.
Attachments
Step 4: Wiring 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. The y-axis servo arm is in an awkward position to accept a screw, but I found that it held fine without a screw anyway. If yours doesn't, it may be helpful to remove one of the eyelid servos to screw it in. I'd recommend testing the motion with your joystick at this stage to make sure there are no issues.
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. Once all the servo arms are in position, its easy to screw them 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!
8 People Made This Project!
- bill and ben made it!
- GlennR21 made it!
- Miguel AngelA5 made it!
- jschrempp made it!
See 4 More
27 Comments
1 year ago
Hi,
This can be made even simpler and better!
I have modified it a little bit to get rid of the extra push button and use the joystick's push button instead. This requires a joystick wich has a built in push button and SW pin (Philips CJOY-XYSW). The SW pin is shorted to ground when you push the joystick.
What you need is to connect the joystick's SW pin to port 2 of the arduino directly and modify the setup code to use an internal pullup on pin 2 (so you can get rid of the 10k resistor). You also need to swap the HIGH and LOW values in the switch checking routine.
pinMode(2, INPUT_PULLUP);
...
if (switchval == LOW) {
pwm.setPWM(2, 0, 400);
pwm.setPWM(3, 0, 240);
pwm.setPWM(4, 0, 240);
pwm.setPWM(5, 0, 400);
}
else if (switchval == HIGH) {
pwm.setPWM(2, 0, uplidpulse);
pwm.setPWM(3, 0, lolidpulse);
pwm.setPWM(4, 0, altuplidpulse);
pwm.setPWM(5, 0, altlolidpulse);
}
Reply 2 months ago
will it still work if the resistor is there? And is the only thing I have to add (in terms of the code) the input pullup part?
2 months ago on Step 4
После печати PLA или ABS филаментом рекомендую обратотать каждую деталь, с помощью мягкой кисти, дихлорэтаном. Только соблюдайте технику безопасности - вентиляция помещения и респиратор! А так же не стоит наносить дихлорэтан избыточно. Достаточно один раз смазать.
Question 5 months ago
Can someone help me with code as its not only making run two servo motors..
Answer 4 months ago
Are you sure the power supply you are using is able to power 6 servos?
750mA x 6 = 4.5A . A power supply of 5V that can supply at least 5A is required to run this project.
1 year ago
how can i print the 3d model parts separately?its all downloading at the same time .please help
1 year ago
Great project - I got some eyelashes from Amazon which seems to set it off-
I did buy the suggested servos' but these were bigger than suggested as they did not fit- so I had to make some spacers. Its Ok but a bit of a struggle.
Anybody good at programming to get the eyes to move in sequence with eyelids?? I do not think I can do, it as not familiar with the coding
2 years ago
He realizado tu proyecto y funciona muy bien, he modificado algo del diseño de la base de los servos porque no tenia las dimensiones del G90, tambien se partio la pieza y la hice un poco mas gruesa, respecto al control he utilizado un Arduino Nano y lo he programado con ArduinoBlocks
Gracias excelente proyecto.
https://modding-maab.blogspot.com/2021/04/proyecto-ojitos.html
Question 2 years ago on Step 4
I am having an issue that the eyelid servos keep twitching. do you know what could be the cause of this?
Answer 2 years ago
Are you sending floats into the servo positioning functions? That could cause some chatter.
2 years ago
Here's a video of my project so far. I'm doing a set of classes to allow the scripting of a sequence of "scenes". Our goal is to have something ready for next Halloween. All of our code and documentation will be available on our GitHub account when we think it is stable (not yet!).
I am really impressed with this mechanism. If you need eyeballs, I recommend this one.
https://youtu.be/Yc7GSbDvWUc
Question 2 years ago
where is the code
2 years ago
Hey! Thanks for sharing this project!
Would you mind uploading the Remote Controller STL-files? That one looks quite nice.
- Fabian
Question 3 years ago on Step 4
I got the Parallax 2-axis joystick but your diagram is for the arduino joystick. Could you please tell me the substitute connections using the Parallax?
Question 3 years ago on Step 4
Hi there, great tutorial. I want to create this only a bit bigger. Want to use it in a dragon in a parade. Is it easy and possible to enlarge this project? The eyes should be minimal as big as tennis balls. Any suggestions how to do that?
Question 3 years ago
Where are the three missing STL files? Small_Pivot.stl Large_Pivot.stl Eyelink.stl
Not sure I could generate those myself.
Thanks
Question 3 years ago on Step 4
Hello, I'm building this for a final project at university. Could you attach more instructions for how the joystick is assembled? Thanks!
Answer 3 years ago
REALLY? You'd outright plagarize someone else's work? Make it "Your own" in some way like having cameras in the eyes. OOOPS, now that someone else's idea, but at least, you didn't see it done.
Reply 3 years ago
I'm giving Ikkalebob full credit, and my professor knows that it's already been done. It's for a digital fabrication art course, and I'm painting it, giving it eyelashes, and possibly making an actual head for it if we have the time. We're simply trying our best to replicate something that we have little to no knowledge about, and therefore challenging ourselves to learn all of this information in a short amount of time. But thanks for standing up for Will!
Answer 3 years ago
The joystick just wires up as the diagram shows. You could print a case for it, or use a Wii nunchuck instead.
Be sure to credit Ikkalebob in your university project :)