3D Printed Cauldron

In this project, we’re making a Bluetooth controlled light up cauldron. This 3d printed cauldron is designed to house Adafruit Circuit Playground Bluefruit.

Bluefruit NeoPixels

You can change the color of the LEDs with an iPhone using the Bluefruit App for iOS and Android. This uses the picker color from the Bluefruit LE connect app for iOS and Android. It’s free to download, and lets you change the color and brightness.

Circuit Playground Bluefruit

The Circuit Playground Bluefruit features the nRF52840 and it’s easy to use with Adafruit’s CircuitPython and Arduino.

Light Up Cauldron 

The bowl is 3d printed in PLA filament without any support material. The design features internal threads for screwing into the bottom half of the cauldron. All of the electronics are secured underneath the cauldron so it’s a nice little portable project. 

List of ingredients

Here's a list of things needed to build this project.

  • Dry Ice
  • 2oz Appetizer Cups (80mm/3in diameter)
  • Glow-in-the-dark Putty
  • Warm Water
  • Container with spout
  • Tongs
  • Superglue


shot of a Black woman's neon-green manicured hand holding up a Circuit Playground Bluefruit glowing rainbow LEDs.
Circuit Playground Bluefruit is our third board in the Circuit Playground series, another step towards a perfect introduction to electronics and programming. We've...
In Stock
Fully Reversible Pink/Purple USB A to micro B Cable
This cable is not only super-fashionable, with a woven pink and purple Blinka-like pattern, it's also fully reversible! That's right, you will save seconds a day by...
In Stock
Angled shot of a Lithium Ion Polymer Battery 3.7V 500mAh with JST-PH connector.
Lithium-ion polymer (also known as 'lipo' or 'lipoly') batteries are thin, light, and powerful. The output ranges from 4.2V when completely charged to 3.7V. This...
Out of Stock
Filament for 3D printers in various colors and types stacked together.
Having a 3D printer without filament is sort of like having a regular printer without paper or ink.  And while a lot of printers come with some filament there's a good chance...
Out of Stock

3D Parts

STL files for 3D printing are oriented to print "as-is" on FDM style machines. Original design source may be downloaded using the links below.

Slicing Parts

The bowl has a 1.5mm thick shell and it can be printed without any support material.

  • PLA filament 220c extruder
  • 0.2 layer height
  • 10% gyroid infill
  • 60mm/s print speed
  • 60c heated bed

Snap Fit Mount

The Circuit Playground PCB snap fits into the case. Insert the PCB at an angle to fit under the snap. Line up the stand offs with the mounting holes and press down to snap fit.

Top Cover

Use translucent filament for the top cover. The cover snap fits onto the bottom of the bowl and features a notch for passing a micro USB cable for power.

CAD Assembly

The components were modeled in the cad assembly. This animation shows where the electronics are mounted and how the parts fit together.

Container Size

Reference the inner dimensions of the bowl to gauge the size you'll needed for the water and dry ice. Use a water tight container like a plastic bottle or glass jar. We used a 2oz appetizer cup we found from a local party supply department store. 

Design Source Files

The project assembly was designed in Fusion 360. This can be downloaded in different formats like STEP, SAT and more. Electronic components like Adafruit's board, displays, connectors and more can be downloaded from our Adafruit CAD parts GitHub Repo.

Glue Parts

You’ll need to glue some pieces to make the bottom half of the cauldron. You can use superglue to attach these two pieces together. 

Please be careful with superglue - it can instantly bond skin and should never, ever be near eyes. Best used with supervision.


You’ll need to glue some pieces to make the bottom half of the cauldron. Use superglue to attach the PCB mount to the bottom half. 

Bottom Half

Use the mounting holes in the center to line up the parts. Firmly hold parts together while glue sets.

Design Source Files

The project assembly was designed in Fusion 360. This can be downloaded in different formats like STEP, SAT and more. Electronic components like Adafruit's board, displays, connectors and more can be downloaded from our Adafruit CAD parts GitHub Repo.

Install CPB board

  • Orient the USB port with one of the notches.
  • Line up the mounting holes with the standoffs.
  • Insert the PCB at an angle to get underneath the snaps.
  • Firmly press down to snap fit the PCB into place. 

Install Top Cover

The Circuit Playground Bluefruit PCB snap fits into the mount. Tabs on the side keep the board in place without any screws.

USB Notch

