Modular Matrix build (HowTo)

Addressable LED curtains have become prevalent over the past year or two.
Some use custom two-wire protocols, and some use standard WS281x protocols and can be controlled with WLED. Almost all of them use a sparse 10cm spacing between lights and come in fixed 1m x 1x, 2m x 2m or 3m x 3m sizes. They typically have sub-controllers at each drop that strips off a fixed number of bytes to pass down the strand and passes the remaining data to the next sub-controller.

NotEnoughLights and I worked with Chinese manufacturer KnowShine to develop seed pixel lights that have a built-in data return wire and a system to easily assemble them into custom sized curtains, circles (spokes), semi-circles or tree shaped cones.

Each strand is assembled by attaching an RJ9 4P4C connector (4 position, 4 contact) to the top and soldering the data and data return lines together at the bottom.
The strands are plugged in to female 4P4C connectors attached to a spine of either straight or curved PCBs. And KnowShine is giving us a phenomenal price. You can get the lights for a massive 44x44 matrix for under $100 shipped.
I will be using 5cm pitch lights here. But KnowShine can build data return lights from 10cm to 2.5cm.

I developed the Modular Matrix system to make it easier to build custom matrixes
without the pain that comes with splicing numerous power injections into very short, very thin wires. It is still going to take several hours to build a large matrix. But it will take significantly less time than building a serpentine matrix. And the end result is cleaner, and easier to transport and store. Lets get building!

RJ11 Crimper with 4P4C
Small guage wire stripper - Your 20AWG strippers will not work well on 24AWG or 26AWG wire.
Soldering iron and hot air gun
X-acto knife or small razor blade
Hot glue gun (optional)
Router table or table saw (optional)

Seed pixels 5cm pitch with data return ~$96/2000 LED
PCB “Curtain Rod” 25cm spine or “BeSpoke Hub” (semi-circle) - Will be available at KnowShine’s store soon.
RJ9 4P4C female 10pcs - $2
RJ9 4P4C male 100pcs - $3
14mm & 2mm heat shrink 5m - $2
M2.5 x 8mm button head screws
1x2" select pine board
Steel Beads 8mm 3mm hole 50pcs - $4
Suction Cups with Holes 100pcs - $8

Step 1 - Prepare the frame
I cut a 1" x 2" pine board to length and used a 5/8" router bit to make a 3/8" deep notch
down the center of the board. If you do not have a router table, you can use a table saw. If you don’t have a router table or a table saw, you can use a 5/8" aluminum C-channel. If you go with the aluminum channel, you will need to take precautions to ensure the pins sticking up from the back side of the PCB do not make contact with the aluminum and short out. I would probably cut the pins close to the PCB and cover the bottom of the channel with foam.

Solder the female connectors to the PCB and solder the PCBs together. The “Curtain Rod” PCBs are 25cm long with 5x 5cm pitch connectors. I will be using 7, for a total of 35 strands. You can either mount the PCBs to the frame and then solder them together using a short (1/4") section of wire, or use a longer (2") piece of wire between each board to give it flexibility needed to maneuver them into the frame. I like the solder then mount approach because it makes it easier to disassemble if you need to make repairs or adjustments. I used 22AWG solid core wire. Once all pads are soldered, bend the wire away from the edge, then wrap the board and wire with 14mm to 16mm heat shrink tubing to protect the wires. After the PCBs are mounted in the frame, flatten the wires so they don’t interfere with the jacks.

To maximize refresh rates, you want to keep the number of pixels on a single data line to under 800 pixels (ideally under 600). The rods have a second data line to facilitate sending data to the second half of your matrix. If you have more than 1200-1600 pixels, you will need to run additional wires. You can swap from data line 1 to data line 2 at any node, but it is easier to swap between PCBs. If you want to swap mid board, you will need to cut the trace before the DI pad (on the back of the board) and connect the D2 pad to the DI pad.

The 22AWG wire between boards will not carry many amps. I powered the curtain with an 18AWG wire attached to several points along the length of the curtain.

