Picture of Arduino 4x4x4 LED Cube

     This instructable will cover the building process of an 4x4x4 LED Cube. I will be using an Arduino to control the LEDs.  Since the Arduino (Freeduino) has a total of 20 pins (including the analog pins) we will not need to have any multiplexing or shift registers.  I will take you though what i did in order to build the cube and create some designs of your own.

Step 1: Bill of Materials

Bill of Materials

 For this project I used the freeduino Arduino. Because the Freeduino has a total of 20 I/O pins (with using the analog pins) we will not need and multiplexing or shift registers. So all we will need for our project is:

1. LED x 64
2. Resistors x 16
3. Arduino x 1
4. Perforated PCB
5. Soldering Iron
6. Drill (for the jig)
7. Piece of wood (for a jig)


   I have found sparkfun.com and digikey.com to be good suppliers of small electronic components in general and are currently the only two that I have purchased anything from.

Gatlarf made it!1 month ago
Thanks for the tutorial. Works like a charm!
Wouldn't the amount of current going through the ground pins blow them out? Like if all the LEDs in one layer are on, you'd need 16x20mA of current for the ground pin on that layer, and doesn't each pin on the Arduino only output like 40 or so mA?

I thought that was why you needed a transistor for each layer, because the arduino couldn't sink the right amount of current to ground.

Did you ever figure this one out? bc im confused here as well

boxman1172 years ago
are you soldering to the anodes or cathodes

the layers will be negative/Cathode and each column will be a positive/anode.

boxman1172 years ago
i am wondering what PCB i should get
Phogie7 (author)  boxman1172 years ago
Any that the holes are not already connected. :)
369ben2 years ago
Is This called multiplexing where all the cathodes of each layer are soldered together and the anodes of each column are soldered ?

Also why weren't any transistors used as I have seen in other tutorials?

Phogie7 (author)  369ben2 years ago
It sure is.

If you don't want to use your micro controller pins as a power source you can use transistors. :). You can also control the layer grounds using transistors.
WGY2 years ago
I made my cube and all of the lights work, however, there seems to be a problem with the wiring. Whenever I address a single LED in 6 of the columns, The whole column lights up. This does not happen in 2 columns where the LED's light up individually.
Help would be appreciated!
Phogie7 (author)  WGY2 years ago
Sounds like you are grounding out each layer for those columns. Make sure in the code you are only have one layer ground on at a time. Somehow those 4 layers for the 6 columns are getting grounded make sure the wiring/soldering did not get crossed somehow.
glen2472 years ago
Hey thanks a lot for the work i have created 4x4x4 led cube looking at you tutorial. 
telonics2 years ago
here's my effort using the UNO board.

Thanks Phogie!
glen2472 years ago
Hey thanks for the information. i studied and did the same cube
below is the link for the same

taattooed33 years ago
Got my first cube done,waiting on proto board and a few components to actually finish the project but the cube is done and running on an arduino uno R3. Thanks everyone for all instructibles,questions,answered questions and most of all your time and patients. http://youtu.be/QjRBElq4a-8
Phogie7 (author)  taattooed33 years ago
Congrats!! Always feels good to finish a project!
Are you sure that an arduino can handle that current? although, only one led should be on any given time, I am still concerned that i could mess up the code, and end up drawing something like an amp from an arduino pin ( .....) . Do you think I should use darlington transistor arrays to the output pins and supply voltage from an external powersupply? many thanks andrew.
Phogie7 (author)  schembri_andrew3 years ago
I think most arduinos are 40mA. If you want to live on the save side I would run them off transistors and a different power supply. Its really up to you I just decided to take the risk. My arduino still works I am sure i messed up the code a time or two but can not say for sure. I just remember the LEDs slowly getting more dim toward the top and i unpluged it as soon as possible. Could also set up functions in the code to handle the grounds. Four functions each one turns on a layer and off the others.

