-
[Build](https://robotsforthat.com/build/) / **Animatronic eyes**

v1 prototype

# Animatronic eyes that look around and blink

A pair of robot eyes that look left, right, up and down and blink every few seconds, with quick darting moves like real eyes. Three small servo motors, one ESP32 board and five 3D printed parts.

3D render of version 1. Real build photos come from the first builds.

Servos **3**

Printing **About 6 to 8 hours (estimate)**

Build **About 1 to 2 hours (estimate)**

Honest status Version 1 is a first prototype: designed and checked on screen, not printed and tested yet. Expect small fixes such as a hole that is a bit tight. The first build photos will shape version 2.

## Every part, one cart

Prices checked 2026-10-19. Packs come with spares, so the parts you actually use cost less. We may earn a commission.

| Part | You use | Price |
|---|---|---|
| [MG90S metal gear micro servo, 4 pack](https://www.amazon.com/dp/B07L6FZVT1?tag=robotsforthat-20) | 3 of 4 | $13.88 |
| [ESP32 dev board, USB-C, 3 pack](https://www.amazon.com/dp/B0CR5Y2JVD?tag=robotsforthat-20) | 1 of 3 | $16.99 |
| [PCA9685 16 channel servo driver](https://www.amazon.com/dp/B0CRV3MK14?tag=robotsforthat-20) | 1 | $12.99 |
| [5V 3A power adapter](https://www.amazon.com/dp/B09NLMVXMZ?tag=robotsforthat-20) | 1 | $8.59 |
| [Dupont jumper wires, 120 pcs](https://www.amazon.com/dp/B01EV70C78?tag=robotsforthat-20) | about 10 | $6.98 |
| [M2 and M3 screw and nut kit](https://www.amazon.com/dp/B0G8F366MV?tag=robotsforthat-20) | about 12 | $8.99 |
| [Stiff steel wire, 1 mm](https://www.amazon.com/dp/B0C5VXVDLW?tag=robotsforthat-20) | 2 short links | $11.00 |
| Total | | $79.42 |

[Add all 7 parts to my Amazon cart](https://www.amazon.com/gp/aws/cart/add.html?AssociateTag=robotsforthat-20&ASIN.1=B07L6FZVT1&Quantity.1=1&ASIN.2=B0CR5Y2JVD&Quantity.2=1&ASIN.3=B0CRV3MK14&Quantity.3=1&ASIN.4=B09NLMVXMZ&Quantity.4=1&ASIN.5=B01EV70C78&Quantity.5=1&ASIN.6=B0G8F366MV&Quantity.6=1&ASIN.7=B0C5VXVDLW&Quantity.7=1)

You also need: About 60 g of PLA or PETG filament. A 3D printer, or an online print service. A USB-C cable for uploading the program.

Free build tool

## Build it step by step on your phone

16 steps, one at a time, with a drawing and a check after each one. Stuck? Show the AI coach a photo.

[Start building →](https://robotsforthat.com/lab/build/animatronic-eyes/steps/)

## All 16 steps

## Part 1: Print and prepare

Step 1 of 16

### Print the five parts

Print base, cradle, lids and tie bar once and the eyeball twice, from the free files. Use 0.2 mm layers, 3 walls and 20% infill. Turn supports on for the eyeballs and the lids.

Free print files About 60 g of PLA or PETG

**Tip:** Print the eyeballs with the pupil facing up so the front stays smooth.

**Check:** 6 printed parts on the table. Both eyeballs round and smooth on the front.

**Common mistake:** Printing the eyeballs without supports. The bottom sags and the post will not fit.

Step 2 of 16

### Clean the prints and test the posts

Pull off all supports. Slide each eyeball onto a post of the cradle. It should turn freely with a light push. If it is tight, twist a 6 mm drill bit by hand in the hole under the eye.

**Check:** Each eye turns on its post with one finger. No support bits left in the hole.

**Common mistake:** Forcing a tight eye onto the post. The post can snap.

Step 3 of 16

### Paint the eyes

Paint the ring on the front of each eye in your iris color, then the small center circle black. Let it dry for 20 minutes.

Paint or paint pens

**Tip:** A paint pen is easier than a brush for the black pupil.

**Check:** A colored iris and a black pupil on each eye.

**Common mistake:** Painting before testing the fit. Sanding a painted eye ruins the paint.

## Part 2: Electronics

Step 4 of 16

### Wire the ESP32 to the servo board

Connect 4 jumper wires from the ESP32 to the PCA9685: 3.3V to VCC, GND to GND, pin 21 to SDA, pin 22 to SCL.

ESP32 board PCA9685 board 4 jumper wires

**Tip:** Use the same wire colors every time: red for power, black for ground.

**Check:** 4 wires between the two boards. Pin 21 goes to SDA, pin 22 to SCL.

**Common mistake:** Swapping SDA and SCL. Nothing moves and there is no error.

Step 5 of 16

### Plug in the three servos

Plug the servos into the PCA9685: pan on channel 0, tilt on channel 1, blink on channel 2. The brown wire goes to the edge marked GND. Screw the 5V adapter's wires into the V+ and GND terminal.

3 MG90S servos 5V 3A adapter

**Check:** 3 servos on channels 0, 1 and 2. Brown wires all on the GND side.

**Common mistake:** Plugging a servo in backwards. It will not move, and it can get hot.

Step 6 of 16

### Upload the program and center the servos

Install the Arduino app and the Adafruit PWM Servo Driver library. Open animatronic_eyes.ino from the files, connect the ESP32 by USB-C and press Upload. Plug in the 5V adapter. Every servo moves to its middle position.

USB-C cable animatronic_eyes.ino

**Tip:** Unplug the 5V adapter again before the next step. You will turn it back on at the end.

**Check:** Serial monitor says: Eyes ready. All 3 servos turned to their middle.

**Common mistake:** Fitting servo horns before this step. The eyes end up pointing to one side.

## Part 3: The moving eyes

Step 7 of 16

### Mount the pan servo under the cradle

Push the pan servo up into the slot behind the posts, shaft up, from under the cradle. Fix it with its 2 small screws.

Pan servo 2 servo screws

**Check:** The servo shaft sticks up behind the eyes. The servo does not wobble.

**Common mistake:** Turning the shaft by hand. It is centered now, keep it that way.

Step 8 of 16

### Put the eyes on the posts

Slide both eyes onto the posts with the lever pointing back. Turn them so they look straight ahead.

2 eyeballs

**Check:** Both eyes look straight forward. Both levers point back.

**Common mistake:** Putting an eye on with the lever to the front. It cannot connect to the tie bar.

Step 9 of 16

### Join the eyes with the tie bar

Lay the tie bar on both eye levers so the holes line up. Fix each end with an M2 screw, snug but not tight.

Tie bar 2 M2 x 8 screws

**Check:** Turn one eye and the other turns with it.

**Common mistake:** Tightening the M2 screws hard. The eyes stop moving smoothly.

Step 10 of 16

### Link the pan servo to the tie bar

Put a servo horn on the pan servo pointing forward. Bend a short piece of 1 mm wire with a Z at each end and hook it between the horn and the slot in the middle of the tie bar.

1 mm wire Servo horn Pliers

**Tip:** Bend the wire a little longer first, then shorten it until the eyes look straight ahead.

**Check:** Eyes look straight ahead with the servo centered. The wire does not rub on anything.

**Common mistake:** A link that is too short. The eyes squint to one side.

## Part 4: Lids and tilt

Step 11 of 16

### Fit the lids

Spread the lid arms gently and fit them over the two lid brackets of the cradle. Push an M2 screw through each side so the lids swing over the eyes.

Lids 2 M2 screws

**Check:** The lids swing freely. They clear the eyes when they move.

**Common mistake:** Lids that rub on the eyes. Loosen the side screws a quarter turn.

Step 12 of 16

### Mount the blink servo and link the lids

Fix the blink servo in the front left slot with its 2 screws. Fit a horn, then bend a wire link from the horn to the small hole in the lid lever.

Blink servo 1 mm wire Servo horn

**Check:** Lids open with the servo centered.

**Common mistake:** Linking the lids when they are closed. They will never open fully.

Step 13 of 16

### Mount the tilt servo in the base

Push the tilt servo into the window of the right tower from the outside, shaft facing in, and fix it with its 2 screws. Fit a round horn.

Tilt servo Round servo horn

**Check:** The shaft points inward at the top hole height.

**Common mistake:** Shaft facing out. The cradle cannot connect to it.

Step 14 of 16

### Hang the cradle between the towers

Screw the right cradle arm to the round horn. Push an M3 screw through the left tower into the left cradle arm and add a nut. The whole eye cradle should rock up and down.

M3 x 16 screw M3 nut Horn screws

**Check:** The cradle rocks smoothly. The eyes look straight ahead and level.

**Common mistake:** Tightening the M3 pivot hard. The tilt servo struggles and buzzes.

## Part 5: Bring it to life

Step 15 of 16

### Mount the boards

Screw the ESP32 and the PCA9685 onto the four standoffs at the back. Tidy the wires so nothing touches the moving parts.

ESP32 PCA9685 4 M2 screws

**Check:** Boards fixed at the back. No wire near the eyes or the lids.

**Common mistake:** A wire under the cradle. It jams the tilt.

Step 16 of 16

### Power on and tune it

Plug in the 5V adapter. Watch the eyes for a minute. If anything hits a stop, change PAN_MIN, PAN_MAX, TILT_MIN, TILT_MAX, LID_OPEN or LID_CLOSED at the top of the program and upload again.

**Tip:** Smaller ranges look more natural. Real eyes rarely move to the edges.

**Check:** The eyes look around on their own. They blink every few seconds. No buzzing at the ends of a move.

**Common mistake:** Leaving a servo buzzing at a stop. It overheats. Shrink that range.

Drawings are made from the real 3D files. The new part in each step is orange.

## Free print files and program

Five STL files, the program for the ESP32, and a README with wiring and assembly notes.

[Download the files (zip)](https://robotsforthat.com/assets/files/animatronic-eyes-v1.zip)

| File | Print | Notes |
|---|---|---|
| base.stl | 1 | Flat side down |
| cradle.stl | 1 | Flat side down |
| eyeball.stl | 2 | Pupil facing up, supports on |
| lids.stl | 1 | Supports on |
| tie_bar.stl | 1 | Flat |

Version 2 adds a small camera so the eyes follow the nearest face.

## Builds of this project

No builds yet. Be the first: build it and share a photo.

[Share your build](https://robotsforthat.com/robot-kits/challenge/#enter)

HTML version: https://robotsforthat.com/build/animatronic-eyes/