Step 2 - Preparing the lights
Count the number of pixels in each strand and mark the length on the edge of your workspace. Cut about 1/2" of wire below the last pixel, about the length of the epoxy bead. You want all of the rows to be even, so trim the start of your first strand so it matches the length of the first pixel on the second strand. It may be tempting to maximize the line at the top of each strand and cut the bottoms very short. But leave yourself room to work and room to attach a weight or suction cup.

With an X-acto knife, carefully make 1/2" cuts to separate the wires on the top and bottom of the strand. Slide the top into the RJ9 male connector. Holding the contacts up and the catch down, the gold 5V wire will be on the left. Examine the crystal head to ensure all wires are fully inserted, then crimp it down.

On the bottom of the strand, fold the power and ground lines out of your way. Strip the tips of the data and data return wires. Twist and solder them together, then apply heat shrink tubing. Depending on your application, use hot glue to attach a steel bead or a suction cup to the bottom of the strand. Repeat for as many strands as you need.

Connect power and a controller, and set it to an animation where all lights are lit and the colors are regularly changing. Plug the strand into the first port to test that it lights up. Then move it over to the second port so you can test that subsequent strands both light up and pass the data to the next strand. Only connect two strands at a time when you are testing. If you’ve got a short, you don’t want it to kill a large number of lights. Once you have tested all of the strands, you can mount the frame and assemble.

In LED Preferences, set the color order is GRB. If you want to use Automatic Brightness Limiter, select “Custom” and set to 10mA. If you are using a single data line, 2D setup is really easy. If you are using multiple data lines, setup is still pretty easy but you must be precise on the number of pixels for each line. As long as you have the data pins in the correct order with the correct number of pins, you can set it up as a single panel in 2D settings.


Update 12/17/2023 KnowShine is updating their wire order. The new order is going to be ground, data, power, return (ground and power have been swapped). They will match the structure of Ray Wu’s data return lights. If you get the new style lights and have the old PCBs, it will be easiest to attach the lights to the PCBs as normal and swap power and ground pins when you are powering the PCB.


I have been saving the link to those seed’s for a long time now. Finally placed my order. Thanks!

First off, Thank You, Thank You, Thank You … (you get the idea) for all the time and effort you’ve put into this to create an excellent tool for projects.

One thing that occurred to me after a little thought - how long a run have you managed to do using the return data line? That line is just a readily available wire you get to use as you wish (?) so it’s no different from adding your own extra wire in a setup (yours is just super neat and tidy). At some distance (3m? 5m?) you’ll run into the standard distance issues, although all the usual solutions are still available too.

Again, I’m NOT criticizing here, just trying to see if you’ve had any real world experiences (yet).

1 Like

Excellent question. As we were getting started, NotEnoughLights suggested we incorporate a logic level shifter into the PCB to enable longer runs. But when the first roll arrived, the first thing I did was test it by making a 15m drop and the data return worked flawlessly. I haven’t tested exactly how long you’d need to go before signal strength became an issue. But unless you are decorating the side of a sky scraper, I think you’re good.

1 Like

15m is an excellent real world test.
It probably helps a bunch that you’ve “paired” the data line beside the Gnd line and that it’s got a nice uniform separation distance.

Kudos again on a great solution.

Great idea and thanks for that lightning inspiration! Hope to get this waterproof for outside installations :-/

Is the PCB mentioned here available anywhere? This looks like the slickest way I’ve found to build a matrix.

1 Like

First I want to note that KnowShine is doing a big order of Flex PCB and it should be available in strips of 5 or 10m in a few weeks. If you are looking to do a large display, for instance icicles, I recommend you wait for those.

Otherwise… Here are the Kurt & Rod PCBs. They are 5cm pitch (20 drops per meter), 3 pin (no secondary data line) and designed to either solder the lights directly or use the RJ9 connectors. For the end to end connections you can either solder directly (mount first), or use 3-pin 2.54 pitch right angle headers (recommended) female male. If you want to use at 10cm or 15cm pitch, simply short the data and data return pads on the ones you want to skip.

