Picture of PixelBrite
vlcsnap-2013-07-15-19h21m55s167 (Small).png
IMGP0561 (Small).JPG
IMGP0559 (Small).JPG
vlcsnap-2013-07-15-18h58m43s246 (Small).png
IMGP0554 (Small).JPG
IMGP0558 (Small).JPG
IMGP0208 (Small).JPG
IMG_0023 (Small).JPG
vlcsnap-2013-07-15-18h56m16s110 (Small).png
IMGP0355 (Small).JPG
IMGP0349 (Small).JPG
IMGP0348 (Small).JPG
IMGP0345 (Small).JPG
IMGP0341 (Small).JPG
quad layout (0) (Small).jpg
IMGP0340 (Small).JPG
vlcsnap-2013-07-15-19h23m17s224 (Small).png
IMGP0333 (Small).JPG
vlcsnap-2013-07-15-18h58m08s197 (Small).png
vlcsnap-2013-07-15-18h59m21s204 (Small).png
IMGP0557 (Small).JPG
vlcsnap-2013-07-15-18h59m38s113 (Small).png
vlcsnap-2013-07-15-19h01m53s193 (Small).png
vlcsnap-2013-07-15-19h01m59s247 (Small).png
vlcsnap-2013-07-15-19h04m04s196 (Small).png
vlcsnap-2013-07-15-19h09m26s105 (Small).png
vlcsnap-2013-07-15-19h10m40s63 (Small).png
vlcsnap-2013-07-15-19h14m10s111 (Small).png
vlcsnap-2013-07-15-19h15m43s27 (Small).png
vlcsnap-2013-07-15-19h17m41s156 (Small).png
vlcsnap-2013-07-15-19h18m47s54 (Small).png
vlcsnap-2013-07-15-19h21m00s131 (Small).png
vlcsnap-2013-07-15-19h22m28s243 (Small).png
vlcsnap-2013-07-15-19h24m18s46 (Small).png
vlcsnap-2013-07-15-19h12m58s165 (Small).png
vlcsnap-2013-07-15-19h19m08s9 (Small).png
vlcsnap-2013-07-15-19h19m35s247 (Small).png
IMAG0828-1 (Small).jpg
IMGP0472 (Small).JPG
IMG_0190 (Small).JPG
IMGP0224 (Small).JPG
IMGP0223 (Small).JPG
IMGP0185 (Small).JPG
IMGP0181 (Small).JPG
IMGP0175 (Small).JPG
IMGP0165 (Small).JPG
IGB (1) (Small).jpg
NYE (1) (Small).jpg
IMG_0094 (Small).JPG
early setup 2 (2) (Small).jpg
I originally started this project because I wanted to recreate the scene in the movie the Close Encounters of the Third Kind where the humans are communicating with the Mothership via a huge color organ. So I glued various bits of software together and made some prototypes and before I knew it I was talking with the Mothership with my own color organ!

I was intrigued by the potential of the color organ, but without about 20 more years of piano lessons I would never reach that maximum potential. I wanted something more programmable, a general instrument, not a musical instrument thought, a LED instrument. I wanted something I could play, just like the idea of the color organ but with more complex patterns and animations and simpler controls. I wanted a way to add texture, color, and motion to music. I wanted a light show I could perform with, pixels to play with, a real-time playable instrument that could accompany a musical performance. I wanted it portable, scalable, easy to setup, easy to play, and so I built four PixelBrites, setup a couple of stage light trip-pods and plugged in my MIDI controller and laptop and I became the light show. Fun times were had by all!

But I knew I couldn't be an overly protective parent and hover above my progeny all the time,  I wanted the PixelBrite to act as a standalone light. I wanted to remove myself and the computer and simplify the experience. I wanted a disco coffee table and a minimalist light sculpture. I wanted to hang it on my wall and let it become part of the background. I wanted a night light, a party light, and a mood light. So I created a way to easily make animations and patterns and added a SD card slot to stream patterns without a computer. Now when I get home I get low-res ambiance without even opening my laptop.

If you ever had a Light-Brite when you were a kid then you might remember the experience of playing with light. PixelBrite is my digital version of the Light-Brite. It’s a plug-n-play light show, it’s a minimalist light sculpture, it’s a conversation starter and it’s a piece of wall décor. It’s a futuristic Ikea coffee table and a Daft Punk disco light. It’s bright, dark and colorful. It’s digital stained-glass. A center-piece or a perimeter-piece, it’s portable, playable and programmable.

