Introduction: LED Cube Code Generator 4x4x4 Arduino
This is a tutorial on how to easier make patterns for your Arduino-controlled LED cube 4x4x4. I recognized the difficulty a lot of people have with programming the LED cube after building it, so I have made a windows application to make this an easy task.
The application will work for those that used an Arduino to control their LED cube. I did not write the LED cube code and the person I got it from didn't either, so I don't know who wrote it, but thanks! I will explain how I wired the cube and how the program works in the next steps.
Step 1: The LED Cube Code Generator
You can download the application and some example patterns from my website mariusck.com. It was previously available on dropbox, but I have recently moved it here. It will eventually be available on GitHub as well. The application is made for Windows. If you want to use it on Mac or Linux you can run a virtual OS, I unfortunately will not be developing it for cross-platform.
How you wired your Arduino to the cube is of course very important for this to work. There is a description of the pins in the Arduino code, but I will also explain this in the next step.
How the code generator application works:
There are 4 squares with checkboxes. These squares are called plane 1, 2, 3 and 4. The planes represents the cube like you would have seen it if you looked straight at it from the front, so these are the four vertical planes of the cube. This is so it is easier to visualize your patterns when you make them. If you did not understand the planes you can take a look at the pictures, I will post one there to clear it up
To make a pattern you would simply check the boxes representing the LED's you want to light up and you hit the "Generate" button. Now you will see a line of code being published in the textbox below. If you want the code to be faster or slower you can enter a certain time in the "Enter time in m/s" box before generating the code, or change it later with the "Change generated code time" box.
So one generate would make the LED's light up for that certain amount of time, and to make a pattern just repeat this process. There are some black boxes beside the checkboxes, these are for marking the full line of LED's to save time not having to click every single checkbox.
When you are satisfied with your code you can click Ctrl+C (you don't have to mark anything) and it will copy your code to the clipboard. Then you click the "Main Code" button (Hotkey = Ctrl+Enter), and your Arduino code will pop up. Insert your generated code into this code where it says "Replace this with generated code" and click "Copy to Clipboard".
Now all you have to do is open your Arduino program and insert the code you have in your clipboard (Ctrl+v). Arduino can also be opened from the Code Generator program where it says "Open Arduino" if you have it installed at "C:\Program Files (x86)\Arduino\arduino.exe" If you click the "info" button there will be short info about the program and the hotkeys are listed there.
Updates:
19.03.2015 - Changed the label names from "columns" to "planes" to make the explanation of the cube more clear. Nothing else was done so the previous version is just as good, but with different labels of the planes.
10.02.2016 - Added several pre made patterns as "Patterns.zip". Here you will find some fun patterns and one extensive one that you can just open and run right away on your LED cube.
19.12.2019 - Moved the download to website.
Step 2: Building the LED Cube
This is not a instructable on how to build your LED cube, but I will explain how I did it and how this way is really simple. There are 3 pictures above that shows the soldering of the cube and how to wire everything up to the Arduino. Hopefully the Arduino drawing will be helpful.
Components used
- 1x Arduino Uno board
- 64x blue LED
- 1x Prototype board to mount everything on
- 4x 2n2222a transistors
- 16x ~ 95ohm resistors
- 4x ~1000 ohm resistors
Wires for easy plug and unplug.
Arduino Uno
I used the Arduino Uno board for my build, it has 20 digital I/O pins in total. This is exactly enough to wire up the cube directly from the Arduino, which was the reason I did it. Because this is only my prototype before making the 8x8x8 cube, I wanted to make it as simple as possible.
The Arduino's digital pins can output 5V and 20mA. The 4x4x4 cube is a total of 64 LEDs. The way it's wired it needs 16 digital outs for the Anodes and 4 digital outs for the Cathodes. The wiring will be explained in a picture above and in the text below.
The Wiring
The LEDs are wired like the picture above which gives us 16 Anodes and 4 Cathodes. Each of the anode and cathode is also marked with a number in the picture. The 16 Anodes will be connected to the digital pins:
"0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, A4, A5" in the order they are marked on the picture from 1 - 16. That means anode number 1 in the picture is digital out nr 0 on the arduino etc.
The same goes for the Cathodes where "floor" 1 is A0, "floor" 2 is A1 etc.
"A0, A1, A2, A3".
I used blue LEDs that run on 3.1V and 20mA. Since the Arduino gives out 5V this would destroy my LEDs so you need a resistor between the digital out and the LEDs to convert the 5V to 3.1V and 20mA. This is done by using the formula: (Vs - Vd) / I
Vs = Source voltage = 5V, Vd = Diode Voltage = 3.1V, I = Max current the LEDs can handle = 20mA = 0,02A
Which gives us (5 - 3.1) / 0,02 = 95 ohm.
So we would need to add 16pcs of 95ohm resistors between the digital out and the anodes to keep the LEDs from burning and to make it light up at it's full potential.
For the 4 cathode wires we would need to ground them, but we also need to control when to ground them, so we use transistors. Using transistors enables us to use a +5V digital out from the Arduino to control a transistor that is used as a switch to ground the cathode layers. I used 4 pcs of 2n2222a transistors because they can handle the current and they are fast enough.
There can be maximum 1 layer on at a time which gives us 16 * 20mA = 320mA. This is the amount of current the transistor needs to be able to handle. It is also important to use NPN and not PNP transistors.
The wire from the first floor cathode goes to the collector of the transistor.
The emitter is connected to ground on the Arduino.
And the base of the transistor is connected to a 1kohm resistor and then to the pin A0.
Repeat this for the remaining 3 floors of cathodes.
So to summarize the wiring:
16 digital out's to - 95ohm resistors, from there to the 16 anodes.
4 digital out's to - 1kohm resistors, from there to the base of the transistors.
From the cube's 4 floor cathodes to the transistor "collector".
From the transistor "emitter" to ground on the Arduino.
And that's all there is to it, if you have any questions feel free to comment.
99 Comments
6 years ago
LCCG and LCCG OPPOSITE zip files contain what seems to be the same generator. I have my cube wired in the opposite manner and when I try to generate a pattern using the generator, my cube lights up erratically. I would like to show only one LED on at a time.
Reply 3 years ago
Yess
Reply 6 years ago
Also, I did not use transistors on my plane pins. Could this be the problem?
Reply 6 years ago
Sorry for the late reply, you probably fixed this already. If you didn't and someone else is wondering: Yes you ABSOLUTELY need transistors, they are there to sink current from the other 16 pins.
Reply 6 years ago
Thanks. I will set up the cube again and see if transistors fix the problem. I need to replace one LED that has stopped working.
Question 3 years ago on Introduction
Sir can i just ask, when i programmed one LED to be high, the rest of the LED's in that column tends to high also. Why is it?
5 years ago
Thanks! MariusG1 for the instructions and code. Here is a video of the cube working.
Reply 4 years ago
Really cool! Take care
Reply 4 years ago
Code pls
Tip 4 years ago
Should definitely make a video on it, I guarantee you a heck lot of people will want to watch that ! Overall Thank You for this app :)
Reply 4 years ago
I will look into that. Thanks!
5 years ago
hello
can u share the code for atmega328p?
7 years ago
hey budddy so i built a really big 4x4x4 and i built it backwards or opposite and im having a hard time i guess finding the correct pinout the cube lights up but doesnt do what it should. i copied codes and tryed them out and im not getting the right animations i assume its not hooked up to right pins can u offer help to get the cube proper
tha ks a mill
Reply 7 years ago
I just learned a little more about sinking current with the arduino and I think we can solve it with a little change in the code. I'm not sure but you can try it out.
So what you do is you wire the 4 planes that you now have as anodes to A0, A1, A2, A3. And then you connect your 16 cathodes to the rest of the pins. So basicly just the same way as the picture I have of the arduino with connections but you remove the transistors and your cube is opposite.
What we see now is that you only have 4 pins to supply current (A0-A3) and you have to define the 16 pins to sink current, this means they function like ground because their potential is defined as 0V so you get current flow. Only having 4 pins to supply voltage could be a potential problem if they cannot supply enough, but since the LEDs are on for only a cycle (they blink really fast) the current needed is less and I think it might work.
Use 16pcs of 100ohm resistors between the arduino pins and the cathodes. If you didn't understand this, just let me know and I'll make a schematic. I will inbox you the code changes so you can try it out.
Reply 5 years ago
Hi there, I was hoping to find a way to program the lights, GREAT WORK! I have a question, however, when you explain LCCG - OPPOSITE.exe you make it sound like no big deal if the cube was wired that way - "If you wired your cube "opposite" and made the anodes the floors and the cathodes the columns then you can simply download the "LCCG OPPOSITE" instead." Mine is!I simply follow the schematic still? on 10-31-2015, you talk about removing the transistors and having new code...
"So what you do is you wire the 4 planes that you now have as anodes to A0, A1, A2, A3. And then you connect your 16 cathodes to the rest of the pins. So basicly just the same way as the picture I have of the arduino with connections but you remove the transistors and your cube is opposite."
I'm not sure what to do, I was going to etch a board for this so any help you can provided would be appreciated.
Reply 7 years ago
Would you be willing to give me the schematic for this as I have my planes as anodes and have the 16 cathodes to the rest of the pins?
Reply 7 years ago
was thus directed at me. ? the cube works with kylethecreators code n pinout. how can i use ur method to use b1000 with same pinout or what pinout do i use my cube is wired backwards
6 years ago
where is the wiring for led cube
will the code generated be for arduino uno
6 years ago
Am a novice and is confused.
On
https://www.instructables.com/id/4x4x4-LED-Cube-Arduino-Uno/step2/Making-The-LED-Jig/I
see the anodes horizontally and cathodes connected vertically.
On
https://www.instructables.com/id/LED-CUBE-CODE-4x4x4-Arduino/I see the vertical
anodes and cathodes horizontally.
I am wrong and how is
it anyway?
6 years ago
I have seen in science fair, one older guy, who built 16X16x16..where he connected a video camera and turn it into a human head in 3D (low resolution of course)...he wouldn t share the code, but it was really cool