Download the Gerber file and order at JLCPCB. If it is your first time using JLCPCB, you can get a coupon and almost get them almost for free, if not, it will be around $8 for 5m. When you order at JLCPCB, they sometimes fuss about the ratio on the 25cm boards and always fuss on the 50cm boards, saying that they could warp or deform during manufacture. Just tell them to proceed. I’ve ordered many of these and they’ve always been manufactured perfectly. With the rush of products from China for the holidays, Global Standard Direct (shipping) is not accepting the 50cm boards right now, so if you want cheap shipping too, you’ll either need to wait until after the holidays or go with the 25cm boards.

And if you like how much time and money I saved you, you can buy me a coffee :wink:

Kurt & Rod 25cm (57.2 KB)

Kurt & Rod 50cm (68.3 KB)

Update: KnowShine has since adopted the same wire order as RayWu (-D+R). Essentially swapping 5v and ground, (ground being the gold wire). You can still use these PCBs with the new wire order. Rather than twisting wires around on each drop, I just swapped power inputs.


For outside installations, I recommend you skip the modular connectors and solder the wires directly to the board, silicone up the joints and mount inside inverted U-channel.

1 Like

Thanks @Artacus! Judging by shipping lead times, I’ll probably save this for next year and plan ahead better.

Thank you for all of the effort put into this! The two things I was disliking about the solutions I was finding were: 1) everything seems to be 4" spacing between LEDs and 2) no clean way to do a return data line without serpentining. Sure enough I stumble upon this and it’s perfect.

1 Like

@Artacus thanks for putting together this post and other posts on this topic. Been reading with curiosity as I’m tempted to try a curtain light project for myself. Regarding the PCBs - how difficult would it be to adapt the Kurt & Rod design to 4-pin to include a second data line? As I unfortunately cannot order from KnowShine in the UK.

That would not help you. The second data line is to carry the signal to the second half of your curtain. But you still need a way to get the signal from the bottom of one strand to the top of the next.

You could run a separate wire back up each strand or find another vendor. This is China, where IP isn’t really a thing. Ray Wu and at least one other vendor started offering their own versions. The wire order was different on all three. The third vendor didn’t use the gold wire for power, which I really didn’t like. But you should be able to find someone that will ship to the UK.

So the data return lights are not a problem as Ray Wu’s store ships to the UK, so I can buy the lights there. But the PCB is where I am stuck - Know Shine doesn’t ship here so I am looking to buy from JLCPCB, and I need a second data line as my pixels are likely to exceed 800. How could I go about adding a second data line to the PCB? Or can it just be a separate wire?

You can use a second wire. That was just a nice to have feature to keep it cleaner. But not required.

I just saw this in the xLights support group on FB and thought it would be a great thing to add here.

Here’s something I’m working on that might be of interest. 2.5cm seed pixels fit perfectly in 6mm corrugated polycarbonate roof panels. Just cut it to width that gives you a multiple of pixels that lets them end just inside the channel on both sides. Every 3rd channel works great for this spacing. Quick and easy matrix panel! I’m doing 33” wide 4 sets of 6 strands with power on both ends. Then I’ll finish it with a trim cap on the edges. We’ll see how it goes!


The person is supposed to post a pic of it lit up later tonight. If they do I will post it as well.


Nice. I used approach I used to with cloth blinds and 10cm seed pixels to make a matrix. The cloth shades diffuse the light very well. But it was a real pain threading dozens of meters of lights through each cell. After the first time, I started in the middle.

They make white panels like that too right?

I think I have seen frosted before. Personally even the clear is quite pricy. Not something I would be using unless I had cheap access to it. But a good option for some people.

-I actually do have some of the stuff that came from some store display shelving that I purchased a few years back. I might give it a try and see how it looks when I get time.

Here is a pic of the guy’s matrix lit up. The seeds are @ 1in spacing.

This is one that someone else posted where they tried the regular 3mm frosted sign coro (they said it was tight getting the seeds in it) I’m not sure of the spacing. 2in?

Those look really nice. I was a little shocked at how pricey the coroplast was. That must have been an exercise in frustration trying to pull dozens of meters of 4mm pixels through a 3mm hole. I would definitely stick with 6mm coro.