# 3x3x3 LED Cube with Arduino Lib

There are other Instructables about building LED cubes, this one is different for several reasons:

1. It's built with a low number of off-the-shelf components and hooks up directly to the Arduino.
2. A clear, easy to reproduce circuit diagram is provided with plenty of photos.
3. A unique approach is used for the software which makes programming the cube easier and more expressive.

Parts needed:

-   1 Perfboard
-   3 NPN Transistors (2N2222, 2N3904, BC547, etc.)
- 12 Resistors (~220 ohms and ~10k ohms)
- 13 Headers (male or female)
- 27 LEDs
- Wire

Remove these ads by Signing Up

## Step 1: Prepare the LEDs

This step largely follows the LED Cube 4x4x4 but we'll be building a 3x3x3 cube instead. A cube of this size is about as big as it gets without introducing additional circuitry and complexity. We'll need a total of 27 LEDs that will be grouped into three sets of nine.

Each set of nine LEDs will share a common connection amongst their cathodes (negative leads). I'll refer to each of these sets as a "level". Each of the nine LEDs on a level is connected to the corresponding LED on the other two levels through their anodes (positive leads). These will be referred to as "columns". If that didn't make sense it will become self explanatory as we build the cube.

To start we'll use a drill to create a jig out of a small piece of scrap wood. The jig will hold the LEDs in place while we solder them. I decided to space the holes around 5/8 of an inch apart (~15 mm) but the exact distance isn't critical. The hole should have a tight fit around the LED since we don't want them to move around while soldering.

Once the jig is done we're going to bend the cathode of each LED in a 90 degree angle. The cathode is identifiable in three ways: 1) It's the shorter leg, 2) It's on the flat side of a round LED, 3) it's connected to the larger piece inside the LED. Make sure you bend the cathode in the same direction for all of the LEDs.

Now we're ready to begin soldering.

## Step 2: Solder the LEDs

First place nine of the LEDs in your newly built jig. Position them so that the legs point in the same counter-clockwise direction. The photos show the cathode pointing clockwise with the anode facing out, but I'd turn the LEDs around if I did it again in order to keep the leg from obstructing the view of the LED.

Solder the sides together, one pair on each side. Use small clips to keep the legs clamped together while applying the solder.

Once each of the four sides are soldered, move the clips to hold the corners together and apply solder to each. Lastly, solder the cathode of the middle LED to one of the sides and trim away the excess.

Repeat three times.

You should now have three sets of nine LEDs. Position two of the sets one on top of the other. Keep the distance equal to the spacing already established between LEDs. Once you're comfortable with the spacing you can clamp each set of legs using two clips, one in each direction, to keep the legs firmly in place while soldering. You may need to bend around a LED to get a good connection. Solder each of the nine pairs, one at a time.

Do this one more time and you're done with the cube.

Place the cube on one side of the the perfboard. Make sure the nine legs are positioned apart evenly while you guide each one through a hole. My board has five holes between each set of legs. You want to leave as much room as possible on the other end of the perfboard to fit the various components.

Add a few clips to hold the legs in place once you're happy with the positioning. Leave plenty of leg poking through the bottom since this will make it easier to solder the resistors later. Turn the board over and solder each of the legs to keep them in place. Flip the cube back over once all the legs have been soldered.

Lastly we need to solder a lead from each of the levels down through the bottom of the board. Strip a piece of solid wire and bend a small hook on one end. Hang the hook on one of the center LEDs legs and guide it through a hole on the perfboard. Solder the hook end to keep the wire in place. Repeat again for the other two levels.

The next step is to build the rest of the circuit.

## Step 3: Build the Circuit

The circuit is pretty simple. Each of the nine columns will connect to a pin on the Arduino through a current limiting resistor. Each of the three levels connects to ground via a NPN transistor when activated by an Arduino pin.

We'll be using 12 output pins total on the Arduino but there are 18 LEDs to power. The trick is that only a single level can be lit at a time. When a level is connected to ground, each of the LEDs on that level can be powered individually through one of the nine other Arduino pins. If we light the levels fast enough it will appear as if all three levels are lit at the same time.

Let's build the circuit.

The first step is to prepare the nine current limiting resistors. I'm using 220 ohms per pin which will draw around 22mA. The value may vary depending on the LEDs that are being used but stay between about 135 and 470 ohms. Each pin is capable of sourcing up to 40mA.

In order to save room we want to solder the resistors in a vertical position. Bend one lead down so that both leads are parallel to each other. Do this for all nine of the resistors.

Once the resistors are ready we'll solder them one by one. To make it easy we're going to solder the resistor leads directly to the other components instead of using a separate wire for each. One end of the resistor will connect to a column and the other will connect to a header. Start with the first row of LEDs which is closest to the resistors and work your way back.

Once each row is finished you can use a small piece of tape to isolate the overlapping leads in order to prevent a short. Refer to the photos and diagram to see what this will look like once it's finished.

Now that the columns are out of the way, the next step is to solder the components which control the levels. The base of a NPN transistor will be activated by an Arduino pin through a current limiting resistor of 10k (or thereabouts). This will connect the corresponding level to ground which will allow current to flow through the LEDs. Refer to the photos and diagram.

