Charliecube -- Charlieplexed 4x4x4 RGB LED Cube

45,449

323

56

Introduction: Charliecube -- Charlieplexed 4x4x4 RGB LED Cube

This is a Charlieplexed 64 RGB LED 3D Cube.


The CharlieCube has a total of 192 LEDs and is controlled by 16 arduino pins wired through 16 spires of 4 LEDs and 4 connections. The 64 connections that 16 spires of 4 leads are wired in such a way that they only need 16 micro-controller (arduio) connections. The arduino connects directly to the LEDs without using any resistors, shift registers, LED drivers or any other electronic components. It is simply LEDs, micro-controller, and circuitry. It is sorta like applying geometry to circuitry.

This cube design uses complex wiring instead of parts. This type of wiring LEDs is known as charlieplexing, and it is a type of multiplexing, that arranges LEDs facing each other in groups. The result is that it requires less connections to control the LEDs. In the case of 64 RGB LEDs that is actually 192 LEDs that can be controlled with 16 tri-state micro-controller input/output connections (pins). Charlieplexing was created by Charlie Allen, and its a fairly interesting way to control many LEDs.

The original website by Asher Glick describes how to make this cube with common cathode RGB LEDs, however I have modified the code to work with common anode LEDs. I made an instructable called Hacking the Charliecube, and it describes how I went about making the code for this cube, also work with common anode LEDs. I have a website that I created with pictures and in depth details how to make the cube, Im going to try to re-create it here, and focus on just building the cube.

The parts list for this 4x4x4 RGB LED cube are simple:


64 RGB LEDS (common anode, or common cathode)
Arduino Nano or variant with 328 chip (168 chip may not work)
Wires (various depending on how you build your cube)
Prototyping printed circuit board (pad per hole type), Optional (if you are hard core!)


Tools:
Soldering iron, tweezers, wire cutters, wire strippers, drill (5mm)

Supplies:
Flux, Solder, Alcohol, a small board, patience.

My website about the cube:

https://sites.google.com/site/rgbledcubes/home/cha...

Asher Glicks website about the cube (where it all started)

http://aglick.com/charliecube.html

More about Charlie Allen Charliplexing can be found here:

https://en.wikipedia.org/wiki/Charlieplexing

My other instructables about hacking the charliecube, and advanced charliecube...
https://www.instructables.com/id/Hacking-the-Charli...

https://www.instructables.com/id/Advanced-Charlicub...

Step 1: Prepare Your Parts, and Do a Good Job.

The first part is always preparing your parts, I always tell people to take their time here, and do a good job, because how well this part is made effect the next step in the process, and that effects the next step, and so on and so forth. Little things in the first step, become much more exaggerated by the last step. Being consistent is also very important, the first one, and last one should look about the same. If they are not, go ahead and fix the first ones, until they all look the same.

Use the first image as a guide how to bend the LED leads. The black one is the common cathode lead, I like to mark my LED common lead with a black marker, this helps later when setting them up to solder. Notice how the blue and red are just the same direction, but the inner 2 leads can be easily done 2 different ways, be careful to make sure that you do them all the right way, if not, fix them now, before moving on to the next step.

Now that all your LED leads are bent, group them in 8 groups of 8, to make it a manageable group of groups. Then take a group of 8, and break that into 2 groups of 4, and set 4 of those aside.

Now you need to prep your wire. There are a few wire options, but if you are using straight hard wires, you need to cut them to the right length, this can vary depending on how you build your cube, but 1" gaps are a good spacing, my wires are about 3.5" long. If you are using bus wire, or other coiled soft steel wire, you need to straighten it, then cut it in sections about 4 inches long. If the wire that you are using solders easliy, you are read, if the wires you are using dont solder to well, you may want to pre-tin your wires for best results.

When you have a set of 4 LEDs with the leads nicely prepared, and the wires all straight, cut, and tinned if necessary, we can begin building a spire.

Step 2: Building an LED Spire

Building a spire requires that you hold all the LEDs in a nice straight line, with the LEDs evenly spaced, all facing the right direction. There are many ways you can accomplish this, A cardboard box with holes lined up will work, you can build a jig out of wood, or cardboard or plastic, I chose to just use part of a DVD players metal cover. I have marked where to set the LEDs with 1" spacing. I put the LEDs in one at a time, taping down the bottom lead as I go. I make sure that the LEDs are facing the right direction by observing the black marked leads. I double check that the LED bodies are lined up with my spacing marks, and adjust until they are right.