Welcome to my Instructable, I hope you enjoy.
Remove these adsRemove these ads by Signing Up
ctopp11 days ago

Got a question about the acrylic. I'm not getting really any transparency through the acrylic. I have the ACRYLITE® LED (P95), sheet, Black/White 9H04 SC mounted with the matte side facing the LEDs and the glossy side facing out. But I get almost no light pass through.

ctopp ctopp11 days ago

I actually am really getting zero light. I've held it up to multiple light sources in the dark and I get zero transmission. Is this truly the acrylic you used? From the picture it looks more like something with much more transparency.

Is there anyway you could briefly explain how exactly the "Streaming" portion of your code works? As far as i can decipher the LEDStream function simply stores the data to the SD card, it doesnt actually stream to the pixelbrite? i havnt finished the construction of my own version yet so i havnt been able to verify this yet... Thanks!

wpelletier2 months ago

In the Arduino Sketch, it says in the beginning it is compatible with PCB v2. Were can I find the layout for the second version of the PCB? I'm asking because running the sketch with the v1 I have downloaded here does not seem to work properly.



In fact, what happens is, when I power up the PB, it shows briefly: Full Red, then Full Green, then Full Blue. I assume this is the Rainbow in the opening setup. But then, it turns black and the full white rather than just black. Few pixels don't even light up in the full white. Also, when I try to switch between SD and USB with the momentary switch, it doesn't do anything...

I changes the NUMpixels to 49 since I'm using 7x7. I would like to put some animations on an SD card and stream it. Can you explain to me the process ?

alahamm2 months ago

Very nice job! Can this work with an Arduino UNO and WS2812 LEDs?

antiReady2 months ago

So I decided to give this a try and test it out on a breadboard first. I edited the fritzing file of your PCB and arranged everything in the breadboard view so it should (!) work when I put it together. I'd apprechiate it if somebody cold check the breadboard layout though .. before I accidentally fry something :) - might be even helpfull for other people who want to give this a try, too. (Its been ~10 years since I last fiddled with a breadboard but this project seems worth the trouble)
Updated Fritzing file with my breadboard attempt:

Also, while going through your fritzing files I noticed that two wires in the schematic view were not actually connected even though they visually appear to be (Pin5 [D0] with the screw terminal/resistor and a wire from the molex connector to the switch)

Fridoku2 months ago

I love your Project gonna build it for school soon :D

But I have a Question: Why isn't the SD Adapter connected to the standard SD Pins on the Teensy and where are your custom Pins declared?

LeoneLabs (author)  Fridoku2 months ago

The "standard SD Pins" are hardware SPI pins within the microcontroller. I decided to use them instead for the SPI-like interface to the WS2801 LED pixels rather than the SD card. I thought this might help performance but I've never confirmed it. The custom pinout is declared in the sdfatconfig.h file, where the pin numbers can be changed under the "software spi" section.

wpelletier3 months ago
I have a hard time with the programming stuff. I have never done any before and I taught that I could just download the libraries and the code and simply run it into the Teensy 2.0, but it seems like the codes have some errors...

In the LeoneLabs_PixelBrite_v1 code, it says " 'istream' has not been declared."

How can I simply run the codes all together into the Teensy? I have all the libraries (SDfat and WS2801) in the Arduino libraries folder, but there is always those errors appearing in the software... I just want it to run like it did for you... Please guide me here.

Thank you,

LeoneLabs (author)  wpelletier3 months ago
istream is used in the SDFat library. You may want to try reinstalling that library or try a slightly older version. I believe I built the PixelBrite software with sdfatlib20120709 and Arduino 1.01. What version of SdFat are you using? Also what version of Arduino? Also are you able to load samples on the Teensy using the Teensyduino software from PJRC

yalter14 months ago
lovely project.
what's the grid of the PixelBrite circa2010 made of? it looks semi transparent
The_Fonz4 months ago
Great project! You mentioned a madrix script that you wrote to stream data to the pixelbrite via your software. How does it work?
jburdett4 months ago
Is there a way to swap the RGB data to be used with strips with BGR ordering? I was able to modify the ws2801.h library file but that only fixes the SD stream. Is there anywhere in the pixel pal source files that can alter the ordering for the usb stream?
jburdett5 months ago
Did you find the acrylic fit perfectly for you or did you have to do any adjustments? I'm finding that with the tri-corner brackets all snug and flush with the rails the acrylic won't slip in. Looks like I need to shave a mm or two off. Can I run this stuff through the table saw?
tri-corner gap.JPG
cocotuning5 months ago
I progress in the project, but I can't display pictures from the SD card.
The main problme come with this line in SDstream :,numPixels*NCOLORS)

