If you are not interested in theory about multiplexing than jump to Step 2 for the start of the actual build

Since the hardware and software are equally big parts of this project, lets have a look at the theory first.

The brain of the cube is an Arduino Nano. It provides enough I/O to interract with the used LED Drivers as well as establish a Bluetooth connection to an HC-05 module and other control hardware. If you have looked at other LED Cube builds, you will know that most people use simple Shift registers to store brightness values of the colors of the individual LEDs. This build does not use Shift registers, but instead so called "TLC5940" LED Drivers. As we will see later this saves us a lot of time as well as tons of additional hardware (e.g. resistors).

The basic functionality of controlling the cube uses multiplexing. In this case we are multiplexing the 6 layers of the cube, meaning all Anodes(+) of all LEDs in a layer are connected, whereas the individual Cathodes of all LEDs in the same Column are connected towards the bottom. This means that if you want to light up the LED at position x=1,y=2,z=3,color: green you need to provide 5V at the Anode of Layer 3 and connect GND to the Cathode of the Column corresponding to Green Pin of x=1,y=2. So in reality at one point in time, only one layer of the Cube is actually turned on, but as you will see later in the Code we are turning off and on the individual Layers so fast, that our eye thinks the entire cube is on.

To control things such as brightness, animations and so on we use an HC-05 Bluetooth module connected to the Arduino Nano. It's very simple to use the module with an Arduino since you only need 4 Pin connection and can simply interface the module via the default Serial-Commuincation of the Arduino. Towards the end of this instructable you will se how easy it is to write your own Bluetooth App to control the Cube.

NOTE:

In my schematic of the Arduino Circuit board you can also see a small schematic for interfacing a MSGEQ7 chipto process Audio Input, this is absolutely not necessary for the actual cube and is just an additional functionality I added, hence you can simply ignore the Schematic marked with "MSGEQ7"