The cover features a notch for passing a micro USB cable for power.

Install Bowl

The bowl screws onto the bottom half of the cauldron and is tightly fastened with a nice and seamless finish. 


USB Access

The micro USB port should be accessible through the hole on the back of the bowl. If the JST connector is visible instead, remove the Circuit Playground PCB and rotate it 180 degrees.

Plug-in Power

On the back of the bowl we have access to the micro USB port for power and programming.

There’s enough space at the bottom for a battery but you can also power the board over USB.

Setup Circuit Playground Bluefruit with CircuitPython

We'll need to get our board setup so we can run CircuitPython code. Let's walk through these steps to get the latest version of CircuitPython onto your board. 

Mu Python Editor

Mu is a simple Python editor that works with Adafruit CircuitPython hardware. It's written in Python and works on Windows, MacOS, Linux and Raspberry Pi. The serial console is built right in so you get immediate feedback from your board's serial output!

Your board's bootloader must be 0.6.1 or later to be able to load CircuitPython 8.2.0 or later.

 Quick Start

  • Download the CircuitPython UF2 for Circuit Playground Bluefruit
  • Connect Circuit Playground Bluefruit to your computer over USB and press the Reset button
  • Open INFO_UF2.TXT, if the bootloader version is less than 0.6.1 then update the bootloader per this guide page.
  • Drag-n-drop the CircuitPython UF2 onto the CPLAYBOOT drive - the drive will vanish and a new CIRCUITPY drive should appear.
  • Copy code and library files to the CIRCUITPY drive
This project needs version 5.0.0-beta.0 or higher.

Download Adafruit CircuitPython Library Bundle

In order to run the code, we'll need to download a library. The download linked below will contain all the libraries available for CircuitPython. To run the code for this project, we only need the Adafruit Circuit Playground and Adafruit Bluefruit Connect libraries. Unzip the library bundle and search for the library. Drag and drop it onto a folder named lib on the CIRCUITPY drive (create the folder if it is not already on the Circuit Playground Express).

Required Libraries 

  • adafruit_ble
  • adafruit_bluefruit_connect
  • neopixel.mpy

Upload Code

Click on the download link below to grab the main code directly from GitHub. Rename the file to code.py and drop it onto the CIRCUITPY main (root) directory. The code will run properly when all of the files have been uploaded.

Use any text editor or favorite IDE to modify the code. We suggest using the Mu Python Editor. See below for more on Mu.

# SPDX-FileCopyrightText: 2019 Dan Halbert for Adafruit Industries
# SPDX-License-Identifier: MIT

# CircuitPython NeoPixel Color Picker Example

import board
import neopixel
from adafruit_ble import BLERadio
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.nordic import UARTService
from adafruit_bluefruit_connect.packet import Packet
from adafruit_bluefruit_connect.color_packet import ColorPacket

ble = BLERadio()
uart_service = UARTService()
advertisement = ProvideServicesAdvertisement(uart_service)

pixels = neopixel.NeoPixel(board.NEOPIXEL, 10, brightness=0.1)

while True:
    # Advertise when not connected.
    while not ble.connected:

    while ble.connected:
        packet = Packet.from_stream(uart_service)
        if isinstance(packet, ColorPacket):

Glow Putty

We’ using this glow in the dark putty to create a slime that we can adorn along the rim of the cauldron.

This stuff has a thick clay like formulation so its not runny like regular slime which makes it less messy.

Add Putty

You can make it look like it’s dripping by adding little bits along the top and letting them droop over time, it almost looks like melted candle wax.

Never touch dry ice to your skin.

Dry Ice

When working with Dry Ice, you always need to be safe so handle this stuff with tongs. We got a pack of dry ice from our local grocery market.

Cups and Pouring Spouts

This appetizer cup holds about 2 ounces and fits nicely inside the bowl of our cauldron. Be sure to use hot water and container that has a pouring spout.

Dry Ice Fog

Here we’re using just a small amount of hot water. This lasts about a minute before the fog cuts out. So if you want to make the effect last longer, you’ll need to switch out with cold water. You'll want to be careful not to spill anything on your work surface.

Going Further

This could become much more sophisticated and control things like servos and motors to move things like the fog and slime. The onboard accelerometer, temp and light sensors could be used to change things like the colors of the LEDs or trigger sounds.

This guide was first published on Oct 06, 2019. It was last updated on Jul 25, 2024.