Introduction: Low Resolution Display Done Right

Picture of Low Resolution Display Done Right
A resolution of 8x8 pixels may not sound like enough for anything interesting, but with the right setup, it is possible to create beautiful, complex animations and even add some interactivity.

In the next pages I will detail the steps needed to build the low-res display you see in the video below.

Step 1: Parts and Tools

Picture of Parts and Tools

The parts needed are:
- An LED matrix driver, I used a Rainbowduino from Seeed studio
- An RGB LED matrix compatible with the Rainbowduino
- A mini USB extension cable, used to bring out the connection from the board
- A wooden box
- Foam core board or a piece of card board
- A sheet of tracing paper
- Nylon standoffs for mounting the PCB.
- Optional: volume sensor / other amplified microphone

More details are in the attached BOM

The tools needed
- A drill
- A ruler
- A pair of scissors
- A box cutter
- A Pencil
- Paint brushes and paint
- Hot glue gun
- A screw driver

You will also need some adhesive tape.

Step 2: The Box

Picture of The Box

We will use a wooden box as the enclosure of the system.
I used a box sized 16x16x7cm, but any box big (and deep) enough will do.

- Disassemble the box - this is essential to allow easy drilling and painting
- Measure, mark and drill the holes for the PCB (3.5mm dia). Make sure that the holes match the ones on the board and that the board will be centered inside the box.
- Make the hole for the usb socket. It should be a bit bigger than the connector to leave room for glue.
- Cut a window in the lid of the box. I made it 9x9cm and used a box cutter. Using a laser cutter or a dremel tool can be easier.
- Paint the insides of the box and the lid in black. This is important to improve the contrast of the display.
- Paint the outside in whatever color you like. I used white because it looks nice and does not compete with the animations.
- Reassemble the box

Step 3: The Diffuser Screen

Picture of The Diffuser Screen

The diffuser screen is made of a sheet of tracing paper, mounted on a frame made of foam core or cardboard.
I chose to use tracing paper as it is cheap, easy to find and gives the right balance between transparency and diffusion.

- Cut a square of foam-core sized to match the inside of the lid. Mine was 14.5x14.5cm
- Cut a window in the center of the square which is a little bigger than the window you made in the lid. Mine was 10.5x10.5cm
- Paint one side of the frame black. Again, this is important to improve contrast.
- Cut a square of tracing paper smaller than the size of the frame but larger than the size of the window. I made it ~12x12mm
- Attache the tracing paper to the foam core frame. I used adhesive tape as wet glue deforms the tracing paper

Step 4: Assembly

Picture of Assembly

Now it's time to put everything together

- Glue the female side of the USB cable to the inside of the hole on the box. Hot glue worked well for me
- Secure the standoffs to the box
- Connect the male side of the cable to the connector on the PCB
- Optionally, connect the microphone to the relevant pins on the PCB (vcc, gnd and scl/a5)
- Mount the PCB on the spacers
- Mount the LED matrix to the PCB
- Tuck the diffuser screen inside the lid - it should be held in place by friction.

Step 5: Firmware

Picture of Firmware
Now comes the fun part.
The Rainbowduino includes an FTDI chip so it can be programmed exactly like an arduino duemilanove.
You will need the Rainbowduino libraries available from here.

To get started, try the examples that come with the library. There are also some example sketches I made available in this repository:

More complex animations can be achieved using my particle system library which is available here with several examples:

If you attached a microphone, some of the examples in this library use its input to affect the animation,  as can be seen in the following videos

Try playing with the parameters of the animations or think of new ideas, it's addictive!

I picked the length of the standoffs to be 15 mm after some experimentation.
According to your specific diffuser material, you may need a different distance - experiment to get the best results.



jeffatwork1 (author)2016-12-07

Have just built and started playing around with this, and I have a question. For the FlameSound sketch, how would I go about making the flame wider at its base, or origin. Currently only 2 leds light up for the bottom of the flame, I would like to see it at 3 or 4 leds for the base.

ArifSae (author)2016-02-22

a lovely and different idea.

bwsteeves (author)2015-10-12

Loved this project. Thanks!

SchmurtzA (author)2014-08-11

Hi , very nice project, thanks to share it with us ;)
Do you think possible to adapt it with a bigger led matrix made with led strips ?

Something like that :

Boarderguy12 (author)2014-07-18

