Saturday, July 22, 2023

DIY LED Curtain Lights

 


This article is a companion to the YouTube video that describes building a DIY version of a commercial LED curtain.  The goal will be to build a system that is either cheaper or has more features than the retail product.  It may be beneficial to watch the video first, then refer back to this article.

Introduction and Goals


One of my favorite types of projects is to try to construct a DIY version of a commercial product.  Recently, a new product has been getting a lot of online reviews.  While I have not purchased the retail version, my first impression was that this could be an interesting DIY project.

For all my projects that attempt to replicate a retail product, the goals are to meet as many of the following as I can:
  • Build it cheaper
  • Provide additional functions or features
  • Complete local control with Home Assistant integration
  • No remote or cloud-based application, creation of user account, etc.
While I won't be able to do a side-by-side comparison (no need for me to purchase the retail version if I build my own), I'll provide some comparisons based on online reviews, official product documentation and feedback from other users that have purchased the retail version.  While there are more than one version of retail curtain LEDs, I'll be comparing to the recently released version by Govee as seen on their official web site.

General Approach


I do not plan for this to be a permanent installation.  I foresee bringing the system out for holidays, like Halloween or Christmas, or maybe for other special occasions.  This means I want a system that is easily disassembled, stored and then quick and easy to set up when wanted.

This means that some sort of mounting system or framework will be needed.  This should have the added benefit of avoiding tangled LED strips that have to be separated each time.  It should be easy to store and have minimal exposed wiring when installed.

WLED will be used for the controller, as it has hundreds of effects, supports both matrix effects and optional sound reactivity.  In addition, it has the ability to upload pixel art images.  All features that are similar to what the retail product offers.  And it won't require any code writing or special YAML configuration to integrate into Home Assistant. But since sound reactivity requires a different forked version of WLED (as of the time of this article), the controller will be socketed so that it will be easy to swap out controllers with the standard vs. sound-reactive version of WLED for testing.

Finally, in deference to so many viewers and readers out there that tell me they do not have a 3D printer, I'm going to build the entire system with no 3D printed parts.  Instead I'll create an enclosure for the power supply and controller using a cheap plastic storage container.

Parts List


As always, I like to start with a complete parts list.  Some items are optional and are added to try to duplicate the features of the retail version, and often substitutes can be used for other items.  What I'm listing are the parts I used for the build as shown in the YouTube video and as described in this article.  Also note that some parts can be found in smaller quantities or at a (significantly) cheaper price at your local  department or hardware store.  I try to note these parts in the lists below.

Controller and Enclosure Parts

Qty

Item

Notes

1-2

ESP32 Mini

2 if you want both WLED versions

1

Logic Level Shifter (I2C)

You only need one shifter.  Either version will suffice

1

Logic Level Shifter (SN74AHCT125N)

1

INMP441 Omni Directional Mic

 

1

IR Receiver Module

 

1

IR 44-key Remote

 

1

Normally Open Push button

 

1

ElectroCookie Proto Board

 

1

5V 15A Power Supply

 

2

10 Pin Socket Pin Headers

 

-

20 gauge Solid Core Wire

 

-

20 gauge Stranded Wire

22 gauge is acceptable

-

WAGO Lever Nuts - Assorted

 

1

Dupont Connector Wire Kit

 

4

PCB Standoffs M2.5

 

1

Sterilite Small Clip Box

May find cheaper locally

1

Micro USB Cable

For flashing WLED

 

 

 


LEDs and Mounting Parts

Qty

Item

Notes

4

BTF WS281b Fairy Lights – 100 LEDs

 

-

JST 3-Wire Connectors

 

-

Barrel Connectors

 

-

18 Gauge 2-conductor Wire

For power injection runs

2

Eye Bolts 3/16” x 1 ½”

Cheaper at local hardware

2

1 ½” x 5’ Black ABS Drainpipe

Cheaper at local hardware

 

 

 


Miscellaneous Parts and Tools

Qty

Item

Notes

1

25’ ¼” Braided Sleeve

For extensions/pigtails

-

Heat Shrink Tubing

 

1

Dremel 1 ½” Reinforced Cutoff Wheel

Cheaper at local hardware?

1

Hot Glue Gun and Sticks

 

 

 

 



Breadboard Testing - optional (but recommended)

Some of these links may be Amazon affiliate links.  Use of these links will not affect your pricing, but this blog may earn a small commission if you make a purchase.

The LEDs


The LEDs I opted to use for this project are 5V BFT Fairy Lights.  These come in 5 meter lengths with a total of 100 LEDs.


As you can see above, the BTF LEDs on the left appear nearly identical to the Govee LEDs on the right.  There is, however, one difference.  The spacing between LEDs of the BFT lights are 4" while on the Govee strip it is only 3".  This does mean that there will be less total LEDs in the same given dimensions, but I'll have to see if that has a major impact (spoiler alert:  it really didn't).

One nice thing about the BTF fairly lights is that they use the same WS2812b chip that is used in the LED strips that I (and many of you) have used in other LED projects.  That means that we won't need any special firmware or libraries and can use WLED to control the lights.  In addition, the strips come with standard JST connectors at the start and end of the strip.