How does it works, because we don't specify the type of file or anything ? What kind of picture must I use ? I have a 10x10 matrix.

LeoneLabs (author)  cocotuning5 months ago
The SDstream code relies on SDFat.h library, so be sure you have that installed.

Included in the SDFat library is the SdFatConfig.h file which includes some code for defining which pins are being used to communicate with the SDcard reader via a Software SPI interface. The code in the SdFatConfig.h file will look something like this (minus my comments). You'll need to make sure these pin values match the physical pin values you are trying to use with your setup.

#define USE_SOFTWARE_SPI 1 // define software SPI pins so Mega can use unmodified 168/328 shields
/** Default Software SPI chip select pin */
uint8_t const SOFT_SPI_CS_PIN = 6; //ML - was 21
/** Software SPI Master Out Slave In pin */
uint8_t const SOFT_SPI_MOSI_PIN = 8; //ML - was 19
/** Software SPI Master In Slave Out pin */
uint8_t const SOFT_SPI_MISO_PIN = 9; //ML - was 18
/** Software SPI Clock pin */ uint8_t const SOFT_SPI_SCK_PIN = 7; //ML - was 20
#endif // SdFatConfig_h

The myFile.isOpen() line in the SDStream code will open the files that are in the root directory of the SDcard. You don't need to specify the name but you do need to be sure the proper naming convention is used. This naming convention is called "8.3" ( here's a wikipedia link for reference) which means the filenames need to <8 characters and the extension needs to be <3 characters.

The files which are saved in the PixelPal software are just binary files, the contents is just a big string of numbers, there's no header information. So for instance if you try to display a 10x10 PixelBrite pattern on a 20x10 PixelBrite display the image will look scrambled. You can generate the PixelBrite patterns from the PixelPal software.

Hope this helps. Let me know if you have any more questions. Cheers.
Ok have already configured the sdfatconfig.h, but How can I made a compatible file for my 10x10 matrix from a PNG picture ? Or how can I edit the binary files ?

Thanks for your answers

PS : When I use the pixelbrite software, only 21 leds are illuminated in a random way. Do you know anything about this problem ?
jburdett5 months ago
Awesome project! Still working on my build but when setting up the software, I'm having problems with defining the size of my array in PixalPal. Changing from 10x10 to anything else doesn't seem to do anything. It doesn't change the player window the way it does in your video.
LeoneLabs (author)  jburdett5 months ago
Hmm... you have to press ENTER when you put in a new value in the textbox. Did you try that?
Ha I could have sworn i tried that...working now:)
noname10987 months ago
I found cheaper led pixels, 10 dollars cheaper each on
DaveHolds8 months ago
Hi leonelabs,

I'd like to begin by congratulating you on an exceptional project and great instructions.

I'm in the process of starting this wonderful project but i'm having a hardtime opening any of the files on GitHub, could you please tell me what pograms i should be using to open all the files. especially the fritzing or pcb file as i wish to etch my own pcb but cant seem to get anything to open.

Thankyou kindly. Dave
i can be contacted on
LeoneLabs (author)  DaveHolds8 months ago
Thanks for the support!

To download all the files, use the "download ZIP" button in the lower right corner of the GitHub page.

Then you'll need to download Fritzing ( to open up the PCB layout.
farleysynth8 months ago
Superb creation. I made one.

I have the Teensy/SD reader working on a breadboard. 

I hand cut the waffle out of foam core. Came out better than I expected but took forever.