I put one wire in place and tack the top LED with the wire in place. I add flux to each of the 4 solder joints, then starting with the second LED, solder it on, and go down to the bottom one, then I reflow the first one again. I look it over real good to make sure that the wire is soldered properly, and that all the LEDs are lined up just right.
I take extra time on the first wire, to make sure everything looks nice, because if it isnt, it gets ugly after you put the rest on. When the first one is on right, then I undo the tape, and gently rotate the LEDs 90 degrees (either way, it doesnt mater.), and gently tape it down. I then repeat the soldering process only its quicker for the 2,3,and 4th wires. When Ive finished all 4 wires, I take it out, an examine it, if an LED doesnt look straight, I fix it, if a solder joint is too big, or to small, I fix it. When its right, I clip the leads, and soak it in a jar of alcohol to clean the flux.

The last picture shows you what you should end up with, 4 LEDs soldered onto 4 wires, each LED rotated 90 degrees. Now is a good time to test the LED spire. I soldered a couple wires to a cr2032 coin cell battery and used it to test the LED spire. Its a simple easy test. put the common lead on the battery, touch the other 3, red, green and blue should light as you touch those leads. change the common lead to the next wire, and repeat the red, green and blue tests, repeat this until you see each LED light.

Once you do one spire, you will find the next one easier, by the time you get all 16 done, you will be a pro at it, but the first few are going to be difficult and frustrating. You may want to re-do the first couple spires so they all look consistent, its important that each spire look uniform, and things are evenly spaced, or your cube may look lumpy.

Before moving on, you should have 16 spires that look good, and passed testing.

Step 3: Build the Cube

This part is where everything comes together. There are some options here, the end product will depend on which options you chose. If you want to put them on a circuit board, or not, what kind of wires to use, and what size/colors. I will show you with a circuit board, but this can also be done with just bare wires.

If you want to make it easy, start by taking a small wood board, and drill a grid of 16 holes evenly spaced, I marked the spacing on a computer, and printed that and transferred it to the wood with a nail, and drilled them out. You can see the board in the following pictures.

I also marked on my board where I wanted to put stuff, made a mental note, then cleaned the marker off with alcohol, and cleaned the board with a pencil eraser to remove any oxidation. See the first photo for markings.

This step is critical that you get right, if you get this wrong, its a lot of effort to repair, do your best to get every single spire lined up the same orientation when you are sticking them into the circuit board or wood board.

See the second photo for example of putting the spires into the circuit board.

With all the LED spires set in the circuit board, put the wood board with the holes drilled into it, on top of the spires, you may need to wiggle each one to get it to fit into the holes. When you get them all in the holes, press the circuit board down, and that should fit them all in nicely, and level (the circuit board should be parallel with the wood board.) see the third photo for example.

Next you can solder the connector for the arduino in (or you can wait till later if you prefer to focus on getting this wiring right!) The 4th photo shows the connectors soldered in, the 5 shows some tools and wiring, there will be lots of complex wiring, as shown in the next several photos. I will add the wiring schematics in a page of its own.

Look over the images, you will see a progression of circuitry from the cube to the connector for the microcontroller. Then the second to last picture is how it will look when you have finished soldering it, but havnt plugged in the microcontroller yet. The last picture shows how to do the wiring without a circuit board, I'll make another instructable about how to do that, its pretty tricky, but it looks real nice.

Step 4: Testing!

The last step is programming the microcontroller, and plugging it in, and testing.

You may have broken a solder joint, or not wired everything correctly. There are 4 different ways that I have miswired the cube, and Ive figured out how to compensate for it. I wont go into the details about how to program the microcontroller, but I will describe how to test the cube. Ive written a little program to help, You can use it to see how your cube is lighting, it should light up in a predictable sequence, but if not, you may need to change some code, or check your wiring. You pre-tested each spire, so those should be right, and assuming you put each spire in the same direction, that should be right, but the wiring is still easy to mess up.

You can start by running the sample programs that come with the cube, asher wrote a bunch of programs that should run if you upload them, watch the shift squares, and the fountain. You can also slow the cube down by changing the animation speed of each program. I like to comment out all but one program, and slow it down. if it starts at the right place, and does the right things, then Its mostly right. If you start with the fountain program, it should start at the bottom inside 4 LEDs, progress up 2,3,4, the light the outside square (12 LEDs), and go down 3,2,1. Slow it down and watch. If it doesnt start in the right place, you should get my cubeplex.h file, and look for flushfuffers, I have setup 8 flush buffers, 4 for common anode, 4 for common cathode, uncomment out the one for your cube, and test it again until you get it right. When fountain looks right, then try shift squares, it too should work right. If it works right, then you are probably good, but if you want to be certain every single LED is working right, then try my test program.


Here is my program to test your cube.


