Tips for ws2812b project?

Hey guys! I would like some advice for my school project.

I have 3 pieces of ws2812b led-strips, 5 meters each and 60 LEDs/meter. I want to control these from my computer with a program I will be making. In the program you will be able to do animations, effects and also have some kind of ambilight-mode.

I know how to do general programming so the main program on the pc I’ll probably manage. However, I lack knowledge for the interface from the pc to Arduino to LEDs. I have researched as much as I can and feel like I only need some final opinions.

I’ve already made some tests with an Arduino Uno that I had at home. The pc communicates with the Arduino via serial (using the ordinary programming usb-port on the Uno) which works fine and sending the data to the led-strip is no problem. I’ve only used one of the led-strips (300 LEDs) during testing and a 5v 90w power supply. For the Arduino I use the Adalight-code from here:

and for the pc I took out the parts from there as well but made the colours cycle through red green and blue instead of using the screen to make an ambilight.

The results are a bit disappointing as I started this with very little knowledge and thought that you pretty much have infinite speed. After testing I now know better.

I tried different baud rates but coming close to 1Mbauds frames started to drop out. Using all 300 LEDs the best I got after testing different baud rates and delays in the pc program I was able to get 30-40 fps. I guess that’s ok for what I have. My conclusion is that the bottleneck is the Arduino Uno’s serial speed. Also the RAM is a problem as need to store 24-bit colour for my wanted 900 LEDs.

These tests were done with 1 out of 3 led-strips and if I would use them all the fps would drop to like 5-10, I would guess.

After some research I still see some hope. The Arduino Uno is my personal and I have a budget for the project to buy a new one specifically for this. As I understand, the Arduino Due is much faster, both in processing and sending data if you use the native usb. What could I expect from a Due? And also, I’m receiving and not sending data. Many posts suggest high speed while sending data to a pc, I would imagine that receiving is as fast? Is any other board better than the Due?
This guy states that the Due would be able to control thousands of LEDs:

is this still possible with a pc-Arduino interface?

If I would use the Due, it outputs 3.3 volts for the data pin on the strips while it “needs” 5v. I came across this article with an easy fix:

Is this reliable or is there any better solutions? As someone in the comments of the article stated that you could hook it up like normal if the power supply gives 5v or a bit less. Is this reliable because I am able to adjust the voltage of my power supply +-10%?

Since I want to use all 3 pieces of led-strips, would it be any difference in performance if you connect these 3 strips to different pins on the Arduino or if you make one long strip and connect only one pin?
Thanks in advance!

Welcome to the forum.

it seems you have a lot of questions, but none are THE question.

generally speaking, if you have 180 addressable points and each point can have 3 levels of 255 values and put put all those into an array

then you have another array with sequences.... you will use a lot of memory.

The general approach is to do it, then tell us what you found, post your code and we will see if there are ways to reduce the memory needed

Since you only need 1 pin for the serial bus, any micro can work.
the UNO/NANO/MINI is limited with memory

the next step up is the MEGA
0r even move to an EXP8266 or ESP32

You gain more memory and you can drive a 5v load with a level shifter or even a transistor.

Instead of having a large array, you might be able to use math formulas. but we would need to see the code.

since fading is not linear, you can multiple a value by some number to get an increase in perceived color or brightness.

Also, as you move to different boards, the memory increases and the speed can get way faster.
again, once you are finding the limits of your project, it is easier to figure a way past the problem.

one question is your mention of FPS, frames per second ?
are you trying to make a display of some sort ?

the bit about receiving and not sending is also puzzling.

I would offer to get one of the strips working the way you want
add a second, add a 3rd, then advise the problems you are having.
we can offer answers to problems that we can reproduce.

Thank you!

Maybe I’m not so straight forward with what I’m asking. I’ll try to explain my situation better.

I don’t really have a problem that I need help with, I just want opinions and suggestions as this is more like research before I’ll start this project. I will get a board almost explicitly for this project and that’s my biggest concern. As I have tested running a 300-led strip with my Arduino UNO I’ve realised it’s not fast enough, and the limitation seems to be the serial-speed. Yes, I need 3 bytes of data for each LED but that’s not really a problem as I could update the strips one at a time (receive data for strip1, update strip1; receive data for strip2 and update that one and so on) and still need as much memory as for one. Correct me if I’m wrong and that’s not doable.

However, I will probably get a board with more memory anyway. It’s really the transfer speed from pc to Arduino I’m interested in.

The reason I focus on the Arduino Due is because as far I understand it has a USB port that is different from the type of serial-connection you’ll get from boards programming port or the rx/tx pins. They are talking about a virtual serial port and using serialUSB instead of serial. Don’t know if I’m getting this wrong but I’ve red about it a couple of times:

In this answer he’s talking about a transfer speed of 480Mbps which is much faster than the almost 1Mbaud I get from the UNO.

480Mbps seems like a theoretical speed, so what speeds could I expect? I know that’s heavily based on the code I’m running but as I said, I haven’t started the project and have no code yet. If someone done anything similar, what speed do you achieve?

So that’s my real question. Now, to clear up.

I’m not doing a display, so fps might be the wrong term. Just thinking of keyframes for animation and as the LEDs will be used as ambilight I’m referring to the computer screens fps.

With sending and receiving data, I meant that I’m mainly going to receive data with the Arduino and not really send that much back to the PC.