I cannot believe how amazing this project is!! But I need help!! PLEASE! I ordered the Rainbowduino from SeedStudio and the 8x8 led matrix. My problem is that I have never used an Arduino for anything before and cannot figure out how to program the code. What I think I understand is that the code was written to work for both the colorduino and the arduino hence the notes at the top of the code that note to change the values for the particular boards. I have programs a few of the easy example displays and got them to work but when I try to "verify" the code of the fire/plasma/emitter it tells me; " 'Rb' was not declared in this scope" and when trying another version I stumbled across it says; " 'ColorduinoScreenWidth' was not declared in this scope". Any and all help will be much appreciated! Thanks in advanced!

Boarderguy12 (author)2014-07-15

I cannot believe how amazing this project is!! But I need help!! PLEASE! I ordered the Rainbowduino from SeedStudio and the 8x8 led matrix. My problem is that I have never used an Arduino for anything before and cannot figure out how to program the code. What I think I understand is that the code was written to work for both the colorduino and the arduino hence the notes at the top of the code that note to change the values for the particular boards. I have programs a few of the easy example displays and got them to work but when I try to "verify" the code of the fire/plasma/emitter it tells me; " 'Rb' was not declared in this scope" and when trying another version I stumbled across it says; " 'ColorduinoScreenWidth' was not declared in this scope". Any and all help will be much appreciated! Thanks in advanced!

ANDRBE (author)2014-06-03

Can I just use the max7219 chip instead of Rainbowduino?

shizumadrive (author)2014-01-24

My computer just wont show the rainbowduino at all. I install the vcp drives and other stuff. Have everything and can't test it. Did you need to install anything to get it to detect?

I figured out my problem didnt have right libraries in arduino ide and was using wrong board. Think I might have had led board in wrong way too. Yeah I did about everything wrong I could.

Antoliveira (author)2013-11-10

Nice project
Thank you. I tested each program with 2 rainbowduinos and everything worked well. fantastic!
Never thought in a next project to make a spectrum analyser using two rainbowduinos? (left and right channel)
I just would like to do it, but i'm a newbie and rainbowduino is not well documented...

mikey1102 (author)2013-08-27

hi nice project having a few complications thow do i need an Arduino to program the files on or how do i get the files on sorry my first project.
thank you

shibs1 (author)2013-08-25

Hi Gilad

Again, thank you for sharing your firmware with the community. I thought I'd share with people my design at:

I added a grey transparent sheet between the tracing paper and an outer piece of clear perspex to enhance the contrast in higher ambient lighting conditions. Too be honest I'm actually not very happy with how the casing turned out, and I think I'll make a more 'conventional' square casing in the future to suit the aspect of the square RGB matrix (I think I was being just a little too clever and it never worked)

I think my favourite display is your 'spin' example. Very beautiful..and forever changing. Mesmerizing...

d4ng (author)2013-08-04

Any ideas of where to start to make this function on a one color matrix? The animations are so fantastic it would be great to use them on multiple matrices

ddeaton3 (author)2013-07-27

What length are the bolts for the standoffs?

wshankles (author)2013-06-28

Hi do you know if this mic will work? Is scl and aud the same thing?

giladaya (author)wshankles2013-06-29

SCL is the label of the pin on the Rainbowduino to which you should connect the microphone.
This pin is also called A5 and is one of the pins which are capable of analog input. This means it allows to measure different levels of audio volume vs just 0 or 1.

It is hard to see from the picture you attached whether this mic is amplified or not, but it needs to be amplified for the microcontroller to be able to read the audio levels.

rhaber (author)2013-06-05


Firstly, I'd like to say what a beautiful creation you have made. It is amazing what can be done with so few relative pixels to achieve that 'higher resolution look'. Congratulations. It is a really nice gesture of you to share with the world your firmware which has obviously taken a lot of time to produce. It is because of people like you that all the light based projects I have built over the years were even possible.

Based on your Instructable I have ordered the Rainbowduino and an RGB LED matrix. I am also seriously thinking about upscaling the display size to 2 or 3 times the size in this instructable for maybe a wall mounted display. According to the datasheet the MY9221 LED drivers in the Rainbowduino are rated to 17V. So, in theory, a custom 8x8 matrix could be made, where each of the 64 'pixels' would be made from 4 Red individual LEDs in series, 4 Blue individual LEDs in series, and 4 Green individual LEDs in series, all layed out in an appropriate pattern to maximise the uniformity of the colour mixing. Or maybe I'll just see if there are suitable high power RGB LEDs already available.