I'll be using 4 of these strips, for a total of 400 LEDs.  But before we can test the LED stings, we have to build a controller.

Building a Breadboard Test Controller


Before I build a soldered controller or proceed with actually building any project, I like to do a proof-of-concept breadboard test.

Click to enlarge

At its core, this is just a standard WLED controller, which I've covered step-by-step in other articles and videos (see links at the end of this article).  However, to attempt to match or exceed the features of the retail version, some additional components will be added to the base controller.  This includes a local push button, a microphone for sound-reactivity and something that the retail version does not have, an IR receiver for remote control.

Since the sound-reactive version now requires the ESP32 (the ESP8266 is no longer supported), an ESP32 mini will be used.  But since the sound-reactive version is a fork, it generally lags a little behind the official release in terms of features and effects.  So, two ESP32s will be used and a socket will be installed to allow the two different versions to easily be swapped out and tested.

*I also discovered during my bench testing that the sound-reactive version disables support for IR receivers due to some potential issues with the sound reactivity.  It can be enabled, but this requires modification of a header file and compilation of a new version.  That is beyond the scope of this article, but information can be found on the WLED-SR site.  This is another reason why two different ESP boards will be used.

Click to enlarge

These are the GPIO pins that will be used on the ESP32 mini.  Unfortunately, the ESP32 mini only has pin out information on the bottom side of the board so it is easy to get something reversed when only looking at the top side of the board. The above only shows the GPIO pins and not any power or ground connections.


Since only the GPIO pins on the inner rows of the ESP32 mini will be used, pin headers should only be installed on these two inner rows.  Then a socket is used for mounting and connecting the ESP32.  For both the breadboard and the soldered ElectroCookie version (the breadboard and ElectroCookie are functionally identical in terms of layout), the socket pin headers should be installed with one row of pin connections available on each side of the sockets.  Be sure not to reverse the direction of the ESP32 when seating.  I always design my layouts so that the USB connection is facing out.

Controller with I2C shifter - Click to enlarge

While the above diagram shows the ElectroCookie board, as mentioned above, a 1/2 size breadboard is laid out in the exact same way.  The difference with the breadboard is that you will be using breadboard jumpers, Dupont cables and alligator test leads to make temporary connections instead of permanent soldered ones.  You can see that the wiring is basically identical on the breadboard from the photo above.  But a few additional notes:
  • Connect the ground rails together, but DO NOT connect the (+) rails together
  • Be sure the push button is a normally-open button.
  • The L/R on the INMP441 mic is connected to ground, as well as the GND pin.
  • The above diagram shows the I2C level shifter.  If you are using the SN74AHCT125N shifter, that wiring is slightly different and shown below.
Once all the connections are made, you are ready to test.  But first WLED needs to be installed on the ESP32.

Installing WLED


I'm not going to cover all the individual steps of installing WLED, as I cover that in other articles and because it is really just point and click at this point.  


Just point your browser at https://install.wled.me/, plug the ESP32 into a USB port on the computer and select the version you wish to install.  Note that to get the matrix effects of WLED, you will need to install v0.14.0 or later (currently the beta versions).  Or you can opt to install the sound reactive version.  Or like I did, create a controller for both the standard/matrix and sound reactive versions since they can easily be swapped out for testing.


After the flashing completes and you enter your wifi information, you are ready to install the ESP32 onto your controller.  Note: You may wish to select the option to 'Visit Device' after installation so you can obtain the IP address of your new controller.  Otherwise, you'll need to use your router or other method to determine the IP address so you can return to the web interface later.

Initial Bench Testing



After flashing the two different versions of WLED to two different controllers, I connected a single 100-pixel LED strip and made temporary power connections using WAGO lever nuts and alligator clips.  I then applied power and.... nothing!  Well, not nothing.  While I didn't see any magic smoke, I did immediately get that 'burnt electronic' smell.  I immediately removed power and started to investigate.  It didn't take me long to find the issue:


I had reversed the 5V and ground connections on the breadboard.  The ESP32 didn't much care for that... and it immediately fried.  I only include this here for a couple of reasons.  First, even though I've build dozens of controllers similar to this, I still occasionally make a bonehead mistake!

But mostly is to encourage those that might be hesitant to try their hand at DIY electronics similar to this.  Yeah... you will make a mistake from time to time... and learn from it.  But usually it is minor.  In my case, even doing something crazy like reversing the power leads, the worst that happened was that I destroyed a $5 board and lost about 15 minutes time to prepare a new board.  So, don't be intimidated to try projects such as this on your own.

After preparing a replacement board (and double-checking all my wiring!), I gave it another shot.


First I tested the standard WLED controller.  If you haven't already done so, you will need to launch the WLED application and specify the pins that you used for your data line and any optional peripherals:


You need to tell WLED which GPIO pin you are using for your LED data line, the number of LEDs, and if installed, the GPIO pin for your push button and IR receiver.  You also need to specify the type of remote you are using.  These pixel LEDs are still WS2812b, so be sure you select WS281x as the LED type.