Once complete the LEDs should connect to pins 2-10 on the Arduino and the levels should connect to pins 11-13, bottom to top. The pins are also configurable in the software if you need a different setup.

The circuit is now complete, time to move on to the software!

## Step 4: Using the Software

I found a few code examples floating around the 'net for controlling an LED cube. They all required large arrays of binary or hex data to control the LEDs. I figured there must be an easier way so I set out to write my own software.

My first decision was to make the software mirror the hardware. That meant addressing each LED by column and level instead of using raw port data or the traditional x, y, z. The second decision was to start with basic functions, like turning a single light on or off, and building up from there.

Lastly I decided to introduce two features which are useful for more interesting effects. One is a buffer which allows the basic functions to build up more complex patterns. The other is a sequence function which lights an array of LEDs one at a time, or all at once.

The library started as procedural code and loose functions. From there it was very easy to follow the tutorial to create a reusable Arduino library.

Be sure to download the library and unzip it to sketchbook/libraries. If set up correctly you should find an example in the Arduino software under File > Examples > LedCube > ledcube.

The code is also available on Github at gzip/arduino-ledcube.

 1-40 of 209 Next »
stringstretcher1 month ago

In your README file you state you have recently introduced an online UI for programming these routines... any link? I still love mine.

gzip (author)  stringstretcher1 month ago
The link in the readme leads to another link. As you can see, the UI is based on your Instructable and is modified to work with this cube. :)
https://rawgit.com/gzip/arduino-ledcube/master/ui/index.html
1 month ago

Got it! Thanks! Great job programming this. I showed mine today at a gathering of librarians who are interested in Arduino projects. Always gets a "wow!"

Thank you for the instructable! I was able to make an awesome working cube, and uploaded your library without a hitch. However, I was playing with the new web UI, and I keep getting the following errors when trying to upload the example to the Arduino. I have copied and pasted the entire example at the url below into a new sketch, and I still get these errors:

https://github.com/gzip/arduino-ledcube/blob/maste...

ledcube.pde: In function 'void loop()':

ledcube:49: error: 'cubeFrame' was not declared in this scope

ledcube:49: error: 'f' was not declared in this scope

ledcube:49: error: expected primary-expression before ']' token

ledcube:49: error: expected primary-expression before '{' token

ledcube:49: error: expected `;' before '{' token

ledcube:196: error: expected `}' at end of input

----------

Any suggestions?

gzip (author)  hackchip26 days ago

Hi hackchip. It sounds like you may be using the new example from github with the old library from the zip file. But aside from that I still got a different compiler error with the latest Arduino IDE (it's been a while since I last compiled this). I committed a fix for that just now and created a new zip. Try downloading the library again in step 4 and let me know how it goes. Thanks for the report.

4 days ago

Thank you! Works perfectly now. I made a beat detector circuit and am now trying to integrate the two. This is too much fun :)

bossingb16 days ago

got it.. thnx... took me a day to figure out the errors produce by the Arduino IDE. I don't know if i am the only one experiencing about the code not compiling. this what i did and solve the problem.

2.) Copy only the libraries (Ledcube.h and the other files) and paste it inside the library of your arduino.

4.) now open Arduino IDE and goto file and click open. Locate and open the Example folder of Ledcube then click the code.

thats it,,, it runs on me after different trials and errors.

stringstretcher29 days ago

One more update: I have added a 10 position rotary switch on analog 0 using switchCase that lets me select which routine to run, like a channel selector. Makes things interactive, always fun for visitors. Now I can create a series of sequences using your editor and select one to run over and over, or run the entire combination of sequences. Next I will try different ways of selecting the sequence, using different sensors.

gzip (author)  stringstretcher28 days ago

Nice touch with interactivity! Keep us posted with the results of different sensors.

TerrenceJ3 months ago

G'day, made this little 3x3x3 led cube today and thanks to you guys it worked perfectly first try, I did change it a bit but only on the circuit side and I used little high speed transistors to carry all the LED current so the UNO only switched the transistors, just wanted to play with the transistors as well, no other reason really. Anyway thanks to all on this site.

Thanks for the tutorial. Worked from the start :) I thought it will be fun to use LED in RGB color grid to make it look funnier :)

Andrew Reardon11 months ago
Thanks! It looks so cool!
fforoni11 months ago
I did it! It took me about 5 hours to build everything (more some extra hours to buy the NPN transistors that I missed).

Instead of green diffused LEDs I used non-diffused red ones and I think that diffused LEDs is the way to go. Instead of spacing 15mm I spaced 25mm and made it bigger than yours.

My next project is a 4x4x4 LED Cube using 3mm diffused LEDs. Maybe i'll post a step-by-step here on Instructables.
baitun1 year ago
This library doesn't work for 4x4x4 cube.
cheesecurd18991 year ago
I was wondering if you could review my code, I am having a problem.
inmanster1 year ago
Been planing on making a LED cube for a while. Saw you guide here and I already had a 5x5 jig I had made, all the components and an extra Uno laying around so I followed your build and have an awesome little LED cube. I'm going to play around in the library a bit and try some new patterns.Thank you for sharing.

