Castform

A weather-changing Castform plush with a mechanical form swap.

Project Idea

It all began with this...

Castform plush used as inspiration for the final project
The Castform plush that inspired the project.

This summer my family brought me a Castform plush from Pokémon game Pokopia. For those who are not super familiar with context, Castform is a pokemon whose design is inspired by Japanese Teru teru bōzu dolls (照る照る坊主). Teru teru bōzu dolls are ghost-like dolls often put up by children outside doors and windows in wish for a sunny day. Consequently, the gimmick of Castform is that its appearance changes depending on the weather in battle. It has 4 different forms: Normal, Sunny, Rainy, and Snowy. (No Sandstorm form for some reason even though it is a common weather in the game.)

Castform forms in Pokémon go. Left to right: Normal, Sunny, Rainy, Snowy. Image credit: ggrecon.com
Castform forms in Pokémon go. Left to right: Normal, Sunny, Rainy, Snowy. Image credit: ggrecon.com

While Castform somewhat went under the radar in both popularity as well as competitive play for 20 years since its introduction, it always holds a very dear place in my heart for being one of the first Pokémon I know. Luckily it had a (somewhat) glorious comeback in Pokémon game Pokopia, in which it became a cute in game decoration which later became an actual plush. The neat thing about the plush is that it can be swapped between different forms by rotating up and down.

Castform plush that has two forms.
Castform plush that has two forms. Image credit: pokemoncenter.com

This is all very neat and dear to me, and I had great fun swapping it around in the morning to reflect the weather outside. But soon, an idea struck me: what if I could make it do this on its own?

Initial Mechanism

My current idea is to mount the plush forms around a rotating structure. A motor or rotating wheel would move the appropriate form into the visible position. And hopefully gravity would do the rest for me by pulling its dress down to complete the transformation.

Additionally, the machine need to receive weather information either from a local sensor, such as a humidity sensor, or from an online weather service. We could also add a little display to show the current weather/time etc.

Initial sketch of the idea.
Initial sketch showing the idea.

Blender Modeling

After making the initial sketch, I started recreating the basic geometry in Blender. At this stage I am not trying to model the complete machine and draw to scale. Instead, I am using simple shapes to determine the overall proportions and mechanical arrangement.

Castform blockout and basic settings in Blender
Castform blockout and basic settings in Blender.
Castform holder and base in Blender
Castform holder and base in Blender.

The idea is that in either form, Castform plush will hang from the top holder through strings once it locks into place. The box will hold microcontroller which takes weather input and feeds the decision to the motor, which will rotate the appropriate form into the visible position.

Castform sunny form in Blender
A (Rough) model of the Castform sunny form.
Castform rainy form in Blender
A (Rough) model of the Castform rainy form.

I did not model the dress fabric part realistically. This may be a future improvement. I am also not sure how cleanly the dress will fall once the motor rotates. Maybe it's worth adding a small weight to the dress to help it stay in place.

Interactive model of the Castform weather mechanism. Drag to orbit, scroll to zoom.

Electronics Design

The next step is to make the machine physical. The board has to rotate the Castform plush from the current weather, so this is the circuit for that mechanism.

Since I have some PCB experience before so I want to do something bigger and got ambitious during my sketch. Below is a table of modules I want to build:

Module Key part Usage
Microcontroller XIAO ESP32-S3 Sense Control all the components and provide 3.3V power to the board.
Servo Motor MG996R positional servo motor Used to rotate the Castform plush
OLED Screen I2C OLED display Display weather information and date information.
LED Lights Addressable RGB LEDs Light up the board and decorate around the machine.
Audio Amplifier MAX98357A Provide voice output for potential voice interaction.
Button Push button Used for debugging and manual control.
Expansion Connector 4-pin 2.54mm pitch connector Used to connect additional sensors (i.e. humidity sensor).

Schematic Design

I chose to use KiCad for the schematic and board design.

Microcontroller, power connectors, and protection parts
First piece of my schematic: Microcontroller M1 and its corresponding accessories. Connector J1 and J2 will supply power and provide servo communication. D1 offers some reverse voltage protection for the microcontroller. And two capacitors C1 and C2 are used to stabilize the power supply.
OLED and LED connector
Next up I put in the parts to support OLED screen and LED lights. J3 connects two output from M1 to the OLED screen. And the resistor R1 and R2 are used to pull up the voltage level through 3.3V to the OLED screen. Since native 3.3V from M1 is not enough for LED lights, I added a logic buffer U1 on the right to provide 5V supply under M1 command.
Audio amplifier
Next up I put in the parts to support audio amplifier. J5 connects two output from M1 to the audio amplifier. Again this is powered by 5V power supply with two additional capacitors C6 and C7 to stabilize the power supply.
Button and expansion connector
Next up I put in the parts to support button and expansion connector. J6 connects the button to M1. And J7 provides some additional I2C control that shares with the OLED screen. We can potentially use it for humidity sensor control if we are not using API approach.
Swapping out the logic buffer
After some inspection, I found that the original buffer I had in mind is too small for our milling clearance. So I swapped it out for a bigger one 74AHCT125 on schematic. Note that it has five subcomponents in the drawing but we will not use most of them.
Electrical rule check
After all these parts are added, I did an Electrical Rule Check (ERC) to make sure my design is valid. There are no major issues and I mostly need to address the floating pins and assign proper power symbol so the software can recognize it.
Resolved electrical rule check
ERC issues fully resolved.

Board Design

After the schematic is done, I can move on to the board design.

Unrouted board with parts placed from the schematic
First screenshot of board design. I moved everything from the schematic to the board and nothing is connected yet.
First round of routing
Results of initial routing. Some key design features include using 1mm and above wire width for my main current paths and add board fill and drill holes for physical support. I will not be using the underpins of M1 so I plan to tape it.
Tightened board after a second round of routing
After the initial routing, I did ERC again and used another round to clean up and tighten my design. The board is physically smaller now. Though unfortunately I am not able to resolve the isolating pieces of GND copper. So I plan to use jumper wires on the back to connect them.
Gerber preview of the board
Gerber image of the board. Ready to be sent for milling.

Design

Download the Castform board (KiCad)