After updating the WLED settings, I checked that the colors were correct. verified that both my push button and IR remote worked as planned.  I then powered down and swapped out the controller with one running the sound-reactive fork of WLED.


For the sound reactive version, you need to set the same GPIO pins as above (except for IR, since it is disabled by default in the SR version).  But you also need to go into the sound setup and specify the GPIO pins for the microphone.


If you are using the INMP441 microphone, you should select Generic I2S as the type.  The GPIO pins shown match the wiring diagram above.  Obviously if you used different pins (or a different mic), you should adjust the settings to match your controller build.

I tested various sound effects and also verified that my push button worked as well.  Play around a bit and try different sounds and volume levels.  We'll setup the matrix in WLED after the build is complete.

Creating the Final Controller


To create the soldered version, we are basically going to duplicate the wiring from the breadboard, but on the ElectroCookie board.

Controller with "SN74" Shifter - Click to enlarge

This is the same wiring diagram as above, except it uses an SN74AHCT125N as the level shifter instead of the I2C shifter.  Either shifter will work fine, but it is probably more important to include some sort of shifter for this project, as you will likely want to mount the controller and enclosure at some distance from the start of the LEDs.

Click to enlarge

This is my controller, partially built.  I like to complete all "on board, point-to-point" connections on the board first.  I generally use 20 gauge solid core wire for these connections.  I also opted to mount the IR receiver directly on the board, but this did require de-soldering the pre-attached 90° pins and soldering on new straight pins. You can also run wire to the IR receiver if you want it separate from the board.  This will somewhat depend on your enclosure, location of the controller and line of sight to the IR receiver.

Click to enlarge

I then added all the external connections.  For these, I generally use 20 or 22 gauge stranded wire.  For the microphone (lower right corner in photo), I opted to install my own female Dupont connectors.  This will allow me to easily extend the microphone with standard Dupont male-to-female cables if I want to move the microphone closer to a particular sound source.

This controller board will work with both the standard WLED ESP32 and the sound-reactive ESP32 just by swapping them out.  Any components not use for a particular version (e.g the microphone for the standard version and the IR receiver for the SR version) will simply be ignored and won't cause issues.  You may wish to temporarily connect the soldered version in the same manner as the breadboard and test all your connections.

Update:  After releasing the related video and publishing this article, a viewer recommended taking a look at something called WLED MoonModules as an alternative to swapping controllers.  MoonModules is the latest cutting edge version that merges the latest standard WLED version with the latest features of the sound-reactive version.  It is considered a developmental version, so it may have issues that have not been fully resolved.

But more importantly, MoonModules does have some reserved GPIO pins.  In particular, one of the GPIO pins that I used for the microphone (WS - GPIO18) is a reserved pin under MoonModules.


To use MoonModules, it simply required me to wire WS from the microphone to a different GPIO pin.  In my case, I just moved it from GPIO18 to GPIO23.

Click to enlarge

Of course you will also need to update the audio settings in WLED to also reference this new pin for your microphone setup.  The above wiring can work with standard, sound-reactive and MoonModules.  See the link above or at the end of this article for more information regarding WLED MoonModules.


Creating an Enclosure


As promised at the start of this article, I won't be using any 3D printed parts for this project.  Instead, I'm going to demonstrate how you can use other common items in lieu of a 3D printer.

For this project's enclosure, I want a single box that will hold both the power supply and LED controller and allow much of the wiring to be contained.


I opted to use a Sterilite small clip container.  I chose this for the following reasons:
  • It is easy to drill and cut so that openings can be made for external connections.
  • While not waterproof, when closed it should offer at least a little protection from weather, such as light rain.
  • The transparent nature should allow the IR receiver to be housed inside and still receiver signals from the remote.
  • It will also be able to house other components, like the remote and extension cables when the system is not in use or in storage.


As you can see, the container will easily hold the 5V 15A power supply, the ElectroCookie control board and leave ample space for making power connections.


I used a combination of a Dremel, drill and box knife to create the necessary holes in the container.


I opted to use some small M2.5 offsets for mounting the controller.  Due to the slightly concave nature of the bottom of the container, these offsets and nuts do not protrude past the bottom edges and still allow the container to sit flat on a surface.  


Here the controller is mounted on the offsets and the push button mounted.  There is also a small hole at the bottom of the photo which will be the opening for the microphone, but I'll wait to mount that until I've done some testing.  I'll show the completed enclosure after the LEDs are completed.

Preparing the LED Mounting System


My concept was to use some sort of rigid top and bottom "rail" between which I could string the LEDs.  The bottom rail would add some weight and would help keep the LED strings straight and aligned... one of the drawbacks I heard about the Govee version in a review.  In addition, I wanted the rails to be able to hide any wiring connections like where two strings would be joined, plus any required power injection wires.  My initial thought was to 'split' PVC pipe lengthwise.


However, when browsing through the PVC at the local hardware store, I stumbled across 1 1/2" black ABS drain pipe.  This had a few advantages over PVC.  For one, it has a thinner wall thickness, which would make it easier to cut.  It was much lighter than PVC, yet had enough weight to keep the LED strings straight.  I preferred the glossy black color, as standard white PVC (with the ink printing) was likely going to require me to sand and paint it.  Finally, it came in 5 foot lengths, which was exactly the length I needed to mount my 4 LED strings.  I bought two because I wasn't going to split the pipe precisely in half.