It is hard to tell from your videos but, does the display look good (ie. good contrast) in normal room lighting (with no external daylight)? I can imagine if the ambient lighting is too great then the contrast would reduce markedly. Of course, if one was using a much brighter custom 8x8 matrix display then maybe a (contrast enhancing) plain grey filter could be placed over the front tracing paper to increase the contrast in bright ambient conditions.

Thank you again for sharing. Todah Raba.

giladaya (author)rhaber2013-06-14

Thanks for your kind words :)
I think it looks pretty good in a lit room at night.
During the day in a room with an open window, you can see the animation, but some of the subtleties are lost as the light "masks" the dimmer pixels.

shibs1 (author)giladaya2013-06-19


Thanks for your reply. My LED matrix just arrived today but I think it is the wrong type as it appears to be in a semi-clear package (despite the ebay page saying it's a clear package), and the LED intensity is quite low as a result (I realise it's not going to 'super' bright because of the 1/8 duty cycle current source it's being driven with). The model number on the back (ie. pin side) of my LED matrix is CILE 2088RGB-5. Could you confirm the model number on the back of your LED matrix? Maybe it is something like ORM 2088RGB-5?

Thank you again

giladaya (author)shibs12013-06-24

Yeah, I have 2 such matrices and both have that model number: ORM 2088RGB-5

Foo_Plinger (author)2013-06-21

Is the Rainbowduino something I can build from parts, like a regular Arduino,or does it have to be ordered?

TomHammond (author)2013-06-18

I just about have my display built, getting ready to power it on for the first time!

With all of the patterns that you provided (thanks), is it possible to combine all of the patterns into one program, then cycle though the patterns every x minutes? I am also thinking of adding a button that forwards to the next pattern. Does the Rainbowduino have enough memory to do this? Would it be difficult to program?


giladaya (author)TomHammond2013-06-18

The main problem with doing such a thing is the limited memory available on the atmega328 - both the flash and the RAM.
You might be able to pull something like this off if you choose carefully which animations you run (ones with less particles) and recycle the particles themselves (IE two emitters using the same set of particles, one emitter is active each time)

Other ideas:
- use dynamic memory allocation
- find a way to run a different program after each reset of the board

Good luck and please share your results :)

IAMblacker (author)2013-06-16

sweet project!
But ,what if i use a Colorduino to replace the Rainbowduino?Is the libraries and examples still available?and ,is this powered by usb or something else?

giladaya (author)IAMblacker2013-06-18

The first incarnation was actually built with a colorduino, so the code supports it.
You need to have the colorduino libraries installed and change the "BOARD" constant in the sketch.
It is powered by USB.

Shoganator (author)2013-06-14


Thanks for the great instructable. This is one of the first that I actually followed through and completed.

Thought I would post up the result here:

Still needs a coat of paint and some fine tuning of the mic input values though...


giladaya (author)Shoganator2013-06-14

Thanks for sharing!
Really nice to see it "in the wild" :)

bluemidget (author)2013-06-09

Love the project, makes a great hand-made gift for others. How do you have the Spy mic installed to the chipset? I cannot find any sort of tutorial, and it looks like you simply have it plugged into the Rainboduino.

giladaya (author)bluemidget2013-06-14

The mic is originally made of a small PCB connected to a cable, with the connection covered with some heat shrink tubing.
To connect it to the Rainbowduino I desoldered the original cable and replaced it with 3 short pieces of solid core wires, which I then plugged into the right pins in one of the Rainbowduino's headers (VCC, GND, SCL)

See attached image for a closeup of the connection.

kuorus (author)2013-06-04

Yay! My Rainbowduino arrived this morning, and now I enjoy my virtual flame in my desk :) Thanks!

easilydistracted (author)2013-05-28

Hello? Anyone? Batteries?

Just did a quick test with a cheap emergency USB charger that uses two AA batteries - seems to work well.

TomHammond (author)2013-05-29

Thanks for the feedback. What confused me was the description of the microphone needed, being (vcc, gnd and scl/a5). The latter means "Serial Clock to A5", but I have no idea how to find a microphone with that feature. I did gather that an amplified microphone is needed; that little I know. :)

Thanks for the link to dealextreme. I ordered one and will let you know how it works. I assume that the sound (mostly) passes through the tracing paper, no holes are needed?

Thank you!

TomHammond (author)2013-05-29

May I ask one more question? When choosing a microphone for this project (like a "spy microphone" on eBay), is there a mic specification that works best and is sensitive to sound, such as ohms, resistance and other ratings?

Thanks again and I am excited about building this project!

