Would you do with a massive full color animated LED display? How about…
- Read your Tweets in giant 140 char gulps from a block away
- Add English sub-titles to the Eiffel Tower
- Display a live-updating, 45 digit long countdown of the number of atoms left in the known universe
What if you could build the display however long you needed it, for only about $15/foot?
What if it was really easy to build and used everyone’s favorite low cost micro-controller so you could easily change the software to do whatever you wanted?
Well you can! Read on for details and perfunctory video!
My sign is 12 feet long with 2,688 RGB pixels. It can display scrolling text at 80 frames per second. You can make your sign as long or short as you like.
(Click on pics to zoom)
The build is so simple, that you should be able to figure it out from looking at the pictures. Stick the strips to something, add some power, connect the Arduino data out pins to the strips’ data in pins.
The secret sauce is in the software. You can read about the parallel processing technique used here.
Simple text scroller
Here is a very short and simple Arduino Sketch to get you started….
It will scroll Jabberwocky across any WS2812B Neopixel strips attached to digital pins 1-7. The code is clean and should be easy to understand and modify.
Full blown multi-effect demo
Once you get bored of Lewis Carroll, try the full demo to get some ideas on how to do fancy effects like…
- Custom fonts
- Gamma correction
- Sprite graphics with animation
So much is possible, and it is super fun to find a use for all your old-school demo scene hacks!
Q: Wait, how are you driving this huge display from an Arduino? How do you fit a 8,064 byte buffer into only 1k of RAM?
Do not try to fit all the pixels into a buffer. That would be impossible. Instead, generate the pixels (and, in fact, the individual bits of the bytes of the pixels) on the fly the moment they are transmitted to the LEDs.
That’s kinda the whole point of the project.
You can read more about it here. Now you can drive an infinite length of pixels with a finite (and and extremely small) amount of RAM.
Q: Why do you keep whining about how bright it is? We get it!
Seriously, dude, you do not understand how bright this monster is until you see it in person. The “All Your Base” display has given every member of my family a migraine at least once when they accidentally glanced at it. Get yourself a pair of gas welding googles and some SPF45 sunscreen if you plan on building one of these. Once it is built, you can always crank down the brightness and/or mount it far away from humans.
Q: What is your sign made of?
I used a few a strips of plywood with a couple of aluminum angles glued to the top and bottom to make it more rigid and look nicer…
(click to zoom)
But you can use anything that you can stick LED strips to. If you are going for cheap and easy, 7 strips fit almost perfectly onto a 2×4…
Walls, I-beams, Airstream trailers, suspension bridges… would all work great too!
Q: Where does the $15/foot come from?
The other variable costs are power and structure.
A top-of-the-line 2×4 costs about $1/foot – or you can stick the strips to an existing structure for free.
Finally, you will need one Arduino per sign, and the Pro Mini goes for $3-$15 a pop depending on how long you are willing to wait for it to arrive.
Q: Couldn’t you just connect all the strips end-to-end and drive them with a single pin?
Yes, but it would more than 7x slower. That is a huge difference visually.
The code for driving the serpentine pattern bit-by-bit would also be much hairier and less efficient.
Q: Couldn’t you just use a BeagleBone and drive the strips in parallel using ledSCAPE on the PRU?
This works great, but a BeagleBone costs at least $40 (more often $55), runs complicated and vindictive Linux, outputs 3.3 volts, and it not as widely known and loved as the humble Arduino.
You can get a Arduino Pro Mini for about $5, connect the led strips directly to the 5 volt pins, and have a running sign as quickly as you can download the sketch (2 seconds)!
Q: Will this run on on other boards besides Arduino Uno?
It should work on any board that…
- Uses any 8-bit AVR
- Has at least 7 pins connected to a single port
- Runs at 16Mhz
This includes the Arduino Pro Micro, which is particularly well suited and super cheap.
Q: How big a power supply do I need?
That depends on how long a sign you want to build and what brightness/color/content you want to display.
In the worst case, if you are turning on every pixel with full brightness white, you need about 0.25 watts per pixel. But you would never want to do that because it would incinerate all nearby life.
Normal text only has about 20% of the pixels on at any given moment, and 50% bright white is looks almost nearly as bright as 100% but uses half the power.
Switching from white to colors can drop power by 2/3rds, and a dim red text display can use so little power that a 10′ long sign can run off a USB port.
Q: What is the longest sign I can make?
The limiting factors are…
- Power. You need a big enough supply.
- Voltage drop. You need to be able to get enough voltage to the pixels that are farthest away from the power supply connections. These will typically be to ones on the middle of the display if the power connections are on the ends.
- Refresh rate. It takes about 25us per column to refresh the display, so the longer it gets, the slower your frame rate will be.
- Physical constraints. Can you get it down your stairs? Can you find something that long that wont break when you pick it up?
I made my sign only 12′ long because is the longest thing that can make it down my stairs. 400 pixels long also gives 80 frames per second refresh rate, which is just fast enough for nice animations.
I’d love to make a 100 foot long sign if you can find me a long enough surface to mount it on, and tell me what it should say!
Q: Why did you use 96 Pixel/Meter strips rather than 60 Pixel/Meter?
Because I had a bunch left over from another project, and they happen to look very nice. But 60 Pixel/meter strips also look nice and are much cheaper.
Q: Where can I get really, really long strips?
The longest strips I’ve seen for sale are only 5 meters long and the cheapest are typically 1 meter long, so I splice them together.
Q: How do you splice them?
I made a simple jig to keep everything perfectly aligned and at the correct pitch while I solder away…
Q: Why did you only use 7 of the bits? Why not make the sign a full 8 rows tall?
- I had a nice 7 pixel font sitting on my desk from a recent project and didn’t want to waste time making/finding/converting an 8 pixel high font.
- I wanted to keep the RX pin (Digital Pin #0 on the UNO) free so that the sign could be driven by sending serial data from a laptop connected to the Uno.
- I cut the plywood infill just ever so slightly too narrow to fit 8 strips. That’s why there is a blue margin above and below the strips.
Q: Can I get the schematic and gerbers for the custom PCB?
That’s just a crappy Radio Shack perf board to hold the wires together and make something that I could plug and unplug. It has no parts. If you were using an Arduino Pro Mini, you could solder the data wires directly into the board and then twist the power wires together with a wire nut.
Q: How can I slow down the scrolling speed?
Higher numbers, slower scrolling.
Q: I want to build a sign that is 14 pixels high, can I just wire the inputs for each set of two strings to one output pin?
Sure thing! Or groups of three for a 21 pixel tell display!
But your display is going to look blocky because you have not increased the vertical resolution. It would be possible to drive a taller display using more pins and higher resolution, it would take a little work – mostly making a taller font.