Go Down

Topic: "Blinker!" Megabrite/Shifty VU LED Wall Project (Read 3 times) previous topic - next topic


This is my first Arduino (or even electronics) project ever. It uses an Arduino Mega, 65 macetech MegaBrites, an 4x20 LCD display, 4 rotary encoders, a power supply and a lot of wire.

I started working on this back in September and the first version was a balloon blob that we used for a Halloween party. It had 13 MegaBrites which were controlled from a panel. It was a total mess. The whole thing came down halfway through the night. The electrical connections were unstable which forced me to have to fiddle with it a few times - in the dark - pain in the ass. But it helped me figure out where the weaknesses were and I was able to correct them for the wall panel version.

I can't post any links or images of my project until I've made at least one post. Hopefully I can post in my reply to this.


Video of control panel / LCD display

I finished the four 16 light panels a couple days before New Year's Eve and managed to get it hung in our room at a warehouse party in Toronto. I spent so much time building the panels and working out the base functions of the controller that I didn't get much time to write programs. In total there are currently 12 selectable programs - two chaser effect variants, a couple randoms, two VUs, blink and a couple plasma effects. I'm working on more effects and think I could eventually have around 40 - 50 - most of them "beat" effected.

Video of Volume Units program (makes pretty basic use of the Shifty VU)

Video of Random program

And a few build pics:


I have some questions about performance and this is probably just my inexperience with the platform and with code optimization so hopefully it can be made faster.

1. When I went from 48 lights to 64 lights I saw a huge decrease in performance. From ~ 25ms / loop ~ 45ms / loop. I probably just need to optimize my code but are there better platforms to be working on for this other than arduino? It would be nice to get refreshes down below 20ms/loop.

2. My 4X20 green LCD screen needs to have delays added whenever a refresh is done otherwise it goes all wonky and this slows the whole light panel down when I'm changing parameters in the program because it's updating the LCD screen. I guess the same as question 1 - are there any platforms that are multi-threaded or is there a way to get around this "refresh" wait?

I eventually want to move up to 128 lights but I'm not sure how I'm going to do it with the current performance I'm getting. Is it possible to run arduino's in parallel maybe? I could hook up 2 or 4 and have them work together maybe.

I dunno. Let me know your thoughts.



One final thing. This forum and Garrett Mace were an amazing resource for me during the entire development of this project. I couldn't have done it without you guys. Thanks!


Looks great!

I've been scratching my head over the performance change, and I'll probably ask to see your code at some point. But it strikes me that algorithms don't always scale linearly. For example, maybe moving to 64 lights meant that some of your mathematics got pushed from 8-bit math into 16-bit, or 16-bit into 32-bit, etc. Or you crossed a barrier in how much you can get done between timer interrupts, so it has to put what you were doing on the stack and get back to it later.

If I take a look at some of your code I might have a few ideas to streamline some of the processing. The 80 MegaBrite wall we made seemed to update pretty fast, I remember something like 30ms, though I didn't need that much.
Unique RGB LED Modules and Arduino shields: http://www.macetech.com/store

Go Up