By splitting the pipe lengthwise at slightly less than half, it provided me with a near horizontal section at the top and bottom for mounting the LED strings and to also add eventual eye bolts for hanging on the wall.


I used a table saw, but you could probably also use a ban saw.  You do want to try to keep the cut edges as true as possible.  Sand off any rough edges.


Next, the pipe needs to be "slotted" to hold the LED strings.  Since there is 4" on-center between LEDs, cutting slots 3" apart will allow for the 20 strands to be strung with a 1 1/2" left on each end for the 5' pipe.

I tried a couple of different techniques with scrap pieces of pipe that I had cut off, but I found the best method for creating these slots was a Dremel with a 1 1/2" cutoff wheel.


The cutoff wheel made the slot just wide enough to hold the wire from the LED string.  The slots should be cut approximately 1/2" - 3/8" deep, but they do not have to be exact.  Cut the 20 slots on one side of each of the two half pipes.


Finally, I drilled and installed a couple of eye bolts approximately 5" in from each end on the top pipe (opposite of the slots).  I will use these to hang the completed curtain on the wall.

Installing the LEDs


The LEDs will run in one continuous string, connected to one another by the JST connectors that come preinstalled on the beginning and end of each 5 meter strand.

Click to enlarge

Here's the technique I used to string the LEDs between the two pipes:

Lay the two pipes, open side up, about 6 1/2 feet apart and with the slots towards the center.  Start at the first slot on the bottom.  Which end depends upon which side you prefer to connect the controller, but remember that you are working "backwards" as these will be flipped over with the open end back against the wall when hanging.  So for example, in the above photo, the power supply/controller would be on the lower right once the curtain is installed on the wall.


Hook the first LED string into the first slot, so that the first LED pixel is just outside the pipe.  Be sure you start with the beginning of the LED string and not the end!  This is indicated by the smaller (female) JST connector that is attached to the start of the string.  


The data only flows in one direction, so if you reverse this, only the first LED will light up.

I temporarily added a small piece of masking tape to hold the strip in place while installing.  Eventually, the making tape will be removed and a small dab of hot glue will be applied to keep the string in the slot.

Now run exactly 20 pixels between the pipes, loop the string over the first and second slots in the top pipe and run back down to the bottom.  


Continue this until the first string of 100 pixels (5 strands) are installed.  The string should end at the top pipe with the JST connector. Use the end JST connector from the first string to connect to the beginning JST connector on the second string (the JST connectors are keyed to only fit together in one way).  The JST connections will be hidden within the pipe.   Repeat the process for the remaining three strings of LEDs.


As long as you have exactly 20 pixels in each strand, the JST connections will always occur at a pipe and the final pixel will be at the opposite lower corner from where you started.

Gently pull the pipe apart until the LED strings are relatively straight.  If anything looks out of whack, double check the pixel count and correct if necessary. Once you are happy with the layout, I highly recommend removing the masking tape (if used) and adding a small dab of hot glue into each slot.  You don't need much glue... just a small amount to keep the LED strings from coming out of the slots when you lift the curtain off the ground and once it is hung on the wall.

If you try to connect the LEDs to the controller/power supply to test at this point (or if you tried to test along the way like I did), you will note that after around the first 100 LEDs, the color begins to fade and the LEDs may flash or flicker.  Eventually, LEDs further down the line will simply fail to light.  Nothing is wrong with the LEDs.  This is due to voltage drop as the LEDs get further from the power supply and resistance zaps a little voltage at each LED.  But we are going to address this by providing two power injection points along the strip.

Power Injection


To address the voltage drop, we are going to run a separate 5V and ground line from the power supply and connect it to the LEDs at the midpoint and end of the run.


Using at least 18 gauge, 2-conductor wire, run a length inside of the pipe from the end where the LEDs begin to the middle JST connection at the end of the second string (200 LEDs).  I opted to add a barrel connector (and a little braided sleeve for appearance) to the start of these wires so that I could easily disconnect from the power supply inside the controller box.  Later, I will create an extension cable using barrel connectors that allow me to place the controller box much further away from the mounted curtain.  But this is optional.  The power injections leads, regardless of how, need to be connected back directly to the 5V power supply (and NOT to the ElectroCookie/LED controller board - see the following section on wiring it all up).


I used WAGO lever nuts to connect the power injection leads to the power injection wires on the JST connector.  Note that with the fairly lights, power injection leads are only provided at the start of each string, so you will use the two extra wires from the JST connector that starts the third string.

Note that while the wires from the JST connector are clear, one of the power injection wire has a red strip on it.  This is the +5V connection, while the other connection is ground.  Do not get these reversed or you may damage the LEDs!

Next, run another length of power injection wire from this connection to the end of the pipe where the LED strand ends (pixel 400).


Since the ending JST connector on fairy lights do not have power injection wires, I just took a spare female JST connector, cut off the green data line and used the red (+5V) and white (GND) wires to connect to the +5V and GND of the power injection wire then connected this to the final JST connector from the LED string.

