Color OLED Adds Life to Animatronic Eyes (Bonus: Optimization!)
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.
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 has had paid day off for voting for our team for years, if you need help getting that going for your organization, let us know – we can share how and why we did this as well as the good results. Here are some resources for voting by mail, voting in person, and some NY resources for our NY based teams as well. If there are additional resources to add, please let us know – adafruit.com/vote
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 code.org, 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.