Color OLED Adds Life to Animatronic Eyes (Bonus: Optimization!)

SAM_0294 (Small)

The internet is sullying its collective pants over these animatronic eyes, and for good reason: a tiny color OLED screen provides a moving iris…the animation and intense colors are striking, like nothing you’ve seen.

Australian maker David Boccabella’s been posting his progress to the Stan Winston School of Character Arts forums, adding features and improving performance…though he’s hit a bottleneck recently…fortunately one that I recognized and may have a solution for…

In the progress videos you can see the pupil and iris “stuttering” as the background image — a BMP image file — is re-loaded off an SD card. The muscle contraction effect of the later video (using multiple image frames) is impressive in its realism, but the slow updates put a bit of a damper on the fun.

Something I (painfully) learned while working on the NeoPixel Painter project is that SD cards have two operating modes: a high-speed 4-bit parallel mode used by most consumer devices like cameras and card readers, and a serial (SPI) mode usable by more modest devices like microcontrollers. It turns out the SPI mode is inherently speed-limited…not just by the speed of the microcontroller or the SPI bus, but that the SD card itself can only issue blocks so fast over that interface…about 500KB/second if you’re really lucky.

David’s using the potent PJRC Teensy 3.1 microcontroller along with a small Freetronics OLED. The Teensy 3.1 has half a megabyte of flash program space…that’s huge. Not enough to store all the animation frames that were on the SD card…but given the speed of this microcontroller, it’s not necessary. By doing a lot of math up-front and placing the results in the Teensy’s copious program space, it’s only necessary to store a single iris image and apply some mathematical distortion to this in real time to create the muscle contraction effect.


I didn’t have the same OLED on-hand, so this was prototyped using a small TFT LCD display that operates on similar principles…the colors aren’t as nicely saturated but it proves the idea is sound…

In the Teensy 3.1’s ‘optimized-and-overclocked’ setting, this can manage 40 frames per second. Without overclocking, still a respectable 30 frames/second. No stuttering!

This was a quick-and-dirty test and the code is an embarrassing mess, there’s still a lot of room for some space optimizations and cleaning up some of the math. But if you’re interested in seeing how it works, I’ve posted the code on Github. Halloween’s coming and the world needs more monsters!

Adafruit publishes a wide range of writing and video content, including interviews and reporting on the maker market and the wider technology world. Our standards page is intended as a guide to best practices that Adafruit uses, as well as an outline of the ethical standards Adafruit aspires to. While Adafruit is not an independent journalistic institution, Adafruit strives to be a fair, informative, and positive voice within the community – check it out here:

Join Adafruit on Mastodon

Adafruit is on Mastodon, join in!

Stop breadboarding and soldering – start making immediately! Adafruit’s Circuit Playground is jam-packed with LEDs, sensors, buttons, alligator clip pads and more. Build projects with Circuit Playground in a few minutes with the drag-and-drop MakeCode programming site, learn computer science using the CS Discoveries class on, jump into CircuitPython to learn Python and hardware together, TinyGO, or even use the Arduino IDE. Circuit Playground Express is the newest and best Circuit Playground board, with support for CircuitPython, MakeCode, and Arduino. It has a powerful processor, 10 NeoPixels, mini speaker, InfraRed receive and transmit, two buttons, a switch, 14 alligator clip pads, and lots of sensors: capacitive touch, IR proximity, temperature, light, motion and sound. A whole wide world of electronics and coding is waiting for you, and it fits in the palm of your hand.

Have an amazing project to share? The Electronics Show and Tell is every Wednesday at 7pm ET! To join, head over to YouTube and check out the show’s live chat – we’ll post the link there.

Join us every Wednesday night at 8pm ET for Ask an Engineer!

Join over 36,000+ makers on Adafruit’s Discord channels and be part of the community!

CircuitPython – The easiest way to program microcontrollers –

Maker Business — “Packaging” chips in the US

Wearables — Enclosures help fight body humidity in costumes

Electronics — Transformers: More than meets the eye!

Python for Microcontrollers — Python on Microcontrollers Newsletter: Silicon Labs introduces CircuitPython support, and more! #CircuitPython #Python #micropython @ThePSF @Raspberry_Pi

Adafruit IoT Monthly — Guardian Robot, Weather-wise Umbrella Stand, and more!

Microsoft MakeCode — MakeCode Thank You!

EYE on NPI — Maxim’s Himalaya uSLIC Step-Down Power Module #EyeOnNPI @maximintegrated @digikey

New Products – Adafruit Industries – Makers, hackers, artists, designers and engineers! — #NewProds 7/19/23 Feat. Adafruit Matrix Portal S3 CircuitPython Powered Internet Display!

Get the only spam-free daily newsletter about wearables, running a "maker business", electronic tips and more! Subscribe at !

No Comments

No comments yet.

Sorry, the comment form is closed at this time.