giladaya (author)TomHammond2013-05-29

I actually didn't spend too much time choosing the microphone, just assumed that a "spy mic" would be sensitive enough.
Even if your mic isn't super-sensitive, you can make a small sketch to measure the range of values you get from the mic and then map those to the range of values you want to apply to the system.

BTW - I found this cheap sound sensor on dealextreme a couple of days ago that looks interesting (didn't try it yet):

TomHammond (author)2013-05-29

Thanks much for taking the time to post this project! Assuming that I will using tracing paper as you have, may you post the distance between the LED and the diffuser? That will help me choose a correctly sized box and adjust standoffs as necessary.


giladaya (author)TomHammond2013-05-29

The distance from the LEDs to the diffuser is about 30mm and I used 15mm standoffs.
Ymmv depending on the specific LED matrix and type of tracing paper, so try experimenting with the distance to get the best results.

lclaiborne (author)2013-05-27

Can this be made bigger? Or in series? It's outside my Zone Of Competence, but I have a few places to put bigger areas of this light.

giladaya (author)lclaiborne2013-05-27

I see 2 potential problems with making a bigger display:
1) will the effect "work"? - in small scale, the effect manages to "fool the eyes", but I'm not sure it will hold with a larger size. I guess that the only way to know is to try and see.

2) limited processing power - if you use more pixels, you need more processing and memory, both for holding the particles data and the matrix status.
I can think of several ways to go around this limitation:

a) Going monochrome - the rainbowduino is driving 64 RGB pixels, which are actually 192 individual LEDs. So for example, you could drive a 16x12 pixels matrix with a single rainbowduino.
The makers of this board even have some PCBs that make it easier to work with custom matrices:
Note that you will need to modify the source code for this to work effectively.

b) Going parallel - rainbowduinos can be chained to form larger displays, but you will need a way to parallelise the animations and the processing, as it is one board with one processor per 8x8 matrix.
This will probably be easy to work out for some animations, difficult for others.
Potentially you can also do the processing on a more powerful system.

c) If you just want a bigger display (not more pixels), you can create a custom 8x8 matrix with the LEDs spaced farther apart, and the diffuser positioned farther from the matrix.
This can have the effect of making the pixels larger, but they may also be dimmer.

shichimi (author)2013-05-23

So nice and smooth animations.Thumbs up ! Can this animations be adapted to single color matrix and plain arduino ?

giladaya (author)shichimi2013-05-23

I believe so.
The particle system library is not device-specific. It generates an 8x8 matrix of RGB values, which is then applied to the actual LED matrix by external functions.
So as long as you have a function that sets a specific pixel in the LED matrix to a specific value, drawing a frame is trivial.

If you want to go deeper, the code can be optimized for a single-color matrix, as there is no need to store the hue of each particle and the calculations can be simpler.
This should free up some memory and cpu cycles, which can be used for more particles, multiple emitters, etc.

shichimi (author)giladaya2013-05-24

So if i want only red color i can simply call Colorduino.SetPixel(x, y, pMatrix.matrix[x][y].r,0,0) for each rgb pixel?

giladaya (author)shichimi2013-05-26

I just tried it, and indeed you get only red - but particles which are primarily blue or green are practically ignored and the effect is lost.
It works a little better if I disable the hue cycling in the emitter, fixing it on red.

However, this is not a good solution as:
1) the effect doesn't look as good and
2) a lot of memory is wasted on holding color values which never change

Therefore, I think that changes to the code are required to make it work well with a monochrome matrix.

easilydistracted (author)2013-05-24

Could it run off batteries or does it have to be plugged in all the time?

VengefulLlama (author)2013-05-23

I've often imagined having a screen like this. It's hard to nail down what it is besides "fuzzy particle thing" but this is exactly right. Maybe "ambient visualizer"....

lapsmith (author)2013-05-23

Thanks a bunch. Very cool!

lapsmith (author)2013-05-23

Nice effect! I may try it in my spaceship bathroom...kinda looks like what I think a plasma drive would look like. Any links to where we can see some of the other animations (.ino files) you did?

giladaya (author)lapsmith2013-05-23

Here is a "light painter":
And a fire simulation (this one was done without the particle system library):

Horef (author)2013-05-23

wow, i would love to try and make it if i wasn't so horrible in DIY :(

samchamb (author)2013-05-23

looks like one of the aliens from star trek . one of the gaseous ones

About This Instructable




More by giladaya:Low resolution display done right
Add instructable to: