Which Arduino card is best for my 100 to 150 Neopixel LED project?

Hello!

For my personal home decoration project, i want to solder around 100 to 150 neopixel LEDs (NeoPixel Mini Button PCB - Pack of 50 : ID 4356 : $29.95 : Adafruit Industries, Unique & fun DIY electronics and kits), just like a LED strip; and at it’s end i want to solder a neopixel jewel 7 (NeoPixel Jewel - 7 x 5050 RGBW LED w/ Integrated Drivers [Natural White - ~4500K] : ID 2859 : $6.95 : Adafruit Industries, Unique & fun DIY electronics and kits). Now my question is, which Arduino board will i need to control my custom LED strip?

Kindly note that i am not related to electronics field, so please try to guide me in a simple language.

Thank you

I don't know the answer but you are much more likely to attract someone who does if you change the Title to something like "Which Arduino is best for my Neopixel project". If you modify your Original Post you can change the Title.

...R

Hi Robin2!

I have changed the title as you have suggested. I hope someone will guide me now.

Not sure if you can drive RGB and RGBW LEDs in the same sketch, I've never tried, but chaining them together would be a problem. The RGB LEDs need 24 bits (3 bytes) each for the red, green, and blue values, while the RGBW needs 32 bits (4 bytes) for red, green, blue, and white. Connecting the RGBW's to the end of a string of RGB's might work if the data transmission format is the same, but you would have to manually manipulate the colors to get the 4-byte format out of a data stream intended for a 3-byte format.

You can chain RGB and RGBW LEDs - I know you can do it if they're all SK6812, and I suspect but am not certain that you can also do it with mix of WS2812 and SK6812, but haven't done it myself (iirc, there are slight differences in the range of timings they will accept). The project where I did this is here LEDCTRLA/CanLightTest.ino at master · SpenceKonde/LEDCTRLA · GitHub - but it is, ah, not the most comprehensible code for you, I don't think... in short, it controls a board with 37 LEDs in concentric circles of 18, 12, and 6+1 in the middle, and the inner one is a set of 3-channel WWA (warm white, cool white, amber) SK6812, and the inner and outer ones are RGBWW (warm white) and RGBW (cool white)

The catch is that when you do this, controlling one of the type types will be ugly as hell, because - say you have defined the strip as RGBW and have your 7 RGB's on the end...

All will be well for the RGBW string (say it has 100 LEDs, 0~99, 400 bytes of data). Now you have 7 RGBs - those need another 21 bytes of data.

So you would tell the library that you have 106 LEDs, numbered 0~105, 424 bytes of data. So the first three colors of LED 100 would correspond to the first RGB LED, the last channel on LED 100 and the first two on LED 101 will be for the second RGB LED, and so on, and the last three colors on LED 105 will be ignored.

So yeah, it's ugly, but it can be done. When I do this, I don't use the abstractions for setting pixels provided by the library, and just directly write to the frame buffer, with stock Adafruit_NeoPixel library, getPixels gives you a pointer to the uint8_t array of pixel data (remember, it's a pointer and you need to treat it as such). My Adafruit_NeoPixel_Static library trades support for dynamically adjusting the length and instead you declare the frame buffer and pass it to the constructor - this saves a significant amount of flash if you aren't otherwise using malloc()/free(), and also makes the ram used by this frame buffer show up when you compile your sketch, so you don't have to be like "okay, it says my sketch uses 1600b of ram, but I know I have a 424b frame buffer, so it actually uses 2024b, and with only 2048b available on the '328p, i don't have enough left for call stack and local variables". Either way, by writing to the frame buffer directly, you can make your own functions to set color of LEDs and correct for the above-mentioned complication with the number of channels per LED, because you know which LEDs have how many channels.

(the static neopixel library originally came out of a project where I was desperately scrounging for available flash - my cores for ATtiny parts now have a more tightly integrated one that saves a bit more flash for those resource constrained parts, at the cost of having to choose the port from a tools submenu)

In any event, a nano or pro mini would be fine for this.

Personally I would develop on a Mega (for the amount of RAM). Once done, you can judge the memory usage and move to a smaller board if possible.

An Uno/Nano should have enough memory for this but it depends on the programs you want to add.

FastLED is an awesome library to control these things, but afaik doesn't support RGBW at all, nor does it have an obvious way of supporting multiple types in the same chain (the different LEDs should support one another as each LED's integrated control chip relays the signal to the next). For sake of simplicity I'd wire a separate data line to that one RGBW LED (they can share power supply) and operate it separately. For sure that's the easiest way to do.

Hi David_2018,