/******************************** Sequence THE DOT ****************************\
| | | | | Hacked up by hippynurd@gmail.com to suit his testing needs. |

| Inspired By: Jonah Glick | | Written By: Asher Glick | \******************************************************************************/

void SeqTheDot()

{ continuePattern = true;

int animationSpeed = 200; // change this to speed up or down.

// color= green; // change this to set a specific color or comment it out to cycle.

int xpos = 0;

int ypos = 0;

int zpos = 0;

while (continuePattern) {

for (xpos; xpos < 4; xpos++)

{ for (ypos; ypos < 4; ypos++)

{ for (zpos; zpos < 4; zpos++)

{

// drawLed(color,1,1,3);

// use this one to light up a specific LED drawLed(color,xpos,ypos,zpos);

flushBuffer();

clearBuffer();

delay(animationSpeed);

} zpos=0;

} ypos=0;

} xpos=0;

}

color=nextColor(color);

}

Step 5:

The first image is a schematic of a spire with brief explanation.

The second drawing illustrates how each spires leads are organized and labled a,b,c,d to a match with the wiring schemes a,b,c,d.
The next four drawings show the wiring for each letters group. Note, all "A"s use the same spire pin location, all the "B"s use the same spire pin location, ... You can make it easier to get them right by doing all As at a time, then the Bs, then the Cs, then the Ds. The first 2 sets are the easy ones.


Now its important to make sure that you have your cube oriented properly before moving on to the next step, connecting the cube to the arduino.

The cube connects to the arduino via 16 tri-state microcontroller ports. It holds 14 at input, one high, another low, and that lights up a specific LED.

The last diagram shows how you wire from the arduino to the cube from the circuit side of the board.

Side note:

You can add 75 ohm resistors to each arduino pin to make this a safer design,that maximizes the lifespan of all the parts, but it will run for years without them, and they may be under no excessive load as is.

Step 6:

Homemade Gifts Contest

Participated in the
Homemade Gifts Contest

Let's Party! Challenge

Participated in the
Let's Party! Challenge

On a Budget Contest

Participated in the
On a Budget Contest

1 Person Made This Project!

Recommendations

  • Audio Challenge

    Audio Challenge
  • Home Cooked Speed Challenge

    Home Cooked Speed Challenge
  • Micro:bit Contest

    Micro:bit Contest

56 Comments

0
science ath
science ath

Question 3 months ago

I tried this but it's not working like yours did
I followed orginal Asher Glick's wiring diagram and then tried uploading the common cathode normal code and it worked but with some random leds in sequence which is not how it's supposed to work and I also tried just copy pasting your cubplex.h file and tried all the cc and ca codes from 1 to 4 but it didn't change anything (ca 3 had some error compiling and I can't work it out). So how am I supposed to work it out ? I'm not that much into coding btw.(I also broke my ftdi jack :/)

16269753830604443978699273334413.jpg
0
HippyNerd
HippyNerd

Reply 3 months ago

Its been a while since Ive messed with any of these, so I may be a bit rusty on it, but I think you could use the test code to help figure out what LEDs are working right and not. It should light them up one at a time. From there you can try to figure out if you have a broken connection, or miswiring, its most likely one or more of those.
If it becomes too difficult, one thing you can do is to desolder all the wiring under the cube down to just the 16 spires, then test the individual spires to assure that those are all correct. This is also a good time to mark each spire so that you get them all aligned the right way when you put the 4 layers of wiring between the spires

0
science ath
science ath

Reply 3 months ago

Ok I will try to work it out but did you used the same Asher Glick wiring diagram while making it? I just used that only and taking common anode in place of cc no other changes while wiring

0
HippyNerd
HippyNerd

Reply 3 months ago

The original code only works with common cathode LEDs, there is a setting you can change to make it work with common anode, but I cant remember what it is right now.
You can use the common anode code that I used in a different instructable, but I probably dont have test code for common anode. You could modify the code to make it work with your cube. Using a tool like that can help you figure out if you have wiring problems, and people often have wring problems with this thing.

0
science ath
science ath

Reply 3 months ago

Also I am wondering how I am supposed to use your test code because it didn't work as a new sketch obviously and when I commented everything in charlicube file and then pasted it out in the bottom, it didnt light up

0
science ath
science ath

Answer 3 months ago

And here is what I got when I wrote red all in trifade only

16269783176479077464036651942883.jpg
0
science ath
science ath

Answer 3 months ago

This is mdaffin fade code

0
MikeRich
MikeRich

5 years ago

I built your common anode version and got the tables right, all of the colors light when and where they are supposed to, but... Have you had any problems with 'ghosting.'? fre example, If I light green at 0,0,0 it comes on full brightness, however six other reds come on, very dimly. I tried adding resistors to the wires, but that did not help. I put a volt meter across the red leads and there is only 0.9V, which should not be enough to cross fhe Vf threshold.