If necessary, you can add a little hot glue to any wiring or connectors to keep them in place within the pipe.  I added a little to the wires at the start of the pipe, but didn't find the need to apply any elsewhere as the wires and connectors tucked neatly into the pipe.

At this point, I recommended connecting all the components together and firing it up for a final test before hanging the curtain on the wall or in its final location.

Wiring it all up

Click to enlarge

This is the recommended wiring for powering and controlling the LED curtain.  You will need to cut the existing barrel connector off the power supply (you can reuse this as shown above) so that you can separate and split off leads for the 5V and ground wires.  Each will be split into three separate feeds.  One set goes to the ElectroCookie controller board, one goes to a male JST connector along with the LED data line from the controller that will connect to the start of the LED curtain and the third will connect to the power injection wires you installed in the pipe of the curtain.

Do not attempt to run the power leads for the LEDs (or power injection) through the ElectroCookie controller board.  Neither the ESP32 nor ElectroCookie board are rated to handle the amp draw required by the LEDs and you will likely damage or destroy the controller if you attempt to do so.

I also recommend, if at all possible, that you solder the wire leads to the JST and barrel connectors and secure them with some heat shrink tubing.  However, if you are unable to do so, you can make those connections with additional WAGO connectors or even something like standard wire nuts.

Once all connections are made, you are ready to connect the AC power.  If you have not updated LED with the number of LEDs (and the appropriate GPIO pin numbers), you should do this at that time under the WLED Config => LED Preferences:


You should also specify the power supply size and enable the brightness limiter as an extra safety measure at this point.


Personally, I like to set the maximum current a couple of amps lower than the max rating of the power supply to assure that the power supply is not pushed to its maximum.  For my 15 amp power supply, I set the value to 12,000 mA (12A).  The LEDs will still be plenty bright!

At this point, when you save these settings, if you've done nothing else, all 400 LEDs should be lit in orange.  


If not, check both your wiring and the WLED settings.  You won't see all the available matrix effects until you define your matrix.  This is covered below under final project testing.

Finalizing the Enclosure


With everything tested, I wanted to show how I opted to finalize that plastic storage box that I'm using to hold all the related power and controller parts.

Click to enlarge

You can see the leads for the start of the LED strip and power injection on the right as described above (the AC power cord is on the left).  I opted to keep the leads short and build extension cables from the controller to the curtain.  This allows me to place the controller box some distance away from the LED curtain itself.


These are created by simply taking a male and female JST connector for the LED connection and a male and female barrel connector for the power injection and wiring them together using whatever length of wire is desired. I used 18 gauge wire between the connectors.  I opted to run the wire through some braided sleeve sealed with heat shrink just to make them a bit neater.  In my case, I needed around 5 foot extensions, which allowed me to place the controller box in a corner away from the start of the curtain.


Another reason I kept the leads from the enclosure short, and nice feature of using the plastic storage box, is that when the curtain is not in use or I wish to store it, the enclosure can hold all the additional parts.


I can disconnect the AC power cord and store it, along with the extension cables, remote and additional ESP32 all within the enclosure and simple store it along with the curtain when not in use.

Hanging the Curtain - And Storing if Desired


The entire curtain assembly is actually quite lightweight.  It doesn't take a lot of support to hang it on the wall.  This is one step where an extra set of hands might be helpful (but you can probably also do it solo).


I used a couple of 2 1/2" nails just driven directly into the drywall with no additional anchors.  You could also optionally use some picture hanging wire between the eye bolts and hang it like a traditional picture, but I didn't use the wire in my install.


Simply pick up the top pipe (with the eye bolts) and hang on a couple of nails.  Obviously, the pipe openings should face the wall so that they are not visible.


Once mounted, due to the clear nature of the LED strings, the curtain is almost invisible when powered off.  In fact, if you wanted to make it even less noticeable, you could paint the pipes to match the wall color.

My original intent was to mount the curtain for the primary purpose of making the video and creating this article.  I was then going to store the curtain and only bring it out for holidays, like Halloween and Christmas, or other special occasions.  But the better half actually liked the curtain and recommended that we leave it installed.  A definite unexpected WAF (wife approval factor) for this project.

However, if you wish to store the curtain, you can simply lay it flat on the floor (with the pipe openings facing down this time) and gently roll up the two pipes towards one another.  This should keep the strings from tangling and make it easy to unroll and display again later.  Once rolled up, the two pieces can be bound with something like large rubber bands or zip ties.  And as shown above, the controller container can be used to store any other parts, like extension cables or the remote.

Final Project Testing and Use


If you haven't already done so, there are a few final configuration changes to make in WLED to get all the effects and options.  This section assumes you have already defined the appropriate GPIO pins for the LED data line and any attached options (as covered in Initial Bench Testing) and have also specified the total number of LEDs and set your power supply size/brightness limiter (as covered under Wiring it All Up).  But now you need to tell WLED that you are using a matrix and the configuration of the matrix.  Once this step is complete, you will see a number of new effects and options appear on the main screen.

Defining the matrix in WLED
 