Best of Luck!!
ma7moodz3 years ago
Okay Im pretty much stuck here..
Where do I connect the the layer's negative control wires to? (the black wires)
Note: Im very new to arduino
Phogie7 (author)  ma7moodz3 years ago
I added a diagram step number 8. I hope that helps if not let me know.
It worked!
and here is my result
Phogie7 (author)  ma7moodz3 years ago
Wooo Hoooo!! Looks good!
DeNuzio3 years ago
Great instructable :) Here is my results.
I used forte1994 arduino's program
Phogie7 (author)  DeNuzio3 years ago
Awesome! It looks good! Not as bent up as mine got hahaha.
hey. ive read your instructions, but im not sure where to connect the leads from the resistors to the arduino? Im not sure what ports to use
Phogie7 (author)  argentinoloco873 years ago
I added a diagram step number 8. I hope that helps if not let me know.
I just posted an instructable on programming a 3x3x3 cube with an Arduino. It *might* be possible to adapt that to a 4x4x4 and give us even more programming possibilities. One would need to change the pin setup, but that is about all, I think.
earton3 years ago
I have followed your instructions, definitely the best instructable to help a beginner! I see your map for the columns, but can you tell me which cathode goes to which ground, for the layers?
Much appreciated :)
Phogie7 (author)  earton3 years ago
Thanks! It was my first one so its a little rough around the edges. I wrote a note down to get a circuit diagram up. In the code i set up pins 16-19 up as the ground pins. Those should be analog 2-5. Does that help?
Pizzapie5003 years ago
Hi! I finished the cube, but I'm not sure where to attach the 16 columns of positive diodes, to the Arduino. Also I don't know where to put the negative ones either. Can you tell me which one goes to which pin number (like if the first one goes to A0, or like D3)? Sorry i'm new to Arduino, and the other instuctables used too many pieces. Thanks!
Phogie7 (author)  Pizzapie5003 years ago
This would be from looking down onto the cube. Hope it helps! Each number represents a column of the cube and corresponds to an port on the arduino. Let me know if that works and ill add it to the tutorial!


3 7 11 15
2 6 10 14
1 5 9 13
0 4 8 12


Yeah this was my first tutorial and i realized that I did not explain the connections very well.

On the freeduino i was using use the digital outputs for 0-15 and the analog next. So analog 0 corresponds to column 14 and analog 1 corresponds to column 15. Analog 2-5 will be the negative or ground for the 4 layers.

If you need anything else let me know.
AndreD.3 years ago
Hey Sir...

Can you please explain how you write some letters in your 4x4x4 Cube?
Phogie7 (author)  AndreD.3 years ago
I may have to watch the video again but I do not think there are any letters. If you want to write letters i would suggest building a bigger cube. A 4x4x4 does not give much room to create letters or numbers.
Oh, and if you have the electronic circuit, would be great.

Thank you.

Great project, congratulations!
Phogie7 (author)  Bruno Silva Pinheiro3 years ago
Thanks! Ill make a note to create a circuit and let you know once i get it posted. :)
kelsorj3 years ago
Great project! I played around with different colors on each layer and it makes for some fun patterns.

Phogie7 (author)  kelsorj3 years ago
Nice! I do like the different colors! I would like to do a RGB one sometime just have to wait for a rainy day to spend some more on the LEDs.
iinzunza3 years ago
I have a project for a subject, and I decided to do this Cube but I have one condition... I need to use transistors, so my question is... How can I design the circuit using my arduino and transistors???
Phogie7 (author)  iinzunza3 years ago
You could use transistors to control when a specific layer is grounded. Instead of grounding the layers to the arduino you would have each layer go to a transistor. Then you can control the transistor with the arduino and chose when to ground out that layer. So in other words connect the ground for a layer to the collector of a NPN transistor and the arduino to the base and the ground to the emmitter. Then you can control that layers ground by setting that arduino pin on and off.
Brunomaster3 years ago
Por que está chueco? sabes soldar?
Phogie7 (author)  Brunomaster3 years ago
My cube got abused.... it got smashed by a drunk friend and a backpack! I was able to almost bend it back when i put it in the case.

I hope Google Translate is accurate :)

Mi cubo se abusa .... que se estrelló por un amigo borracho y una mochila! Fui capaz de casi lo doble de nuevo cuando lo pongo en el caso.
Jiax3 years ago
I don't get how you connect wires to arduino.
My leds will just blink as random and not in order when I use the code. 'Cause I wired them up just randomly. Which ports should I be using?

