user84363: I am working on a project to run an RGB strip around a large room and have the colour change driven by an Arduino Uno. I have encountered a number of issues and am looking for clarification.
The first strip I used was a 12V strip at 1A/m. This would work fine except the power requirement is slightly ridiculous and it seems I need to put my array of MOSFETs in at every power injection point.
This was when I decided to experiment with a 5V addressable strip to do it. Working with a 5V system gave me more ease as the power requirements are lower and the parts list is also minimal, but after some research, it seems that the signal line will degrade significantly on that many WS2812B's / line length.
I suppose I could but a transistor inline every n-number of 5m strips (similar to the power injectors), however I would like to ask for some opinions from the community around other issues I may encounter, and whether or not this is the right solution for the job.
The scope of the project is to hold a colour for a number of seconds then switch colour based on a predefined program. This program is defined on an external device that uses the Arduino's serial port to communicate the desired colour. The implementation itself is very simple.
The main issues I can see are the power requirements (I think I have this sorted for the 5V version but not the 12V version) and getting the signal to the final LED. On a 60 LED/m strip this could be in the order of around 6000 LED's and that seems like a lot.
What are your views/recommendations?
Cheers!

user42015: Signal degradation: This is pretty much not a problem, as long as you just send the signal through the LED strip. Each WS2812B chip has circuitry to ensure, that the output signal is shaped correctly. As long as you don't have long runs of pure cable for the signal in between you will be good.
Power requirements: Using WS2812Bs lets you ditch your own MOSFET driving circuits, though the overall power will be in the same range. When you drive the LEDs at full intensity white (R, G and B full intensity) each LED will draw about 60mA. With 60 LEDs/m and 100m length you have 6000 LEDs, which equates to a max current of 360A. Thats a lot. You will probably need multiple power supplies. I think you can get 5V power supplies with like 70A from typical retailers. Of course there are also some which, provide more, but you will also want to reduce the max length of cable the current will flow (putting each power supply near the strip part, that it is powering).
Also you should inject power to the strip every 1 to 1.5m to stay safe. Above that you can see degradation after some time (I injected every 2.5m once and the LEDs still work, but you can see the degradation on the strip material and it gets hot when being on).
IMPORTANT: When you buy the typical brick power supplies, they often use a barrel connector. But with these currents you shouldn't use them. In one of my own projects I currently have to replace those with better connectors, because the barrel connectors started to melt from the heat and smoked. I know use small banana connectors, which are also used for drone motors. They can handle way more current without getting hot. Also your cable should be thick enough to handle the current without getting hot.
Controller:
As you already know you will get into the memory limit with the Uno. Your assessment of the needed memory for using the FastLED library (or the NeoPixel library) is correct. You will need 18kB only for the buffer (not including the rest of the programs variables).
Now you can either

change to a microcontroller with enough RAM to handle that buffer
or send the data out on demand instead of first filling it into a buffer.

The first option will definitely be easier with programming. The second option will require you to do some handwork. The libraries that I know of all use a buffer. Though I've once read this article about the timing on WS2812B LEDs. In the end the author also links to his working code, which puts out the data directly without using a buffer. You might wanna have a look at it. Also you could look at the code of the FastLED or Neopixel library. They of course also have the code to send the data and you might be able to copy and adapt that code for your case.

84363: <p>I am working on a project to run an RGB strip around a large room and have the colour change driven by an Arduino Uno. I have encountered a number of issues and am looking for clarification.</p>
<p>The first strip I used was a 12V strip at 1A/m. This would work fine except the power requirement is slightly ridiculous and it seems I need to put my array of MOSFETs in at every power injection point.</p>
<p>This was when I decided to experiment with a 5V addressable strip to do it. Working with a 5V system gave me more ease as the power requirements are lower and the parts list is also minimal, but after some research, it seems that the signal line will degrade significantly on that many WS2812B's / line length.</p>
<p>I suppose I could but a transistor inline every n-number of 5m strips (similar to the power injectors), however I would like to ask for some opinions from the community around other issues I may encounter, and whether or not this is the right solution for the job.</p>
<p>The scope of the project is to hold a colour for a number of seconds then switch colour based on a predefined program. This program is defined on an external device that uses the Arduino's serial port to communicate the desired colour. The implementation itself is very simple.</p>
<p>The main issues I can see are the power requirements (I think I have this sorted for the 5V version but not the 12V version) and getting the signal to the final LED. On a 60 LED/m strip this could be in the order of around 6000 LED's and that seems like a lot.</p>
<p>What are your views/recommendations?</p>
<p>Cheers!</p>
 42015: <p><strong>Signal degradation:</strong> This is pretty much not a problem, as long as you just send the signal through the LED strip. Each WS2812B chip has circuitry to ensure, that the output signal is shaped correctly. As long as you don't have long runs of pure cable for the signal in between you will be good.</p>
<p><strong>Power requirements:</strong> Using WS2812Bs lets you ditch your own MOSFET driving circuits, though the overall power will be in the same range. When you drive the LEDs at full intensity white (R, G and B full intensity) each LED will draw about 60mA. With 60 LEDs/m and 100m length you have 6000 LEDs, which equates to a max current of 360A. Thats a lot. You will probably need multiple power supplies. I think you can get 5V power supplies with like 70A from typical retailers. Of course there are also some which, provide more, but you will also want to reduce the max length of cable the current will flow (putting each power supply near the strip part, that it is powering).</p>
<p>Also you should inject power to the strip every 1 to 1.5m to stay safe. Above that you can see degradation after some time (I injected every 2.5m once and the LEDs still work, but you can see the degradation on the strip material and it gets hot when being on).</p>
<p>IMPORTANT: When you buy the typical brick power supplies, they often use a barrel connector. But with these currents you shouldn't use them. In one of my own projects I currently have to replace those with better connectors, because the barrel connectors started to melt from the heat and smoked. I know use small banana connectors, which are also used for drone motors. They can handle way more current without getting hot. Also your cable should be thick enough to handle the current without getting hot.</p>
<p><strong>Controller:</strong></p>
<p>As you already know you will get into the memory limit with the Uno. Your assessment of the needed memory for using the FastLED library (or the NeoPixel library) is correct. You will need 18kB only for the buffer (not including the rest of the programs variables).</p>
<p>Now you can either</p>
<ul>
<li>change to a microcontroller with enough RAM to handle that buffer</li>
<li>or send the data out on demand instead of first filling it into a buffer.</li>
</ul>
<p>The first option will definitely be easier with programming. The second option will require you to do some handwork. The libraries that I know of all use a buffer. Though I've once read <a href="https://wp.josh.com/2014/05/13/ws2812-neopixels-are-not-so-finicky-once-you-get-to-know-them/" rel="nofollow noreferrer">this article</a> about the timing on WS2812B LEDs. In the end the author also links to <a href="https://github.com/bigjosh/SimpleNeoPixelDemo/blob/master/SimpleNeopixelDemo/SimpleNeopixelDemo.ino" rel="nofollow noreferrer">his working code</a>, which puts out the data directly without using a buffer. You might wanna have a look at it. Also you could look at the code of the FastLED or Neopixel library. They of course also have the code to send the data and you might be able to copy and adapt that code for your case.</p>
