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.
1-40 of 95Next »
wpelletier1 year 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)  wpelletier1 year 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


Hi I am having the same problem and I cannot find the sdfatlib20120709. I am using the link you provide here. Could you give me advice on how I would go about addressing this issue?

Pierred357 months ago

Hi Leone, Thanks for this amazing instructable.

I'm trying to use PixelPal software alone but I only have a grey screen. Nothing more appear. When I tried to lauch the software directly form Processing, I have the message "No library found for ws2801".

I have the last Java and Processing and I have installed ControlP5 and GifAnimation library but notthe WS2801. The link you give in you instructable is the library for the Arduino, not the Processing. Moreover, in the Library manager, the WS2801 doen't exist. Where I'm wrong. Thanks for your help.

Best regards


SparkySolar10 months ago

Thank you for the nice instructable


ctopp1 year 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 ctopp1 year 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.

ktrantham ctopp11 months ago

I would try flipping the acrylic around!

mrhyndress made it!1 year ago

I recently made this, hooked an arduino to a matrix of 150 LEDS. Made it into a coffee table. I enhanced the project with a spectrum shield, so instead of using a SD card for preloaded content I can stream music for a visualizer. To further enhance the project I connected a Raspberry Pi via i2c and made a web app running on the Pi to change the color of the lights. This tutorial is an amazing starting point to create your own ideas. Thank you for it!

10337757_664569620257955_6274311329263378258_n.jpg10565749_691683367546580_1197162919_n.jpg10569209_691683380879912_1857542310_n.jpg10572804_691683230879927_659904421_n.jpgScreen Shot 2014-07-24 at 9.13.12 AM.png

That is really Effing Cool.

Cbreezy1 year ago

Hey all, thinking of making this, The wiring seems a bit complicated , wondering if I do get suck if someone would be able to help me through Skype or something. Just want to make sure that if I do make this that I have a contact that will be able to help me XD


FamousMods1 year ago

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!

wpelletier1 year 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 ?

alahamm1 year ago

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

antiReady1 year 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: http://www.upl.co/upload/w5Jb9Wg2B

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)

Fridoku1 year 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)  Fridoku1 year 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.

yalter11 year ago
lovely project.
what's the grid of the PixelBrite circa2010 made of? it looks semi transparent
The_Fonz1 year ago
Great project! You mentioned a madrix script that you wrote to stream data to the pixelbrite via your software. How does it work?
jburdett1 year 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?
jburdett1 year 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
cocotuning1 year 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 :

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)  cocotuning1 year 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 ?
jburdett1 year 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)  jburdett1 year 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:)
noname10981 year ago
I found cheaper led pixels, 10 dollars cheaper each on

DaveHolds2 years 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 dbholdsworthgmail.com
LeoneLabs (author)  DaveHolds2 years 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 (http://fritzing.org/download/) to open up the PCB layout.
farleysynth2 years 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)  farleysynth2 years 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)  farleysynth2 years 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.
TAGAPAW2 years 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
cocotuning2 years ago
Would it be better to put some gloss on the paint or is it not necessary ?
LeoneLabs (author)  cocotuning2 years 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.
This looks really great. I just wish I had the money for all the materials. :x
1-40 of 95Next »