Last time I was at Disneyland Paris and saw various Disney and Pixar characters used as shoulder plushies. They were so cute and popular that they were sold out by the time I got to the gift shop. Inspired by Disney's Imagineers and animatronic artists, I decided to buy a plushie online and make it totally unique for our next trip to Disney.
I wanted to create an animatronic shoulder plushie of Bruni, the fire-breathing salamander from Frozen. With the help of a Pimoroni Pico LiPo, Tower Pro SG92R servo, Flora Neopixel, and kitelight bright EL-Wire, I was able to bring Bruni to life with 'breathing fire' and wagging his tail. I used MicroPython v1.19.1 to code the movements and light effects, and now Bruni is ready to accompany us on our next Disney adventure.
The main coding challenge was to have the flame and tailwagging functions to work fully independent on the Pimoroni Pico LiPo board so I could switch the flame on or off while the tailwag routine was still running. You see in the code that the routine is a longer running sequence when the button is pressed. Coding is more of a hobby than profession so I learned quite a lot here :)
The project was full of 'firsts' like designing a flame that fits Bruni's appearance, CNC-ing it out of plexiglass, designing and fabricating the tail components.
- Pimoroni Pico Lipo 4Mb board
- Galleon LiPo 3.7v - 400 mAh (in hardcase shell)
- TowerPro SG92R servo to control the tailwagging motion
- Adafruit Flora RGB Neopixel V2
- two microswitches (clickety-click textile style), one in each front paw
- 18mm sewable Neo-Dymium magnet (can hold 1.9kg) for Bruni
- 18mm sewable Neo-Dymium magnet + 25mm Neo-Dymium magnet (can hold 3.1kg) for shoulder patch base.
- The microswitch in his front-right-paw activates the flame. The flame simulates a 'natural' fire-breathing dragon in blue-purple-pink-magenta flames in various levels of brightness.
- The microswitch in his front-left-paw activates his tail-wagging-function. The tailwag is simulating 'natural' behavior in 4 stages (2 to the left and 2 to the right). The angle or range of each wag is randomized. The function runs the tail 4 times randomly within a 60 secs timeframe.
A not-so-short impression of the build process going from 'just' the pluche animal to the animatronic version.
First off, an overview of the components used. You see the EL-Wire included here however I have not yet integrated this on Bruni's back. I was thinking to outline his purple markings but found it challenging to integrate. So giving it some more thought.
Little bit of a nervous moment cutting Bruni open to be able to insert all the components. I've sewn in a piece of velcro so I can still charge the LiPo and work on Bruni's components.
I've sewn in a strong magnet inside Bruni. The 'plate' that Bruni sits on is an old plastic card with two supermagnets glued to it and encased in soft fabric.
I've made the original version of the tail wagging motion but found that the round 3D printed sections were rubbing the top/bottom of Bruni's skin deforming the tail's shape. So I drew new ones. On the right the original tail version, on the left the 2.0 version. The sleeker 3D printed sections fit Bruni better.
First time testing the tailwag and holding Bruni over the component to see how wide the range would be.
I'm using a Snapmaker A250 for all my builds as this platform can 3D print, CNC, laser engrave and cut. Here you see the CNC head in action cutting out the flame from a piece of transparent plexiglass.
The custom designed and CNC'd flame from transparent plexiglass, the custom made 3D printed mount/bracket and the Flora pixel make up the components for the flame.
Testing the flame function, it is bright in full darkness, maybe I'll add a lightsensor to compensate.
Attached the flame to Bruni. No glue needed, the bracket holds the flame tight. After two Disney trips, the flame is still securely fastened.
The animatronic tail goes in, it is a very tight fit. The bottom plate is not yet attached to the servo so I have a bit more wiggle room. Next is adding the stuffing back to fill up the tail.
Finally, the final piece is adding the heart to Bruni.
This is how Bruni can be easily re-charged. The 400mAh LiPo is holding up nicely for a day at the park although I do recharge for the evening fireworks/drone show.