Sound Reactive Paper Lanterns with LedFx
2024-05-14 | By Adafruit Industries
License: See Original Project LEDs / Discrete / Modules Wifi Wireless Adafruit Feather
Courtesy of Adafruit
Guide by Erin St Blaine
Overview
Create an array of paper lanterns and control them with sound.
This guide uses a Feather ESP32 V2 loaded with the free, open source WLED software.
WLED runs on the Feather, using WiFi to allow you to control the lights with your phone, PC, or any wifi-enabled device. This is a lot of fun and will make for a beautiful piece of light art in your space that's easy to control and program with your phone.
But this guide goes further! WLED interfaces seamlessly with LEDFx, an open-source program that runs on your computer to capture and analyze sound, either from your music player or from your computer's microphone. It takes the sound and translates it into light effects, so your lights can run sound-reactive animations over WiFi without needing to add a physical microphone.
WLED has sound reactive effects. Why not just use WLED?
WLED does have sound reactive modes available, but the sound needs to be run and processed through a small microphone soldered to your ESP32. These microphones don't have the same quality pickup as the one on your PC and may not be physically located where the sound is optimal. The effects don't have as many controls and tend to be a little "blinky".
LEDFx gives you great sound input and a lot of solid animations with controls that allow you to really dial in your animations. It's just as easy to use but I've gotten much nicer results with LEDFx.
Parts
- Adafruit ESP32 Feather V2 - 8MB Flash + 2 MB PSRAM
- NeoPixel Ring - 12 x 5050 RGB LED with Integrated Drivers
- 1 x On/Off Switch
- 1 x Female DC Power adapter
- 1 x 5v 2A Power Supply
- 1 x JST Connector
- 4-wire 26awg Silicone Coated Ribbon Cable: Adafruit sells this wire, but only in 1m lengths. It's definitely possible to build this with 1m lengths of wire, but I found it a lot easier to get a long unbroken strand for the power and ground wires, and it's more efficient to cut exactly the lengths you need. Click the link above to find it on Amazon.
Additional Materials
- Paper lanterns in various sizes
- A computer and speakers to run the software
Wiring Diagram
Feather Setup
Power comes in through the screw terminal and passes through the on/off switch, then splits to go to the Feather (via the JST port) and also to the LEDs. This is a safer way to power a large number of lights, since it doesn't pull all the power the lights require through the delicate electronics in the Feather.
NeoPixel Strand Setup
Each NeoPixel ring is connected to 4 wires: power, ground, data IN, and data OUT.
The power and ground wires all connect together to a "power rail" which runs the length of the strand. We'll wire all the 5v pins on the rings to the red wire, and all the g pins to the black wire.
The data wires are doing something a little trickier. The first data IN on the ring is connected to GPIO pin 12 on the Feather. The data OUT pin on this ring then connects to the data IN pin on the next ring in the series, and so on down the line.
I've used a 3-pin JST connector (not shown in the diagram) to connect the strand of lights to the microcontroller and switch. This is optional but allows me to easily remove the Feather from the strand in case I want to update it or borrow it for a different project.
WLED Software
Install WLED
These next steps require a WebSerial-compatible browser. As of this writing, that means Google Chrome, Microsoft Edge, or Opera “desktop” browsers. Other browsers (Safari, Firefox, Explorer, and anything mobile) won’t work.
Visit https://install.wled.me/
Plug your microcontroller into your computer with a known good USB cable. Click "Install" and select the port for your board.
Depending on the USB-to-serial bridge chip on the board, you might see one or two serial ports. On Mac, for instance, there might be both “/dev/cu.usbmodem[number]” and “/dev/cu.wchusbserial[number]”. Use the “wchusbserial” one.
After successful installation, enter your WiFi network name and password when prompted. This must be a 2.4 GHz WiFi network; ESP32 does not support 5 GHz networks. If it can’t connect, then as a fallback WLED will create its own 2.4 GHz WiFi access point.
Setup & Preferences
WiFi Setup
It's a good idea to head to WiFi Setup screen and create a good URL so you can control your project from any web-enabled device. I called mine http://spheres.local -- this is what I type into any web browser on my WiFi network in order to connect to my project.
LED Preferences
You need to change just a couple of settings in the app to get the lights running correctly. Click the LED Preferences tab and scroll down to Hardware Setup. Enter the total number of LEDs in your strip under "Length". My strip has 15 rings with 12 pixels each, so, 180 pixels total.
The NeoPixel data pin is connected to pin 12 on the Feather, so make GPIO match that pin number.
Use It
Now you can use any computer or handheld device to control your LEDs.
Make sure your device is on the same WiFi network as your board. Navigate to your custom URL (http://spheres.local/ for me) in a web browser. You'll see a color picker above a whole bunch of color palette choices.
Choose a color, choose an effect, and watch your lights animate and glow!
Usage
Save your favorite combinations as presets, create playlists, control the speed and intensity of the animations, and lots more. This web app is incredibly intuitive and easy to use.
Head over to the WLED wiki at https://kno.wled.ge/ to delve into all the particulars.
Electronics Assembly
Plug the male end of the power switch into your Feather's JST port.
Cut the female JST connector off the other side of the switch. Strip some shielding from the wires and screw them securely into your screw terminal, red to + and black to -.
I like to strip around ½” and fold the bare wires over onto themselves before I stuff them into the screw holes, just to give the hardware a little more to grab.
Cut the wires going to the male JST connector (currently plugged into the Feather.)
Solder the middle wire from the JST connector (green, in my case) into pin 12 on your Feather. This is our data wire.
Twist the wires you just cut back together and splice them to your 3-pin JST connector's red and black wires. These will feed power to the Feather and to the lights.
Solder the red wires to the leftmost wire (red) and the black wires to the rightmost wire (white on this connector).
A Word about Connectors
These little locking JST connectors are very handy and they're everywhere in DIY electronics projects. They come soldered to the ends of LED strips and many of us eventually end up with a drawer full of these, salvaged from various projects.
However, there seems to be no industry standard for color-coding. Sometimes you'll find a connector where the red wire is on the left, and sometimes it's on the right. This can be really problematic. When you're knee-deep in a project and trying to keep diagrams straight in your head, it's VERY easy to just roll with whatever color code schema is in front of you. But just because the wire is red on your connector does not mean it's going to neatly line up with the power wires in your project.
Note how this connector I'm using has the red wire on the left, and the connector that comes with this LED strip has the red wire on the right. Hooking this up will cause a short circuit, because power and ground will be reversed. This is a great way to damage the electronics, so always double check your wiring and don't depend on color coding!
Strand Wiring
I have 15 lights in my strand, and 6 different sizes of lanterns. I wanted them to be in a pleasing layout -- not too close together, not too far apart, with varying heights and sizes.
Cut 15 pieces of ribbon cable in varying lengths. Mine are 6" at the shortest and 34" at the longest, in 2" intervals.
I used a one-inch gridded self-healing cutting mat to lay the wires out and this made the measuring and cutting really easy.
There are a lot of rings, and each ring has 4 connections. That's 60 solder points we'll have to hit. I find that big, tedious tasks like this go much faster and save a lot of precious brain cycles if you do ALL the stripping then ALL the soldering, instead of processing one at a time.
Separate the wires in the ribbon cable at one end. Strip about 1/8" of shielding from all 60 wires.
Solder each ring to a piece of ribbon cable, paying close attention to the order of the wires:
- Striped wire: 5V
- 2nd wire: data OUT
- 3rd wire: data IN
- 4th wire: G
Be 100% consistent here or your whole strand will not work. I found it easiest to solder the striped wire first, then work my way clockwise around the ring: G next (easy to find since it's on the other edge), then IN and OUT fall right into place with no crossed wires.
Prepare the Power Rail
Cut a long wire for the top of the strand. I'll refer to this as the "power rail".
Find the striped wire. This will be our power wire (+5v) and will attach to all the striped wires coming from the rings.
We only need 3 wires in our power rail, so separate the 4th wire and pull it off the cable. Save it for another project.
The 3rd wire, which is now on the edge, will be our G wire, and the middle wire becomes our data wire. Check the wiring diagram page to see how this works.
Plug your female JST connector into the male connector on the Feather, so you can be sure which wire should go where. Connect the female JST connector to your power rail as shown red / USB to the striped wire, green/data to the middle wire, and G to the 3rd wire.
This is now the IN end. Keep it on the left as you work.
Stretch out your 3-wire power rail on the floor and arrange the lanterns below it. Lay out your wires and trim any that are too long.
My lanterns do not have mathematically even spacing, since the sizes are so different - a more random layout looks better. In order to mark the spots where the lanterns attach, I pulled the 3 wires on the power rail apart by about an inch at each spot where a lantern will go. Now I can pick up my power rail to work on it and still be sure of my spacing.
Starting with your first lantern, Cut the middle wire and strip about 1/4" of shielding off each side. The left wire is where the data comes IN and the right-side wire is where the data will travel OUT to the next lantern.
Keep the power and ground wires intact but cut through just the shielding and pull it back a bit to expose a little of each of the wires. This makes our splicing job a little easier and keeps more power running through the project, since the wires remain unbroken through the whole length of the strand.
Grab your first lantern ring. Separate the wires and slide a piece of heat shrink onto each one. I also added a large piece of heat shrink to cover all 4 connections and make the joint look tidy afterwards.
Now, make your connections. Twist the striped wire from the ring around the bare patch of striped wire on your power rail. Then do the same with the 3rd (G) wire -- it will connect to the 4th wire on the ring.
Connect the next wire over (going to IN on the ring) to the cut wire on the left, and the remaining wire (coming from OUT on the ring) to the cut wire on the right. Solder all 4 connections.
Time to test! Plug in your Feather and the power supply, click the switch if needed, and make sure the lights come on. If they did, congratulations! Solder on, my friend.
Keeping the wires straight is tricky business -- it's really easy to solder things up wrong. I made sure to keep the IN end of the power rail on my left the whole time, so I could always be assured of which side was IN and which was OUT.
If the lights don't come on, or are doing something unexpected, here are a few troubleshooting tips. Get this first one fixed before moving on to the rest.
Troubleshooting
If your lights didn't come on, here are a few things to try:
- Flip your on/off switch. Was it just turned off?
- Head back to WLED and check your pinout configuration under LED Preferences. Be sure your data wire is connected to pin 12, and that you've told WLED it's on 12.
- Check your wiring! This is a bit of a complicated mess until you get the flow right and it's really easy to crosswire something. Trace your wires and be sure power is going to the striped wire everywhere, and that IN on the ring is connected to the wire that leads to the Feather's pin 12.
- Try re-uploading the WLED software.
- Make sure you're on the correct WiFi network - if you're on a different network you won't see the WLED connection.
- Check further down the line and be sure nothing is shorting out. I stripped some wires further down in anticipation, and they touched together and shorted out my project, making testing VERY difficult.
Open the paper lanterns. Each one will have a wire frame inside that holds the lantern open.
I used a zip tie to secure the ring to the frame right at the top of the lantern.
These little lanterns rip easily, and the strand can get pretty tangled up. I found it easiest to hang the strand with the metal frames attached, and then add the lanterns once everything was in place and ready to go.
LEDFx Software
Head to LedFx.app and download the version of the software that will work with your computer. There are installers for Mac, Windows, and Linux.
Run the installer and open the app.
Click the orange + button to add a device. Choose WLED from the device type popup.
Pop back over to WLED (http://spheres.local) and go to Config > Wifi Setup. Scroll down until you find the IP address of your device. Copy it into your clipboard.
Back in LedFx, give your device a name and paste the IP address into the appropriate field. Click "Add."
Click "settings" at the bottom right and open the Audio settings. This is where you can choose your audio input. It defaults to your computer's microphone.
Check the LedFx docs under "Directing Audio" to learn to add different sound input devices.
The user interface is fairly simple and easy to figure out. Select an animation mode and make some noise to see the sound play out on your spheres.
For more help or ideas, check out the LedFx Discord server.
Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.
Visit TechForum