My OctoWS2811 / WS2812B Project - just looking for a "sanity check" and a answers

Status
Not open for further replies.

tetsuo

Well-known member
My OctoWS2811 / WS2812B Project - just looking for a "sanity check" and a answers

The basic concept: home theater ceiling lighting array to maximize ambient light with minimal impact to on-screen contrast. They will be on during "game nights" or other events where higher ambient light is desired, but off for movies.

Note: I've already got about 1/8th of the overall project complete/installed as a test, but before I go all the way down my current path, I thought it would make sense to share w/ the community here in case I've missed something that's going to bite me :)

This installation will be behind black acoustically transparent wall-rated (fire resistant) fabric on a home theater ceiling. This acts to diffuse the light somewhat and also allows for the room to be "blacked out" entirely when the lights are off (to give you an idea of the weave, IR remote signals are able to pass through reliably). The system will allow cross-ceiling gradients and positional "bright" spots, e.g. LED's nearer to the screen will be dimmest so that the image is not washed out, LED's directly over seats will be brightest. RGB LED's will allow for correction of color temperature for "white" at various brightness levels as well as overall "scene" color, while the individual addressing will allow for the over-seat "spot" control. Scene creation or real-time control will be done via web UI, while basic scene recall (on/off) will be done via insteon.


Here're the specs/highlights:
  • approx 4500 leds (82x56 matrix, but some rows are not full 82 LEDs)
  • spacing between each "row" of 82 pixels is 7cm OC, so it's not a true grid and wont be used to display images, video, or text
  • 4 teensy 3.0 boards, each running in a 164 LEDs per strip configuration (1312 configured pixels per teensy 3.0, though the 3rd and 4th teensy will actually have fewer LED's)
  • Beaglebone Black controlling them via USB
  • 6 300W 5VDC MeanWell Power Supplies running on a dedicated 20amp 120v circuit
[edit]
Final layout ended up being 84x62, minus a 22 x 8 chunk, totaling 5032 LEDs.
[/edit]


Due to the arrangement of the LED's and the fabric system I'm using on the ceiling, there are strip "segments" of 41 LED's each, so the arrangement is something like:

41 LEDs x 4 segments == 1 164-LED strip
Code:
*****************************************
                                         |
*****************************************
|
*****************************************
                                         |
*****************************************

And the overall ceiling layout is essentially comprised of 2 by 14 of the above 41x4 strip arrangements, with each 300W PSU driving 4 or 5 41x4 strips. I picked the 300W units because the fans in the bigger MeanWell PSUs were so loud I could hear them even if placed outside of the sound-treated theater.


So here are the questions that are rattling around in my mind:
  • Am I asking for trouble (e.g. ground loop or similar) with 6 PSU's and 4 teensys?
  • The first 164*8 combo tested beautifully on my workbench, but once up on the ceiling, I suddenly had flicker. All that changed was that 8ft of (probably-crappy) 22AWG LED "extension" wire was added between the PSU+Teensy and the strip and will be re-testing with 16AWG as soon as I get some, but is there anything else I should be checking if the thicker wire doesn't help?
    Note:I am using a 74HCT245 with each Teensy
  • I don't need high refresh rates, nor do I need the Teensy's to be in sync (I'm not using the VideoDisplay code nor the 'video sync' pin - i'm just using the basic setPixel() and show() functionality). I have no complaints about the performance of one Teensy running 1300 LEDs, but is there any other reason I might want more boards?
  • if I add resistors in addition to the 74HCT245, do they go between the Teensy and the 74HCT245 or between the 74HCT245 and the strips? I confess, I don't understand how additional resistance is helping reduce interference, so I'm just following signal quality suggestions on the Octo library page :)

Comments, suggestions, and constructive criticism all welcome!
 
Last edited:
Update:

Cleared up the flicker. First-off, the majority of the flicker was being caused by the cheap wire... this is slightly unnerving in that it's the same wire I used to join the 41-led strip segments, but things are flicker-free now, so I guess that's a non-issue. The other fix was related to proper grounding of the strips back to the teensy
 
Last edited:
[*] Am I asking for trouble (e.g. ground loop or similar) with 6 PSU's and 4 teensys?

It will probably work fine. Best to connect each set of LEDs directly to a power supply. Use separate ground wires for the signals. Don't just attach a Teensy ground or signal ground to the same wire that's carrying heavy LED currents.

