12V 26mm Node Display (4.4m x 1.1 meters)

Status
Not open for further replies.
Hi all,
I am finally starting a new project in about 3-4 weeks for our conference (and hopefully something that will last a few years) using approx 1,600of these https://www.aliexpress.com/item/200...809327580.html?spm=2114.40010208.4.145.RIoMnI with the ws2811 ic although from a different supplier (just an easy link to find). From the centre of the led, they will be separated 5.5cm vertically and horizontally and span roughly 4.4m x 1.1 meters. I will use a Teensy 3.2, an OctoWS2811 adaptor and I'll be using the Processing movie2serial software for live stream. I will mount them on a 2.7mm aluminium sheet for cooling and use PC psus for the 12v supply (pulling approx. 110 amps max).

The one main question I have (apologies if it's a bit novice of me) but I notice in the tutorial that the ground on the start and end of LED run goes back to the second side of the twisted pair to the octo adapter. Will it matter that I am feeding the LEDs with 12v? Will that kill the Octo adapter or is my understanding totally off the money?

Also, will it matter if I have them linked in rows of 3 for the first 4 outs on the octo and then rows of 2 for the next 4 to equal my 8 rows or is my understanding totally off again? Or would I do 6 row of 3 and 1 row of 2 and totally forget the last run on the cat6 coming from the octo?

Other then that, does any have any pointers before I get started?

Would anyone like updates on how it goes once complete? Let me know either way as this is new territory for me!...

Thanks in advance!
 
As long as you do not backfeed 12V into the octo/teensy, you are fine. They will only have a shared ground (for signal stability), but the teensy/octo will be powered by 5V and the LEDs will be powered by 12V. Only the grounds will be common.
 
Many people have used the 12V LED strips. They works fine with the 5V signals from the octo board.

But extreme caution is needed. 12V power will instantly kill your Teensy if it touches any signal pin.
 
Hi Gents,

Can't thank you both enough. Really appreciate it.

My LEDs are sitting in Sydney customs at the moment, hoping to get them by the end of the week.

Can someone just confirm how I should wire the LEDs? I have done some further reading and I'm thinking it would make more sense to do 6 rows of three and 1 row of 2 and leave one output on the octo spare. Is that correct? Seems the most "efficient".

Also, I am convinced I saw it somewhere online where you can have a live feed from a PC via Processing and display what ever you want? Am I misinformed or is this possible? Can anyone shoot me a link with some instructions as I am not by any stretch of the imagination a programmer.

Thanks!
 
if you have teensy installed the octo examples folder includes code to stream an animation file from processing, including the processing code. Since the code is sampling a window that happens to have the animation running on it, swapping out your own patterns would be easy enough.

If you are doing mixed length strands, don't forget to think about how the code will understand the arrangment. The Octo animation streaming code is flexible, but does assume equal length strands so you'd be making some major changes either in Arduino or at the processing end to re-map the pixels.
 
@gremlinwrangler - apologies for my lack of knowledge but is there any chance you can explain this in a little more depth for me and how I would go about doing it? Even just which examples to use or if you know of a tutorial out there or could draft the code up for me. I appreciate that's a big ask, I am just realising how complex this all is - I definitely underestimated the project haha

I haven't even started building the board yet and have less then 3 weeks to get it done + programming + production material for the event...stressing a bit!
 
First step is probably to look at the movietoserial notes on
https://www.pjrc.com/teensy/td_libs_OctoWS2811.html
and see if you can come up with a wiring scheme that matches the code. If things are going to be uneven you really want to have a simple shaped area not displayed, so say the bottom edge. Remapping isn't hard and the movie to serial example includes a bunch of it you can steal from but with three weeks it's not an adventure you want.

If you don't have the strips but do have a teensy would suggest getting into the processing sketch and arduino code to make sure you can compile everything and have PC and Teensy talk. The Octo library has no feedback so you can run it on a bare Teensy without hassle.

Would suggest updating to the latest Teensy version since there have been some fixes to the Octo library to handle a change in pixel hardware that happened early in the year, and your new pixels will probably be the new timing.

Once things install and compile and you can stream a movie to your Teensy without any outright errors look at the processing code, especially
void movieEvent(Movie m) {
and the line
ledImage.copy(m, xoffset, yoffset, xwidth, yheight,0, 0, ledImage.width, ledImage.height);

That is copying to memory from the an image 'm'. You want to instead get it to copy from your own image, see ref
https://processing.org/reference/PImage.html
So the simple first step is to bait and switch the movie code and get it to output say a jpg as in the example
Then go to setup and change
size(480, 400);
to
size((480*2), 400);
Now you want to get out your array hat and add some pixels code
https://processing.org/reference/pixels.html
to
void image2data
down where it's reading pixels to stream out
pixel = image.pixels[x + (y + linesPerPin * i) * image.width];
under that add a line that looks something like
pixels = image.pixels[(x+480) + (y + linesPerPin * i) * image.width]; //writes to the right of the existing replay area by adding 480 to x value

You need to load and update pixels before and after the nested loops. If things aren't working set pixels to pink as per the example and see if that points you in the right direction.

At this point you should have code that sends an image of your design to the Teensy, and also reads it back as a sanity check, so you can then experiment using a non static image and removing more of the movie code, which is still running and consuming CPU time for no reason at the moment.
 
I can't thank you for this enough - Just having people who are willing to give some advice out of the goodness of their heart is something to appreciate sincerely.

Now, just as a quick note/question. I am sure I have seen it somewhere (I just can't find it for the life of me) where someone had a small box on the screen and whatever was under it is what the LED's would pump out - like a little viewing window. Ideally I was hoping to do something like that on the right side of my screen and have the other side of my screen with a list of little clips I want to run which should only be about 5 or so. This is an example of the stuff I will be putting up there https://www.youtube.com/watch?v=AM_-sblQbXs - the issue is that because it's a production, I won't have time to upload code and wait for it to start doing it so I was just going to run the media via VLC or something and have this little "viewing" window line up with it. If that makes any sense at all.

Is this sorta the path you are advising in your detailed explanation? I just don't want to be wasting your time on something I will never be able to do as I will be honest - at first glance, that probably seems a bit beyond my skill level (despite how novice it may be haha...)

Thank you again!
 
Ah, had thought aim was to live play effects from within processing.

Screen capture from processing is a bit tricky, since it's designed to be OS independent and movie playing is often hardware accelerated so the pixels need to be grabbed from the video card driver not normal graphics calls. Also has security and privacy implications that make people cautious about how they support it. You would have to dig into the Processing docs to find out if and how to do that. Most of my processing work has been in generation of pixels rather than replay.

Depending on what you are trying to do there are existing Octo examples for glediator and artnet
https://github.com/PaulStoffregen/OctoWS2811/tree/master/examples
that may or may not be plug and play with what you are already doing, and replace the processing side to third party software that will be easier to use/limited by what they are designed to do.
Fastled may also have examples that bridge to things you are already doing
http://fastled.io/
fastled is more CPU intensive than the Octo library but can still do 8 at a time output
https://github.com/FastLED/FastLED/wiki/Parallel-Output
so will run on the same hardware, just may be slowerer because it needs time between frames to read data in. fastled has a much larger community so more interfaces and examples which may get you good enough soon enough for this job, even if it won't be as efficient.
 
Okay so all's looking well even considering my basic knowledge haha.

Can someone please just help me with what configurations I have to make to the code below considering I will have a matrix that is 80 x 20 pixels. Do I just need to change const int ledsPerStrip = 34; and const int NUM_LEDS = 272; to const int ledsPerStrip = 80; and const int NUM_LEDS = 1600; and also const int config = WS2811_GRB to const int config = WS2811_RGB - are they the only three changes I need to make and then just upload it to the teensy and it should receive data from Glediator (assuming I install it correctly)?

The whole code inserted below.



Code:
// Glediator example with OctoWS2811, by mortonkopf
//
// https://forum.pjrc.com/threads/33012-Gladiator-with-OctoWS2811-working-example

#include <OctoWS2811.h>

const int ledsPerStrip = 34;
const int NUM_LEDS = 272;

DMAMEM int displayMemory[ledsPerStrip*6];
int drawingMemory[ledsPerStrip*6];

const int config = WS2811_GRB | WS2811_800kHz;
OctoWS2811 leds(ledsPerStrip, displayMemory, drawingMemory, config);

void setup() {
  leds.begin();
  leds.show();
}

int serialGlediator() {
  while (!Serial.available()) {}
  return Serial.read();
}

void loop() {
  byte r,g,b;
  int i;

  while (serialGlediator() != 1) {}

  for (i=0; i < NUM_LEDS; i++) {
    b = serialGlediator();
    r = serialGlediator();
    g = serialGlediator();

    leds.setPixel(i, Color(r,g,b));
  }
  leds.show();
}

/* Helper functions */
// Create a 24 bit color value from R,G,B
unsigned int Color(byte r, byte g, byte b)
{
  return (((unsigned int)b << 16) | ((unsigned int)r << 8) | (unsigned int)g);
}
 
Status
Not open for further replies.
Back
Top