There is something I do wrong, but I don't know what. Please help!
Phogie7 (author)  Jiax3 years ago
Hmmm I should have put that in there, my bad. I can see how it would be useful to know how to connect everything :). This would be from looking down onto the cube. Hope it helps! Each number represents a column of the cube and corresponds to an port on the arduino. Let me know if that works and ill add it to the tutorial!


3 7 11 15
2 6 10 14
1 5 9 13
0 4 8 12

Does anyone know where to get an Arduino (i.e. the Uno) for less than what I'm finding them for? I can't really justify paying $30 for one (even tho it is very programmable), when I can get a pair of 556 relay timers for ~$.50 a piece that would perform a similar function; with the right capacitor/resistor setup.
Phogie7 (author)  Michael Dean3 years ago
My only idea would be to look into a freeduino basically same as Arduino but a little cheaper (although I think you have to solder yourself). I have actually used this arduino for multiple projects so that was my justification. Another justification may be to use the Arduino as an AVR ISP, however I do not know much of anything on that. But it would allow you to only have to replace an AVR when done with a project.
Thanks Phogie,
I may just do the 556 for my cube. I only plan on having a couple of groups of LEDs in mine turn on and off, so a 556 (i.e. two 555s) should do the trick. That said, I do plan on buying an Arduino in the future, as they are very robust for what you can do with them.
fryddog3 years ago
I'm having trouble downloading the .pde file you've provided. Any help would be appreciated. I'm hoping it will help me figure out the programming side.

Your instructions have been very helpful. Probably the best I've come across so far. Thanks!
Phogie7 (author)  fryddog3 years ago
Sorry about the long response took a long vacation! :) I had some troubles downloading it also (never tried before) but i included it in a zip folder. This fixed the problem for me. Should just have to extract it once it is downloaded. If you have any more troubles let me know!

Thanks for the complements i am glad to hear it helped!
VoodooVW3 years ago

This was my first Arduino project. I built this cube because I like the idea of using just the 20 digital pins, LEDs and a few resisters. Everyone at home and work likes this project and want to see what I can get it to do next. I used Paden's original code on this page to test my cube with excellent results on the first try. Here is the first sketch I was able to make funtion myself.

/*  4x4x4 LED Cube
Chase around outside edge, counter clockwise, top to bottom.
By VoodooVw

// Initalize our LED columns (positive)
int LEDPin[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
// Initalize the LED layers (ground)
int LayerPin[] = {16,17,18,19};
// Initalize the outside columns counter clockwise
int OuterEdge[] = {0,1,2,3,7,11,15,14,13,12,8,4};

// The Setup
void setup(){
// Set up LED columns as output and off
for(int pin = 0; pin < 16 ; pin++ ){
// Set up LED Layers as output and off
for(int layer = 0; layer < 4; layer++){
pinMode(LayerPin[layer], OUTPUT);
digitalWrite(LayerPin[layer], HIGH);}}

// Loop to chase around outside edge, counter clockwise, top to bottom
void loop(){
// Setup increment through layers loop
for(int layer = 0; layer < 4; layer++){
// Setup increment through outer edge loop
for(int pin = 0; pin < 12 ; pin++)
// Turn on LEDs starting from first column, top layer
// Keep LED on for this time
// Turn off current lit LED then loop up to light next edge LED
// Once all LEDs have been lit loop all the way up to increment layer


Phogie7 (author)  VoodooVW3 years ago
Glad to hear that it went well! Its always great when projects work on the first test!
rbertsch84 years ago
I am somewhat confused by this step. Are you soldering all of the bent cathodes for the entire layer together? So the columns will only be connected together on the first row that you solder together, correct? So all the cathodes for an entire layer are connected to the same node?

thanks for the help cant wait to get started
Phogie7 (author)  rbertsch84 years ago
It does look like I could explain that better. Yeah all of the bent cathodes for the layer should be soldered. For your second question if we are talking about the same row i would say you are correct. In the end you will get the layers cathodes soldered together that looks something like an "E" (where the left part of the E is the first row you solder and the lines coming out to the right are the 4 rows solder to that). If you look at that second image you can see the first row i started then the other rows solder to that first one. Keep in mind we are only soldering the cathodes together. This ends up creating a common ground between all of the LED's on that layer. Thus we only need one ground to help control those 16 LED's.

Hope that helps if you have any more questions feel free to ask! I could always post another image if that would help.