To be honest, i actually wanted to know what you have suggested. So, thank you very much for your suggestion! Now, i am going to use NeoPixel Jewel 7 RGB (https://www.adafruit.com/product/2226). Will that be OK?

Hi DrAzzy!

Thanks for your guidance. I tried to understand what you want me to explain here, but it’s bit complicate for me because i am not related to electronics field and it’s my very first project. Even though i am going to keep your advice and go for Arduino Nano because i find you as a pro in this field of electronics.

Hi sterretje,

I have check this page (https://www.eerkmans.nl/powering-lots-of-leds-from-arduino/). And according to it, for 100-150 leds Arduino Uno/Nano will work fine. Am i right? Arduino Mega 2560 is bit costly for my project. And it’s not even compact in size. Thanks!

If you can live with the limits that an Uno might impose, go for it. You will find the limits while you're developing; sometimes you can find workarounds and sometimes not.

You never mentioned a size constraint :wink:

Hi sterretje!

I actually like your suggestion. But size is a thing for me. If Arduino Mega was available in compact size, i would definitely go for it. Tiny size with more power is what i like actually.

Hi wvmarle!

I am going to buy Arduino Nano as it’s compact in size with same processor as Arduino Uno. And i will surely use FastLED to control them. Can you please tell me, if i solder an RGB Jewel 7 WS2812B (NeoPixel Jewel - 7 x 5050 RGB LED with Integrated Drivers : ID 2226 : $5.95 : Adafruit Industries, Unique & fun DIY electronics and kits), at the end of 100 RGB WS2812B LEDs (NeoPixel Mini Button PCB - Pack of 50 : ID 4356 : $29.95 : Adafruit Industries, Unique & fun DIY electronics and kits), then will that function properly or do i need to wire a separate data line to that RGB Jewel 7? The concept in my mind is, every time a wave of 10 LEDs passes through first 100 LEDs and as it hit Jewel 7 (which is at the end of 100 LEDs); it should light, all 7 RGB LEDs of Jewel 7 at it’s full brightness (7 x 60mA = 420 mA), which will give bright white light for few seconds and then the same color comes out from Jewel 7 side and goes reverse towards 100 LEDs. And this sequence keep repeating itself. So any suggestion will be appreciated...

The concept in my mind is, every time a wave of 10 LEDs passes through first 100 LEDs and as it hit Jewel 7 (which is at the end of 100 LEDs); it should light, all 7 RGB LEDs of Jewel 7 at it's full brightness (7 x 60mA = 420 mA),

Why do you think that?
I would have thought that the data that finally arrives in the end will be chopped up giving unpredictable results. That is if it works at all.

For each single LED it will take the number of bytes it needs and then switch into pass through mode and load the next LED in the chain.

SBP1234:
If Arduino Mega was available in compact size, i would definitely go for it.

It is.

eBay!

A Nano has no problem with a string of 120 LEDs, I've done that before. At three bytes per LED that's 360 bytes of memory. No problem there.

As that jewel thing uses the same LEDs it can just be placed in series with the rest. After that it's a matter of programming which LEDs are on at what time and what brightness to create this "wave" passing through.

As that jewel thing uses the same LEDs it can just be placed in series with the rest.

No it is not. The jewel thing is an RGBW LED thing and the other is a simple RGB LED, wired in a string. The links to the two types were in the original post.

From the link to "NeoPixel Jewel - 7 x 5050 RGB LED with Integrated Drivers" in #12: "May ship with either WS2812B or SK6812-based LEDs."

With the first it should just work when connected in series with the rest of the LEDs; the second not so sure, probably not.

Grumpy_Mike:
No it is not. The jewel thing is an RGBW LED thing and the other is a simple RGB LED, wired in a string. The links to the two types were in the original post.

I am sorry ‘Grumpy_Mike’, but if you had read all of the comments in this post, then i have changed my preference to RGB Jewel 7 instead RGBW Jewel 7 later. Now, can you please tell me that RGB Jewel 7 (NeoPixel Jewel - 7 x 5050 RGB LED with Integrated Drivers : ID 2226 : $5.95 : Adafruit Industries, Unique & fun DIY electronics and kits) will work fine with 100 RGB LEDs (NeoPixel Mini Button PCB - Pack of 50 : ID 4356 : $29.95 : Adafruit Industries, Unique & fun DIY electronics and kits)?

Grumpy_Mike:
I would have thought that the data that finally arrives in the end will be chopped up giving unpredictable results.

For each single LED it will take the number of bytes it needs and then switch into pass through mode and load the next LED in the chain.

Then why manufacturers claims, “individually addressable LEDs”? I thought, you can program them to light the way you want. All you need is a enough power supply and a proper board. Am i wrong with my assumption?