Creature Controller

Let’s take a look at my progress on my Creature Controller. This is the board that goes inside the Creatures themselves to control movement. I keep refining it as I go. This page is sort of my own museum where I can explain the decisions I made, and why.

August 2024 Version

A photo of the August 2024 version of my Creature Controller. Present is hardware to control eight servos, and an on-board RP2040.
A closeup of the August 2024 version of my Creature Controller

The summer 2024 version of my Creature Controller has been a huge leap forward! This board combines all four of the previous boards into one, and switches the interface to USB.

New features:

  • Onboard RP2040 chip, rather than having a dev board soldered on
  • Three onboard PAC1954 ICs, to monitor the following things:
    • Input (Both pre and post power protection)
    • 5v regulator
    • 3v3 regulator
    • Each servo itself
  • The voltage regulators are now SMD, and configurable via a voltage divider network
  • Onboard temperature monitoring
  • Eight channel ADC, allowing for use of servos that report their position
  • Control protocol is now spoken over USB (allowing for easy debugging on a macOS machine)

Let’s look at each of these.

Onboard RP2040

I chose to integrate in my own RP2040 microcontroller, rather than solder on a devkit. This allows me to get a lot more bang for my buck on the board size, since I don’t have to deal with pads being 2.54mm apart from each other. This also allows it to speak USB to the controller, rather than use the traditional DMX controller.

I made decision to break up the functionality of the controller into two pieces. The controller software on a Pi (well, any device that has a USB port and a C++ compiler) that does all of other heavy lifting for state, and the onboard microcontroller that handles the actual positioning of the servos, as well as reporting the sensor data back to the Pi. The RP2040 doesn’t calculate movements, it only does what it’s told from the computer.

It took me a bunch of iterations to come up with this design! At first I realized that I was going to need sensors on the servo board if I wanted to support positional sensors, and that got me thinking about “what if I put an RP2040 on the servo board…” and eventually it all clicked that I could combine everything together.

Power Monitoring

My goal is to be able to run Creatures inside my house as if they are alive and living with me, so I wanted to make sure I was able to monitor their power. I chose the PAC1954 microcontroller because it’s fast, provides voltage, current, and power, and runs over I2C.

Why do this?

Because I kept getting burned on the old servo boards. 😅 There was a period there of about a year where I always had at least one voltage regulator shaped burn on my fingers, and I wanted to be able to detect shorts in software and kill power the moment a short was detected.

SMD Voltage Regulators

I made the decision to go with more modern voltage regulators for a few reasons. One, I can configure them as needed via a voltage divider network (those are 0805 resistors just for this reason), and they’re a lot smaller. The type I was using before sticks up a good 15-20mm, which eats up a lot of space. This new design is way cleaner and way smaller.

Temperature Monitoring

This turns out to be the most important sensor on the board!

I’m currently making things on my army of 3D printers. PLA and PETG are great materials, but they get soft at fairly low temperatures. I’ve had failures because PLA parts got too soft and failed, so I wanted to be able to combat this.

Eight Channel ADC

I’ve included an eight channel Analog to Digital converter. It’s the same chip that’s in my Creature Joystick, so I know it well. My goal is to unlock the use of servos that have positional feedback, but I haven’t actually done it yet. (But have confirmed that it all works.)

My goal here is to be able to provide a controlled startup to a Creature. The servos I use are powerful, and I’ve had accidents where, when a Creature is first powered up, the forces on the plastic snaps a part as it jerks into position. I’m hoping to be able to use positional feedback to know where the motors are when it’s first powered on, and then use this information to slowly move the Creature into a home position.

Watching it all go!

Here’s a short video showing Mango up and running with this version of the Creature Controller!


June 2023 Version

This was the first version of my Creature Controller. It was broken up over four different board.

What was my vision in breaking it up over four boards? I wanted to make re-usable modules that I could re-use over and over again. They were designed in such a way that I could make them by hand as I needed to.

Servo Module

This is the servo module. It was designed to be the board that was tucked up into the creature itself. It has up to four channels (I also made a smaller, two channel version), each with its own smoothing capacitor and voltage regulator. There’s no actual logic on board, it’s only an extension of the main logic board.

I designed the system such that I can put three of these off one logic controller. The ribbon cable links back to the logic board.

Power Module

The power module has one main function. It allows for the controller to kill power to the motors in a hurry if needed. It comes up in a state where no power is being supplied on the 12v rail, and it waits for a signal from the logic board to act. (The E-Stop pin needs to be driven low.)

It uses an old school relay, mostly because I like hearing it go CLICK when the power comes on. 😍

Server HAT

This was just a fun thing I made on a whim. It’s a little HAT for the server that shows what’s going on. (Power, DMX signal being sent, running, playing an animation, streaming packets being received, sound playing, and heartbeat.) It had no real purpose other than I thought it looked cool.

I don’t use this anymore. Now I do the “Virtual Status Lights” in software and it’s communicated over a web socket back to the Creature Console.