5

I'm trying to build a sign board made of LED strips, just like this

I found a ton of examples on controlling a single strip and also examples using the adafruit premade led boards (16x32), but no info at all on building from a LED reel like in the linked video.

I guess someone already built a library to control the leds (I think in the Arduino world it's called FastLED). And yes, I know there are products like this that can achieve what I want in 5 minutes, but I want to do it with only a Raspeberry PI like in the video.

Can someone please point me in the right direction?

EDIT: Changed some tags

3

There is an integrated circuit (IC) called the MAX7219 that is designed to drive 7 segment LEDs. Specifically, one IC can drive 8 at a time. It also has a second mode which allows a single IC to drive 64 LEDs in a matrix. Putting it another way, in your example, one MAX7219 could drive 8 columns of 8 LEDs per column. The MAX7219 is drive by a protocol called SPI. Since the MAX7219 is an "input" only device ... one needs 3 pins to drive it. A clock, a chip select and a data pin. If you want to drive multiple MAX7219s you have some choices. First, the MAX7219 can support daisy chaining to any length you desire. For example, if you used 10 MAX7219s you would have an 80x8 array. If you used 20 MAX7219s, you would have a 160x8 array.

An alternative mechanism (one I don't necessarily recommend) is to have all your MAX7219s share the same clock and data line and use the chip select to specify which instance you are writing to.

A whole different approach would be to use NeoPixel LEDs. These are LEDs that can illuminate in a variety of colors and brightness's with usually 8 bits for each of red, green and blue. These LEDs can be "chained together" with no obvious limit to their length. You could then "snake" a chain of NeoPixels either up/down or left/right achieving the matrix you desire. Because NeoPixels are highly timing sensitive, I use a cheap Arduino as the driver for the NeoPixels and then drive the Arduino through communications from the Pi ... basically an Arduino becomes an LED driver module with the content logic coming from the Pi.

  • Thanks for the answer but there has to be another way. Looking at the video we know that's a 8x92 sign, and it seems there's no external ICs beign used... only 2 gray cables are connected to the LED first strip and those cables go to the MOSI/CLK pins on the Pi. Note that all the other strip are carrying the data cables from the previous strip, so this wasn't done using multiple controllers. – NickPR Jun 16 '16 at 5:42
  • 1
    I watched the video again and what I think we are seeing is in fact NeoPixels (aka WS2812 aka LED 5050s). These are LEDs that can output a variety of colors. Each LED has 4 pins ... +ve/-ve, Data In and Data Out. The Data Out of one pin plugs into the Data In of another. The data sent down the wire is a sequence of bits to tell the LED what color to be. If the data "keeps coming", then the data "spills" into the next LED. I'd suggest using an Arduino as the LED driver and let the Pi drive the Arduino. You will also need a lot of power to drive so many LEDs. – Kolban Jun 16 '16 at 5:45
  • Yes I'm aware of the power requirements. I was hoping for a 16x160 sign but I don't think an Arduino can handle that, memory constraints wise, if we take into account the FastLED library + animations. There's also the "Adafruit Facecandy" option... still, I'm kind of amazed on how those people did it. SPI is very fast and those LEDs can be addressed individually, so maybe they wrote a custom library just for that sign. Sorry I can't upvote your answer, not enough rep :-/ – NickPR Jun 16 '16 at 6:07
  • If we ask ourselves ... how many NeoPixels can the Arduino drive ... we have to realize that the Arduino would have to send, at one time, the buffer for the whole image. Since a single LED needs 24 bits of data and let us assume that we have 2000 bytes on the Arduino for buffer storage, this would give us a max of about 650 LEDs that could be driven. Your desire of 16x60 = 960 is too much for the Arduino solution. Instead, we could use an ESP8266 with is 96K of RAM as an Arduino alternate... – Kolban Jun 16 '16 at 15:09
1

You can drive NeoPixels (RGB WS281x LEDs) which are available individually or on reels. They will need to be connected to the the PWM port on the GPIO. You will need a level-shifter to increase the GPIO output to 5V (a simple MOS-FET switch can be used).

The library to control them is available at: https://github.com/jgarff/rpi_ws281x

I'm not aware of any physical limit LEDs that you can drive as the signal is passed through, although you will need to ensure that you have sufficient power to control them. I've run 150 simultaneously, but I did find the brightness was not as good at the far end due to the voltage dropped in the wire, which could be reduced by connecting the power to appropriate points within the string of LEDs.

  • Thanks for your answer Stewart. I browsed to library but I can't find any reference to handle text, scrolling or simple graphics like in the video. It seems it's just a wrapper to turn individual LEDs on/off by position. – NickPR Jun 16 '16 at 11:45
  • It's a low level interface. You can track each pixel as a position on a grid (x,y co-ordinates), but if you want text you need to convert that into pixel values. You can do that manually (ie using your own code) or find existing libraries / code that does that already. – Stewart Watkiss Jun 17 '16 at 13:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.