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