[*] I don't need high refresh rates, nor do I need the Teensy's to be in sync (I'm not using the VideoDisplay code nor the 'video sync' pin - i'm just using the basic setPixel() and show() functionality). I have no complaints about the performance of one Teensy running 1300 LEDs, but is there any other reason I might want more boards?

No, not really. Oh, I mean yes, you should buy lots of Teensys!!!!!11 :)

Even 1300 per Teensy is capable of very fast updates. If you abandon the double buffering, you could probably do 2000+ per Teensy. But double buffering assures full frame updates, so it's wise to keep it in case you ever do any kind of animation. Teensy is probably the cheapest part of this system anyway.

[*] if I add resistors in addition to the 74HCT245, do they go between the Teensy and the 74HCT245 or between the 74HCT245 and the strips? I confess, I don't understand how additional resistance is helping reduce interference, so I'm just following signal quality suggestions on the Octo library page :)

The resistors go between the '245 output pins and the wires running to the LED strips.

All cables have a optimal ratio of voltage to current, which depends on the spacing of the wires and the type of insulation. If any can also depend on any magnetic effects, but usually non-magnetic metals like copper are used for electrical wires. This is called "characteristic impedance". For ethernet cables, it's 100 ohms per twisted pair. For ordinary wire not tightly twisted together, it's probably some random number around 200 to 500.

Placing a resistor in series with the transmitter before the signal enters the long wire dramatically helps improve the signal quality. There's a whole field of study devoted to this stuff and it gets really complicated quickly. For some types of high demanding signals, like the memory buses on modern motherboards, getting the impedance closely matched is critical. For this LED strip stuff, the requirements are very precise. Just adding any resistor like 100 ohms in the right place (close to the output pins of the '245 chip) helps a lot. Better quality wire also can help, but good impedance matching can allow really poor wires to preform quite well.
 
Paul -

Thanks so much for the reply, you really covered all the bases.

And don't worry, there are more teensy purchases in my future. In this case, 4 seemed like enough for the job AND I already have a nice 4-port USB 2.0 hub :) More parts == more complexity, so I didn't want to jump up to 6 unless I needed to. It's definitely not a cost issue - Teensys are a bargain!

I appreciate the basic overview of how the resistors help with signal quality. I've been a software guy for 20 years, but the hardware side is still quite new to me. This gives me something else with which to tinker.

Thanks again; not only for the great library, but even more-so for the great community support!
 
Ugh... this hobby is flat-out dangerous!

When I finished building my home theater a few years ago, it looked like this:
seats_from_screen.jpg
frontview2.jpg
(that's the black fabric on the ceiling)

But at the moment it looks like this:
DSC08010_small.png
ceiling_without_diffuser.JPG
(yes, the wiring is still in "well how about I test it THIS way now" mode. The oscope is accelerating that phase nicely)


This project has gone over 2x my original budget and is taking many weeks longer than I'd imagined, but I think I'm on the final stretch!
 
Teaser photo time!

sneak_peak_hello_world.JPG

Pictured here is about 3/5 of the project powered up. This is looking toward the theater screen (web browser running on HTPC) with about 80% of the ceiling in-view and 3000 out of roughly 5000 LED's powered up - most displaying color #101010. To give you a sense of scale, the screen at the front of the room is about 8 feet wide and the coverage of LEDs on the ceiling is 9'4" wide by about 15' long comprised of a final configuration of 84x62 LEDs. You can also see a rectangular "fuzzy" area which is where I'm testing different mounting methods for the diffuser material. This will all be covered in black fabric once complete.

On the theater screen is a very simple paint program that is tied to the LED matrix. This isn't the final intent for the software - it's more of a quick test I hacked together which greatly entertains the kids :) This "hello world" program uses the same concepts as the planned-final software, which will actually be used to drag virtual spotlights around on the ceiling, set background gradients, or save lighting scenes (will also be tied into the insteon lighting in the room). It's written in node.js and uses websockets. A user "painting" on the ceiling on their android tablet will see real-time updates from someone painting on a PC (and of course everyone in the room will see the results on the ceiling!)

More photos to come later in the week or next weekend, depending on how much time I get to work on the project.
 
Last edited:
Status
Not open for further replies.
Back
Top