v

0
HippyNerd
HippyNerd

Reply 5 years ago

DIfferent color LEDs have different forward voltages, the red ones are always very low, usually just under 2 volts, and the blue and green are around 3 volts. The ghosting you are seeing is a direct result of the unequal pairing. Since the microcontroller is running at 5v, and this design doesnt use resistors, technically they are runing much higher voltage (and current) than they should be, but the resistor value is different for different color LEDs, so you cant add one size resistor to equalize things. I have found that adding a resistor on each of the 16 microcontroller leads does help reduce the ghosting some, but it comes at the cost of brightness.
If the cube is run in daylight, its hard to see, if the cube is run in the dark, then being dimmer is not really a problem.
Ive used between 75 and 150 ohms, and 100 ohms seems to work pretty good, but there is no perfect/ideal value.
There is also a little bit of an issue with the built in LED on pin 13. Some folks remove the LED, others have re-wired and programmed to use a different pin than 13. It doesnt bother me, so I havnt bothered to change it.

0
MikeRich
MikeRich

Reply 5 years ago

Got around to looking at this again. Put all of the resistors in place. Fixed a lot of the ghosting, but not all. Removed the D13 onboard LED and NO MORE GHOSTS! Thanks for the tips. As soon as I get a case made for it, I will post a picture of my work.

0
manudmaker
manudmaker

Reply 4 months ago

I didn't quite understand the point "Removed the D13 onboard LED and NO MORE GHOSTS!" . How will removing the LED minimise ghosting in all the other led's

0
MikeRich
MikeRich

Reply 4 months ago

Most nano's have a RED LED for for D13. RED LEDs only have a 2.2v forward voltage, while B & G are 3.1 or higher. Basically the D13 onboard LED was messing with the forward voltages of any led connect to that leg. removing D13 and adding the 75 ohm resistors mentioned in the other comments balanced everything out. HippyNerd's comments were especally helpful to me

0
manudmaker
manudmaker

Reply 4 months ago

Appreciate the quick response. Also have another question , I have 2x 8 Channel logic level controllers 5v - 3.3v lying around , would connecting that to the arduino pins and help in resolving this ghosting problem as all the leds would now only have 3.3v on them

0
HippyNerd
HippyNerd

Reply 4 months ago

I for one would like to see this 3.3v charlie cube. I think 2x8 will work, but im unsure. Running at 3.3 may minimize any ghosting, I honestly never noticed a problem with it, but others seem to have problems sometimes. Technically it does work fine at 5v, I ran one 24/7 for over a year without resistors, and there is no discernible amount of wear at 5v, but 3.3 is closer to the forward voltage of the LEDs, so it should be kinder to them.

0
manudmaker
manudmaker

Reply 4 months ago

sorry to keep asking questions, am just trying to understand all the options with which we can try this cube. I noticed i have a arduino pro mini 3.3v model, so as per the model it should output max of 3.3v on all its pins right , and it also has the required number of pins for this project. The other limitation is the pro mini has max current per pin as 40ma , will that affect its operation for this project

0
HippyNerd
HippyNerd

Reply 4 months ago

Sounds great, let us know how it works out

0
MikeRich
MikeRich

Reply 4 months ago

regarding the current draw, it should not be a problem.
The led's are being multiplexed so there will typically be only 16 LED at a time (1 layer) selected and even if all 16 are on, the current will be spread across multiple pins and only for a short time.

0
HippyNerd
HippyNerd

Reply 4 months ago

The charlieplex cube is like multiplex on steroids as far as number of LEDs you can control, but the duty cycle is 1/64, meaning it only lights up one voxel at a time. If that voxel uses 3 LEDS (red, green, and blue). Technically it could run 60ma if the LEDs are on full current level of 20ma each, and running at 5v should be way higher than 20ma, but the duration is soo very very small that the junctions dont have time to heat up enough to be damaged.
This design is really different than most typical multiplexing where you do a row, or plane all at the same time.

0
HippyNerd
HippyNerd

Reply 4 months ago

Im glad you got that worked out!
I usually dont usually have trouble with the onboard LED, but ive read about others removing it for this reason.
You can usually make this without the LEDs, however the LEDs make it "safer" as it brings the 5v closer to the LEDs forward voltage. Technically you should never feed these guys 5v, but I think that its very short duration prevents the junction from being damaged, anyway, the resistors are an extra safety measure that does come at the cost of a little bit of brightness.

0
HippyNerd
HippyNerd

Reply 5 years ago

Awesome buddy, thats great news. Now that you have a working cube, you can mess with programs, and really make it your own thing.