LED Storm Cloud

I often find projects opportunities that I say are “for my wife” but really are just an excuse to have fun making something. In this case I have been intersted in making an LED storm cloud for a while, and decided it was time to go for it.

I had seen Youtube videos of people glueing LEDs to their ceiling or jammed inside paper lanterns, gluing cotton all over it, and calling it good. The effects can be pretty nice but I wanted something smarter. While I’m pretty happy with the end result of this project, if I was to do this again I would design 3D printed spheres instead of using paper lanterns to simplify things.

Hardware:

  • WS2811 12v LED Strip (2-3 meters, prices vary)
  • ESP8266 ( $3-$5 on AliExpress, I usually use D1 Mini’s)
    • Any ESP32 or ESP-01 will also work, but ESP-01 will not usually have enough memory for OTA updates.
  • 1x 12v Power Supply with standard size Barrel Plug
  • Others:
    • A 12v to 5v adapter
    • 12v female barrel plug
    • 5v+ capacitor
    • 6″ paper lanterns (I got a 10 pack on Amazon for under 10 dollars).
WS2811 LEDs come in various lengths, waterproof ratings, densities.
ESP8266
A generic step down regulator; 10 for $4 on AliExpress.

Printables:

There are two main components in my design: The interlocking mount that holds the paper lanterns and LEDs, and the controller box. The ZIP has two different lids for the controller box as I like to make my designs modular.

As usual I recommend using custom support settings and making the infill as light as possible. There are a lot of supports around the center structure.

Construction:

After printing 5 of the mounts and making adjustments as I went I set to screwing, and later gluing, them together. This created a fairly sturdy structure to mount everything to before attaching the paper lanterns to the mount’s hooks and running LEDs throughout.

You can see the first two prints had issues with tabs, resulting in breakages.

My workspace is limited, so I chose to use an old painting to protect our mini fridge.

Top View; I did not bother taking photos of the gluing process.

At this point I spent some time working on the controller; I had pieces on order but had to wait for the right power adapters to come in.

While not necessary, I chose to use a PCB to add header pins to the power supply for easy changes and addition.

The controller box was mounted on the back side of the cloud.

You might notice that the controller box is bright blue; it turns out that Pin 4 on this board controls the status LED and should NOT be used for the LED strip pin if you sleep in the same room.

Shot of a “strike”.

A white power cable extension tidies up the look.

Code:

Right now I am getting the best effect out of Twinkle and Fireworks, but it’s my intention to write several Node-Red automations that will randomly change the color to regular lightning colors during the flashes, as well as set brightness and color for normal bedroom ambiance throughout the day.

esphome:
  name: "ledcloud"

esp8266:
  board: d1_mini

# Enable Home Assistant API
api:
  encryption:
    key: "123456789123456789123456789123456789123456789"

ota:
  password: "1234567891423456789123456789"

wifi:
  ssid: !secret wifi_ssid5
  password: !secret wifi_password5

# Enable logging
logger:

status_led:
  pin:
    number: D0
    inverted: true

light:
  - platform: neopixelbus
    type: BRG
    variant: WS2812
    pin: D3
    num_leds: 60
    name: "LED Cloud"
    effects:
      - addressable_color_wipe:
      - addressable_color_wipe:
          name: Color Wipe Effect With Custom Values
          colors:
            - red: 100%
              green: 100%
              blue: 100%
              num_leds: 1
            - red: 0%
              green: 0%
              blue: 0%
              num_leds: 1
          add_led_interval: 100ms
          reverse: false
      - addressable_twinkle:
      - addressable_twinkle:
          name: Twinkle Effect With Custom Values
          twinkle_probability: 5%
          progress_interval: 4ms
      - pulse:
      - pulse:
          name: "Fast Pulse"
          transition_length: 0.5s
          update_interval: 0.5s
      - pulse:
          name: "Slow Pulse"
          # transition_length: 1s      # defaults to 1s
          update_interval: 2s
      - flicker:
      - flicker:
          name: Flicker Effect With Custom Values
          alpha: 95%
          intensity: 1.5%
      - addressable_fireworks:
      - addressable_fireworks:
          name: Fireworks Effect With Custom Values
          update_interval: 32ms
          spark_probability: 10%
          use_random_color: false
          fade_out_rate: 120

Coming up in Part 2:

One of my intentions with this project was to include a real lightning detector; this would be a great addition to my unnecessary HomeAssistant sensors and create the potential for real-time lightning strike simulations during storms; something I know my wife would enjoy.

I purchased a JMCU AS3935 Lighting Sensor and configured it for I2C communication, per ESPHome’s documentation and other online resources. Unfortunately I either have a faulty unit, or the I2C protocol on this device (as reported by some online) is not following the standard and is unreliable; the same setup worked with another I2C device so it’s hard to tell.

I intend to sort out the issues with the live lightning detector as well as add my own automations for part 2, and complete the writeup with several example videos.