The exact setup and location will depend upon the version of WLED you are using... and it may change in later versions.  What I am showing here is for the latest standard version of WLED (0.14.0-b3).


Under the config menu of WLED, you will see an option for 2D configuration. 


At the top, you need to select 2D Matrix and set the number of panels to 1.  Note that it would be possible to build multiple curtains as separate panels and connect them together.  In this case, you would set the number of panels to the number of curtains in use.


Under the panel layout (notice that the first defined panel is labeled Panel 0 and not panel 1... this is only significant if you have more than one panel).  The first step is to indicate where the first LED, or the connection to your controller, is located.  In my build, this was the bottom left corner.

Next, you specify if the LED strings are running horizontally or vertically.  Next, the Serpentine box is checked to indicate that the strings (and data direction) is up and down (or from side to side for horizontal).

Finally, you specify the dimensions... number of LEDs in each strand x the number of strands.  In my case, I had 20 vertical strands of 20 pixels each.  A great new feature in the latest WLED gives you a visual representation of your panel as you defined it:


This matches the configuration of my curtain, where the LEDs start in the lower left corner (green dot) and end in the lower right corner (red dot).  It also shows that each strand of LEDs is running vertically.

Just as an FYI, here's what the current SR version (0.13.0) looks like for the matrix setup which can be found under LED Preferences in the config:


The settings are basically the same, just presented in a different format.  I suspect the next SR version will be updated to match the current standard version.

If you find that effects don't look quite right or seem to be flipped, check these settings.  I initially forgot to specify vertical and my scrolling text was rotated 90° and scrolled from top to bottom.  But it was an easy fix.  That's all you need to do!  Once you complete the matrix setup, you will see a brand new list of effects displayed on the main WLED screen.


In later versions of WLED, the effects each have symbols and there is a filter option for these effect flags at the bottom of the filter list.  While I could not find an 'official' list of what these flags mean (seems like a big oversight... and maybe future versions will at least provide a pop-up when you hover over the filter to describe it), I was able to piece together most of the meanings by trial-and-error and by looking at other sources, like Discord.

From left to right, the filter meanings are as follows:
  • (Artist Easel):  These effects support selecting different color palettes
  • (Three Dots): These effects are best on a straight linear display (?)
  • (Grid): These effects are designed for a matrix display
  • (Single Music Note): Volume based sound reactive effect.
  • (Double Music Note): Frequency based sound reactive effect.

Also note that different sliders appear when you select a specific effect.  These allow you to tweak that effect.  While the symbols for these sliders aren't alway self-evident, unlike the filters, you can hover over the slider to get a brief description of that adjustment.

Scrolling Text

Another area that lacks good documentation is how to change the scrolling text display.  By default, when you select scrolling text, it defaults to the current date and time (if these are wrong, check Time and Macros under the config).  But if you want to change this text, it is a little strange in terms of how this is currently done.  I suspect this will improve in later versions.

The text is actually based on the name of the first segment (Segment 0).  To change this text, you must change the name of the segment. Segments can be found on the main WLED screen, just to the right of the effects list.


To change the name of Segment 0, and therefore change the scrolling text that is displayed, use the following steps:
  1. Click the little caret symbol to display the segment information
  2. Click the pencil icon to enter editing mode
  3. Type the text you wish to display in name box that appears
  4. Click the checkbox at the lower right to save your changes.
Now when you select the Scrolling Text display, your new text will appear!  


You can change things like the speed, font size, vertical positioning, etc. via the sliders that appear under the Scrolling Text effect.  To reset the text back to the default date and time, just repeat the above steps and remove the text specified in the segment name field.

Uploading custom pixel art

Another feature of WLED that may not be widely known, is the ability to upload pixel art, or even photos, to the matrix display.  This only involves downloading a special HTML file to a computer and then a browser can be used to upload images to the matrix.


I'm not going to cover all the details of this app here (see the links at the end of this article for more info), but you basically just specify the IP address of your WLED controller, enter the dimensions of your matrix, select a pixel art image and send it to your device!


You can also create your own images using a pixel art editor.  Or you can even try uploading a photo (or any .jpg, gif, etc.).


It isn't photo-realistic (there are just 400 pixels after all), but the images are usually recognizable.  Also note that the pixel art converter app can also create Home Assistant YAML for use in your automations to upload images.  Nice!  Maybe you could do something like have the matrix turn on and display a picture of a mailbox when your mail is delivered.

Comparison to Retail Version


One of the goals of this project was to create a DIY version of a retail product that either was cheaper or had at least equal or greater features.  For comparison, I'll be using the recent Govee Curtain Lights that have been getting a lot of attention online lately. Please note that I do not own a set of these (and they appear to be a fine product), so the information I'm using for comparison come from either the official Govee web site or from other online reviews of the product.  Some comparisons are also based on my own subjective opinion and use case.



This comparison chart needs a little context and explanation.

Outdoor Rating

Both the Govee and BTF LED strings themselves are IP65 rated, meaning they can safely be used outdoors and would be OK if exposed to a little rain.  However, any wire connections are not waterproof and would need to be altered or protected is some manner for use in adverse weather.