I do have one question - (disclaimer - I'm a microcontroller/teensy/arduino novice) - I'm good with c and electronics.

I couldn't get the SD card readerto work on the pins in the schematic. I had to use B0-B3 for the card (and move the lights to 6 & 7). Is this because of my environment, or do I need to make changes to core_pins, or other include file?  core_pins.h is a teensy creation and contradicts the info card that came with the Teensy 2. It's for the C language side of the info card, not the arduino side (which is how Pixelbright is implemented)

Still working on this but any insight appreciated. Is it OK to leave it this way? (B0-B3 for card, lights on 6 & 7)

Soon, I will try to get it working with a DMX-SPI convertor/controller. Any thoughts on this?

Excellent project and thank you to Leone Labs for the idea!
LeoneLabs (author)  farleysynth8 months ago
Thanks for pointing this out. I forgot to include this in the Instructable, the software SPI pins need to be changed in the sdfatconfig.h file that's included with the SDFat library in order to match the wiring schematic. Here's what I ended up using.

// define software SPI pins so Mega can use unmodified 168/328 shields
/** Default Software SPI chip select pin */
uint8_t const SOFT_SPI_CS_PIN = 6; //Leonelabs - was 21
/** Software SPI Master Out Slave In pin */
uint8_t const SOFT_SPI_MOSI_PIN = 8; //Leonelabs - was 19
/** Software SPI Master In Slave Out pin */
uint8_t const SOFT_SPI_MISO_PIN = 9; //Leonelabs - was 18
/** Software SPI Clock pin */
uint8_t const SOFT_SPI_SCK_PIN = 7; //Leonelabs - was 20
#endif // SdFatConfig_h

Let me know if I can help any further. I'd be curious to see how you incorporate DMX.
Thanks for the helpful reply. I'll plunge back in Saturday morning.

Why did you make this change? I googled around a bit for SOFT SPI etc etc. But nothing specific yet.

Do you have pointers to more info about this, or a quick explanation?

Thanks, I know this isn't Arduino 101 class. I appreciate your help.
LeoneLabs (author)  farleysynth8 months ago
I decided to use the hardware-based SPI for the LED control and the software-based SPI for the SD card because I believe the hardware-based SPI can achieve higher speeds for the case of streaming from the USB (not the SD card), which is what I want for video frame rates(>30fps). The term "hardware-based SPI" refers to the fact that the SPI protocol is essentially hardwired into certain pins of the microcontroller. The term "software-based SPI" refers to the fact that the SPI protocol can be mimicked by "manually" toggling the outputs of any set of digital IO pins via a set of software instructions. Hope this helps. Cheers.
TAGAPAW8 months ago
hey Leonelabs, very very nice working. I Wondering, you use teensy for microcontroller, can i use arduino instead of teensy (because teensy not available here and i also already ordered 6 months ago which never came) ? also do i need to tweak the code for arduino ? thanks a lot
cocotuning8 months ago
Would it be better to put some gloss on the paint or is it not necessary ?
LeoneLabs (author)  cocotuning8 months ago
"Gloss" won't really help. Gloss might give you more specular reflections rather than diffuse/scattering reflection but it won't increase the amount of light be reflected.
splashattack8 months ago
This looks really great. I just wish I had the money for all the materials. :x
Beergnome8 months ago
Simply incredible... I now want to do the ceiling of my apartment like this :D

Looks like the biggest expences were the LED's themselves and the laser cutting service.

if you dont count your personal time and skill to the end expenditure, one could fabrivate the "waffle" with a straight edge and a Xacto knife.
LeoneLabs (author)  Beergnome8 months ago
Your quite right, in fact the very first prototype I cut the waffle grid by hand, although it was only a 5x5 grid rather than a 10x10.
SimonAndre8 months ago
That's pretty amazing!
I have a question.. How could you (if it is even possible) make the LED's sound/music reactive? I mean, like adding a mic, and then if you say, play the guitar or piano in front of it, the LED's would react to it.. Is that possible? and how? :)

Thanks for this! I will have to try it myself, can't wait!
LeoneLabs (author)  SimonAndre8 months ago
The PixelBrite is kind of like a secondary display so if you have a laptop or tablet you could plug the Mic into that and use your own music visualizer to stream a pattern to the PixelBrite via USB. Good luck.

silopolis8 months ago
Just A.M.A.Z.I.N.G ! :-O
Count me in for a kit and/or crowd funding campaign supporter... can't stand waiting :-P
LeoneLabs (author)  silopolis8 months ago
Thanks for the support. Let's cross our fingers that we can reach escape velocity and get the PixelBrite in orbit!
Knight Lamune9 months ago
Another future "shut up and take my money" supporter for a kit reporting in. =o
MCUman9 months ago
Utterly AMAZING!!! Well Done!! Where do I get the kit?

Get More Out of Instructables

Already have an Account?


PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!