Introduction: The Eye of Mist and Fire

About: I am a hobbyist with an interest in open-source software, 3D printing, science and electronics. Please visit my store or Patreon page to help support my work!

In this Instructable, I will use a ultrasonic mist maker, a plastic container from King Sooper's and some 3D printed parts to make a wicked looking desktop fog machine with an adjustable iris diaphragm.

Blow smoke rings or add some illumination with an Arduino and addressable RGB LEDs to make it look like a flaming cauldron of fire!


For misting element and iris:

  1. One ultrasonic misting element
  2. One plastic container from King Sooper's/Krogers
  3. Four M3 screws
  4. 3D Printer

For illumination effects:

  1. Arduino
  2. WS2812B addressable LEDs

Step 1: Designing a No-Glue Printable Iris Mechanism

The iris mechanism consists of a base plate, 8 movable leaves, a rotating ring and a retaining clip. All these parts were printed on a standard 3D printer using PLA.

While I found a 3D printed iris design published online, it required gluing pegs on one side of the iris blades. I wanted a glue-free assembly process and I knew this was possible because I had many years ago come across a paper-craft iris design that relied on folded tabs rather than a pegs. I knew a thin 3D printed part can be easily folded, so I incorporated this into my 3D printed design.

The leaves in my design are printed flat on the print bed, but once the leaf is complete, a small 2mm tab is folded downwards along the crease. This leads to a functional iris without any glue!

Step 2: Assembling the Iris

Once all the components are printed, fold down the 2mm tab on each of the iris leaves along the scored line. Arrange the leaves on the base plate, with the tabs on the bottom and the pegs on the top. Each tab should fit into the corresponding slot on the base plate.

Once all the leaves are positioned, drop down the rotating ring to secure each of the pegs. Finally, drop in the C-shaped retaining ring and expand it to fit into the groove on the base plate. Once properly positioned, it should hold the entire mechanism together.

Step 3: Put It All Together

For my misting chamber, I used plastic sweets containers from King Soopers/Kroger's. I designed a 3D printed lid the same size as the original to cover the container.

I then placed the misting element along with water into the container and then attached the iris mechanism using four M3 screws.

Step 4: Adding Some Illumination Effects

While you can purchase some ultrasonic mist makers with built in LEDs, I do not know whether these have any soft of color effects.

Instead, I chose to use an Arduino to get some illumination effects. I recommend WS2811-based LED lights, which are available in multiple formats. For this project, a LED ring is ideal, but just about any shape that fits under the water container should work.

These LED rings with have three wires, the white goes to GND, the red goes to Vin and the green goes to pin 5. Due to current limits when running from the USB port, I do not recommend running more than 24 LEDs at a time.

I wrote a quick Arduino sketch to vary the color between oranges and yellows, to make the water appear to be a fiery cauldron!

#include <FastLED.h>
#define LED_PIN     5
#define CHIPSET     WS2811
#define NUM_LEDS    24
#define BRIGHTNESS  128
void Fire();
void setup() {
  delay(3000); // sanity delay
  FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  FastLED.setBrightness( BRIGHTNESS );
void loop() {
  Fire(); // run simulation frame; // display this frame
  FastLED.delay(1000 / FRAMES_PER_SECOND);
void Fire() {
    const float t = float(millis())/5000;
    const float temp = sin(t*1   + 0.10) * 0.04
                     + sin(t*2   + 0.25) * 0.03
                     + sin(t*4   + 0.65) * 0.06
                     + sin(t*8   + 0.80) * 0.04
                     + sin(t*16  + 0.67) * 0.02
                     + sin(t*32  + 0.89) * 0.01
                     - 0.3;    
    for( int j = 0; j < NUM_LEDS; j++) {
      CRGB color = HeatColor(128 + temp * 127);
      leds[j] = color;
The Elements Speed Challenge

Participated in the
The Elements Speed Challenge