In addition, the Govee controller and power supply are only IP44 rated.  This means they are protected from light water splashes, but not direct exposure to water.  Probably about the same protection that the plastic enclosure that I used for the DIY version.  

Advantage: Push

Alexa / Google Control

The retail version comes with native Amazon Alexa and Google voice control.  I do not know how much control is available, or whether it is simply turning the lights off and on.

WLED for the DIY version does have native Alexa control available.  However, if you want to control the LEDs via Google, it currently involves an intermediate party, like Home Assistant or IFTTT.  At least with Home Assistant, you have the ability to control many features of the LEDs, including power, color, effect, etc.

Advantage: Govee (if a Google household and don't use Home Assistant).

Local Control

From what I can gleam, many of the Govee features can be controlled locally via Bluetooth and a phone.  It may support local wifi control, but this isn't something I can test.  Full functionality and remote control may require installation and use of the Govee cloud application.

WLED, on the other hand, is completely local.  All features natively work locally on your wifi with no Internet connectivity required.

Advantage: DIY/WLED

App Type

The Govee app requires a phone, and to my knowledge this is the only way to interact with the LEDs (unless you implement a third system).  WLED on the other hand, has both a mobile application and can be accessed via a web browser from any device on the same wifi network.  This includes computers, tablets, etc.

Advantage: DIY/WLED

Home Assistant Integration

Currently (at time of this article), Home Assistant integration for Govee requires a third party add-on and use of the Govee cloud app.  WLED has native Home Assistant integration that is completely local.

Advantage: DIY/WLED

Animations/Effects

While I do not know exactly how many different LED effects are available for the retail version, I suspect the number is in the dozens based on reviews.  WLED on the other hand, has close to 200 different LED effects with more added with each new release.  Over 40 of these effects are specifically designed for matrix displays, with more designed for sound reactivity.  In fact, you can preview a list of standard WLED effects here.

Advantage: DIY/WLED

Scenes/Presets

Again, while I don't have the ability to review or test the various features for the Govee lights, it does appear that you can do things like save favorites, create playlists, etc.  WLED has these same features, including saving custom effects as presets and creating a playlist of various effects.  Without the ability to try out Govee, I'm calling this one a push.  You may find that one has an advantage over the other for your particular use case.

Advantage:  Push

Sound Reactivity/Integrated Mic

I'm combining these two, as both options have sound reactivity and the ability to 'dance' to music or sound.  The Govee app's mic is built into the controller near the power supply, so placement is somewhat limited.  With the DIY version, the microphone could be extended and placed in different locations based on sound source.  But without being able to test the quality of the Govee microphone, I'm again going to call these two options a push.

Advantage:  Push

"Fingerpainting"

The Govee app has a feature that allows you to draw on a grid representing the curtain and then transfer that to the LEDs.  While the reviews I watched make it appear that drawing simple geometric shapes works pretty well but trying to create any sort of decent image appears to be pretty cumbersome.  Currently, WLED does not have any sort of screen painting functionality, so if this is a feature that is important to you, the advantage here goes to Govee.

Advantage: Govee

Image Upload

From the reviews that I watched, this is a feature that is coming to Govee.  It may well be available by the time this article is published.  WLED already has this feature via the Pixel Art converter.  What's more, it can create the Home Assistant YAML necessary to load images to your LED display via automations.

Advantage: DIY/WLED

Local Button Control

The Govee controller contains a push button that allows you to power the LEDs off and on or to reset the controller.  Adding a push button to the WLED controller not only allows you to control the power, but can be configured to cycle through different effects, adjust brightness, start a playlist and more.  To be completely honest, I don't know how useful a button on the controller is in either situation as you will generally want to place the controller out of sight or likely in a location that doesn't make a local button use very convenient.  But based on the additional functions available to the button in WLED, it gets the advantage here.

Advantage: DIY/WLED

IR Remote

Govee does not include any sort of remote, other than your phone.  WLED supports use of an IR remote (but do note that the sound reactive version of WLED has IR support disabled by default).  The IR remote provides control of most functions, such as power, color, effects, brightness, etc.  An IR remote may or may not be important in your use case, but it is currently natively supported by WLED and not available for Govee.

Advantage: DIY/WLED

Total LEDs / LED Spacing

The Govee LEDs have a spacing of 3" between the LEDs and approximately 3" horizontally, while the BTF fairly lights have a spacing of 4" vertically and 3" between strands horizontally.  This means that the Govee curtain will have more LEDs (520) in approximately the same curtain dimensions than the DIY version (400).  While I don't believe this will be highly noticeable for most effects, there is some slight 'stretching' noticeable in some instances, like scrolling text, due to the 3 x 4 ratio as opposed to the 3 x 3 ratio of the Govee.

Advantage: Govee (slight)

Expandability/Layout Customization

The Govee curtain LEDs are limited to a maximum of 3 identical curtains connected together (per their official info).  However, with WLED and an appropriate power supply/injection, the number of LEDs can be expanded up to 800 LEDs using a single ESP32 data pin.  If you use multiple pins, these can be expanded to a whopping 3000-4000 LEDs (see the WLED documentation for using multiple data pins).  What's more, each individual matrix or panel does not have to be an identical size or configuration.  Each panel or section can be defined individually, yet they will all work together as one giant display.

Advantage: DIY/WLED

Cost

This one is very hard to quantify as it depends on what components you might already have and where you opt to purchase other components.  As mentioned in the parts list above, some components may be significantly cheaper at a local hardware store vs. purchasing online.  As an example, I was able to purchase a single storage container used for the enclosure at Menards for $4, where the Amazon link requires a purchase of a six pack at a cost of $22.  Same for the ABS pipe, which I purchased at Menards for approximately $10 is a crazy $35 if purchased online via Amazon.

The current cost for the Govee version at time of this article is $130.  I probably have about the same amount in materials that I needed to buy (many of the controller components, wire, connectors, etc. I already had on hand).  I'd say you will probably spend between $100 - $150 for the project depending upon what features you implement and what you may already own.  I have to call this one a push.  You likely won't save any significant money by building your own in this case.

Advantage: Push

Final Conclusions


I will admit to being very pleased with the final results of this project.  While I didn't save significant money in this case, I think the design and appearance overall is the closest I've come to the retail version (vs. other attempts like the sound-reactive LED floor lamps or Nano-Leaf like hexagonal LED display).  In fact, I like the fact that I can easily roll up and store my version and pull it out for holidays or special occasions without untangling wires or messing with a bunch of clips or hooks.

And for my preferences and use cases, the DIY/WLED version has many more features, especially the fully local native Home Assistant integration.

And last, but not least, the project was unexpectedly met with a high WAF.  Always a big bonus for any DIY projects!

Let me know down in the comments if you have any additional thoughts or have built this or a similar DIY version yourself.

Additional Information and Links



If you'd like to support future content on this blog and the related YouTube channel, or just say thanks for something that helped you out, you can say thanks by buying me a one-off cup of coffee at:

5 comments:

  1. I've tried posting (a couple times) another reply on the youtube channel, but my comment keeps going away.

    Did you have to run power injection along both rails (top and bottom)? I built this and ran power injection along the bottom, but it clearly needs more power injection. I've got a 20A power supply and have wLED configured for 15000mA. https://imgur.com/a/2zCpaCM

    The controller is at the bottom left of the matrix, the box you see at the top is a different project (multi-sensor) and not related.

    One other thing, I made this with 1 1/2" black ABS like you did, I used the table saw to cut off 1/2", then designed some end caps for the pipes. I also made a controller box that attaches directly to the pipe because I didn't want to put it in a small/clear tub like you did. https://www.thingiverse.com/thing:6155271

    Thanks again for the great project, and thanks for any advice on the power injection.

    ReplyDelete
    Replies
    1. FYI... YouTube automatically blocks any comments that have links (except for mine), so that's likely why your comments there were not being posted.

      I only ran power injection along the bottom, but had a separate 5V feed at the beginning, midpoint (where two strips came together) and at the end. I used 18 gauge wire for these runs. That provides power injection every 200 LEDs, which should be fine for these particular LEDs. If that's what you did (and it looks like it from the picture), you might try measuring voltage at different points along the strip (maybe at the JST connectors?) and see if a particular strip or section is causing a greater drop than expected. You really shouldn't need any additional power injection, so something else may be causing an issue. I just tested mine again and at 100% white, I might see just the very slightest fading on a couple of pixels farthest away from an injection point, but you have to look really close. It's not noticeable at all at 50% or of course with any other color or effect.

      I like your enclosure, and I would have done something like that myself, but I've had so many people complain about my builds that use 3D printed parts, I committed to not using any in this project and wanted to show an example of how you could use "household" items to substitute for 3D printed parts in most cases. But a 3D printed enclosure definitely makes a better final look and I might go back and substitute yours at some point.

      Let me know on the power injection. There's always a possibility that there is an issue with one of the LED strips, but hopefully that's not the issue.

      Delete
    2. I'll remember that about youtube for next time. I knew why you didn't do the enclosure, and I like that you're tailoring your videos to everyone. That's a classy move.

      I'll double-check the power injection tomorrow and let you know.

      Delete
  2. Thanks for this writeup, it was very motivational. I have a 200 LED matrix test rig up now, and since that has worked out great I have plans to create a 600 LED curtain. I'll probably be using a combination of WLED and LedFx, since that has some nice sound-reactive effects and it's able to tap into PC sound... No mic needed.

    I used the fairy lights you recommended, and they great... Nice and bright. FWIW I noticed that I need to inject power at every string, I could not run two strings in series at full brightness without obvious dimming.

    Cheers!

    ReplyDelete
    Replies
    1. You are welcome. I found the same thing with those LEDs and you can see it in my video version of this project. I had to power inject midway and at the end of a 400 pixel run. I don't know whether these types of fairly lights are less efficient/have higher resistance than their 5050 LED strip counterparts, but it does seem like injection is needed more often.

      I have a couple of 400 pixels matrices as well. Good luck with your curtain project. I've been really happy with mine.

      Delete

To help eliminate spam and to keep all conversations civil, submitted comments are moderated. Therefore your post may not show up immediately. Please be patient as most reviews are completed within a few hours.