I may upgrade this one to a 4x4x4 or just go big and do a 8x8x8.
K5J5MTO1 year ago
Hy,
This is my first project.I fallowed the steps but I could make it light up.I am using the arduino uno and one layer green leds,one layer blue leds and one layer red leds and I am using the same parts like in the schematic.The example in the library in compile uploading to arduino board but nothing.Do I have to make some changes to arduino in the settings?
Thanks.
mastelios1 year ago
Nice instructable! just did mine! now for the bigger one..
Thumbs up!
Pog491 year ago
Hi, Nice instructable! I have used it to build a 3x3x3 cube successfully!
My question is: Can I use this method to build an 8x8x8 cube as well?
1 year ago
You'd have to use shift registers to increase the outputs of your Arduino. You also would need to make sure your pnp transistors could hold the current of 64 LEDs at one time.
whiskey_141 year ago
thanks for this!
it took about 3hrs and an extra hour trying to solder wire strands onto headers, this was one of those times you wish you'd have three hands. :)
ironheartbj181 year ago
download gzip frist then unzip file attached to any verison arduino/libraries click extract all file after that then you will have to same thing file as EEPROM, ENTERNET, etc. for example go to eeprom there have four file which are eeprom.h, eeprom cpp, keyboard.txt, and example that are in your in your sketch already it will showing orange letter. the ledcube does not name a type because it does not exist in your libraries. so you will have to make new folder move four files into ledcube folder.
espongy1 year ago
Hi. I just want to clarify something. I've been searching everything about building an LED Cube here in Instructables. Aren't the collectors connected to the GND while the each emitter is connected to each row/layer?
profT1 year ago
hello,
is it possible to transform your 3x3x3 led cube to 7x7x7 one. I try this and the result is not like I would! My output are not in order, how can I write them : first line (left to right) second line (left to right or right to left) etc...
and when a led sould be on it's be of and inversely, is it normal?

thanks
Gregted1 year ago
Great instructable. Worked first time. Had to find the Pin codes. They were in the arduino script but great anyway. Levels 1 pin11, 2 pin 12, 3 pin 13, and leds are pins 2 through to 10.
gzip (author)  Gregted1 year ago
Thanks. I've added a paragraph about pins to the end of step 3.
lynxhockey1 year ago
Hey, this is my first Arduino project, but I'm having some issues getting the code pushed from the sketch to the Arduino. (I'm running 1.0.4 if that matters.) However, I keep getting an error when I try to upload it that says "avrdude: stk500_getsync(): not in sync: resp=0x00" . Also, in the event that it matters, I'm using the Arduino Diecimila.
gzip (author)  lynxhockey1 year ago
You might have the wrong programmer selected or maybe it's not getting enough power.
herroc1 year ago
awesome project, took about 2hrs start to finish. No issues at all, though i would bend the legs the opposite way (as suggested). thanks
chromedome451 year ago
Never mind I fugured it out and it works great. However form ledcube I had to modify the ledcube.cpp file and remove the refernce to newfix.h. Until then I had problems compiling.
gzip (author)  chromedome451 year ago
What were the compile errors and what version of the Arduino software?
chromedome451 year ago
One more question where do you apply power? to what pins?
chromedome451 year ago
Question about the Transistors. Is the Emitter being grounded. Looks that way.
rdela cruz21 year ago
thank you so much, that worked for me!!! hehe :)
hi,

i have very little knowledge on which port to connect thee pins from the led to the adruino
antisubae1 year ago
I fiddled with the design a little and crammed it on to a Seeed ProtoShield today. Not my best work, aesthetically, but it worked like a champ on the first try! I'm no stranger to a soldering iron, but I'm *really* new to the Arduino. It's projects like this that are really motivating me to learn the software side of things. Thanks for the awesome Instructable, gzip!
maikmuc1 year ago
Hey nice cube :-)
First I wanted to write my own library, but am not so fit yet... So I try to understand Yours and am playing around with Your code.
In the function LedCube::lightDrop I found an error since the column on Pin 10 never lights up. The parameter where You call lightPulse has to be (r-1, col, wait)
and not lightPulse(r-1, col-1, wait);
and I also wrote a function called lightRise so You can do a random column rise:

void LedCube::lightRise(byte col, unsigned int wait)
{
for(byte r=0; r<=levels; r++)
{
lightPulse(r-1, col, wait);
}
}
gzip (author)  maikmuc1 year ago
Hi,

Please try the latest on Github:
https://github.com/gzip/arduino-ledcube

And feel free to submit a pull request for the new method (or the bug if it's still present).
Eduort2 years ago
Hi, it looks very good, but i have a question, is posible to add more routines and start each whit a button?
fueler3352 years ago
AWESOME work on the library! Thanks so much for the transition from a 4 by 4 by 4 cube to a 3 by 3 by 3.I did this for a school project and got an A from it.Great website,as well... :)
 1-40 of 209 Next »