Minimalist RGB LED Cube Has A Very Short BoM


[Asher Glick] wrote in to share a project he has been working on with his friend [Kevin Baker], a 4x4x4 RGB LED cube. The pair are students at Rensselaer Polytechnic Institute and also members of the newly-formed Embedded Hardware Club on campus. As their first collaborative project, they decided to take on the ubiquitous LED cube, trimming down the component count to nothing more than 64 LEDs, a protoboard, some wire, and a single Arduino.

Many cubes we have seen use shift registers or decade counters to account for all the I/O required to drive so many LEDs. Their version of the cube has none of these extra components, solely relying on 16 of the Arduino’s I/O pins for control instead. You might notice something a bit different about the structure of their cube as well. Rather than using a grid of LEDs like we see in most Charlieplexed cubes, they constructed theirs using 16 LED “spires”, tucking the additional wiring underneath the board.

The result looks great, as you can see in the videos below. The cube looks pretty easy to build, and with a cost around $60 it is a reasonably cheap project as well.

Nice job, we look forward to seeing all sorts of fun projects from the Embedded Hardware Club in the future!



55 thoughts on “Minimalist RGB LED Cube Has A Very Short BoM

  1. BoM WTF?

    Back on Market? How does that apply?

    How about following the standard writing practice of defining acronyms when first used in the article.

    This is the web, you don’t get charged by the character.

      1. @sawo – yes how awful that I try to improve their basic writing skills with common technical writing practices.

        BoM has SEVERAL definitions – therefore it’s only common sense (if not common courtesy) to describe which definition you’re using for this specific article.

        As to MOSFET, yes it would be nice to define it fully at some point in the article, but since there isn’t multiple definitions for MOSFET you can always fall back on the “google it” reasoning.

      2. @Vonskippy

        Google bom. First result is bureau of meteorology. second is byte order mark. third is bill of materials.

        given those three choices which makes most sense when presented in the same line as ‘minimalist’

    1. in my highly scientific study,
      google returns the following page counts:
      ‘Bom “Back On Market”‘ – 2,710,000
      ‘BoM “Bill of Materials”‘ – 5,520,000

      more than i expected for “back on market”, however, i have to agree with sawo..

      1. You would be wrong, then. It’s definitely common courtesy to expand acronyms at least once in an article. Especially on the internet, where one cannot ever predict who it’ll get linked to.

  2. Neat! I like the tower design for stacking the LEDs.

    Not having current limiting resistors for the LEDs doesn’t seem like a very good idea to me, though.

    I’ve never used an Arduino before, but if I had to guess I would say that it doesn’t put series resistors on it’s digital outputs. Someone please correct me if I’m wrong (in which case, I’m glad I’ve never used an Arduino before).

    1. Technically you’re right, though as long as you keep the duty cycle low enough, it shouldn’t be a problem. The charlieplexing may even prevent the duty cycle on any one pin/led from getting high enough to cause damage under normal operation, but it could definitely cause damage if the sketch were to hang with an LED lit, or you uploaded the wrong sketch.

      The advantage of leaving out the resistors, besides fewer parts to deal with, is that the low duty cycle required by the charlieplexing will reduce the brightness, and leaving out the resistors will increase the brightness.

  3. Nice idea. while in general most LED cubes look to be of a delicate nature, this one is particularly so.

    We all bring our own experiences to the table. I have been involved with DIY for at least 40 years, and BoM didn’t register as Bill Of Materials for me either. As it did seem to be an important fact to know about this project was built I didn’t worry about it. Then again one of the HaD staff, like many others, use HAM, when simply ham would suffice Acronyms have their place, but often they they get in the way of concise communications, if someone has to take time to figure out what was meant in the context of the particular communication.

  4. Very interesting design. I’d be tempted to use the “first and second groups” connections to give additional rigidity to the construction.

    Also, acronyms mean a whole lot more in context – in this case it clearly means bill of materials and is incredibly common in engineering

    1. That is actually one of the reasons we laid out the wiring that way, if you wanted to make the cube more stable you could. If you rotate the LED spires 45 degrees then the pins from group one and two form straight lines that you can run single rails of wire across to make it more sturdy. We opted not to do that for the prototype, but the PCBs are designed so that it is easy to add the supports.

  5. Two things…
    Nice work on the minimalist build. I’ve been itching to do a LED cube for a while and this one is great. I thought I’d do a mono cube but now that I’ve seen this one, I think I’ll have to go RGB.

    Also, WTF is all the calamity about BoM. If you don’t know what it means just ask nicely. Acting all high and mighty like the grammar police doesn’t help your position.

  6. Assuming that the 16 towers all are connected to an output of the Arduino.

    So how exactly is he able to address an individual LED?

    This is something I’ve not understood for a while on LED cubes. Surely you need an input for each LED if you want to address it individually?!

    1. Not with just an Arduino. Charlieplexing takes advantage of tri-state logic so mathematically you can have n^2-n LEDs for n pins. As a result an 8x8x8 is to many LEDs for the 20 pins that the arduino has. If you made a mono-color led cube (512 LEDs) you would need 24 pins and a tri-color led cube (1536 LEDs) you would need 40 pins. You will also need a faster processor then an Arduino. But that is not going to stop us from trying!

    1. We sell the Arduino Nano to groups in IED and whoever wants one. It is different than the Mobile Studio (Red Board 2). That is more of an oscilloscope and function generator than a microcontroller. Stop by for a meeting next semester if you want to get one from us!

  7. We built one of these (with some variations) last night in a little over 4 hours, and I have to say the build instructions and diagrams are great.

    The final step of:

    Connect those 16 wires to any pins on the arduino, and then you are done.

    is sort of frustrating.

    Looking through the code, there doesn’t seem to be an easy way to map the pins yet. Any ETA on that?

    If you’d like to see our build, pictures are up at Metrix Create:Space on Flickr

  8. From January 8, 2012 at 10:02 am comment:

    … Charlieplexing takes advantage of tri-state logic …

    How is this being accomplished with an arduino? I have downloaded and looked at the AsherGlick-Charliecube library but I don’t see any pinMode definitions or digitalWrite calls. Not sure how to tri-state a digital output of an arduino, this would be useful.

    1. To tristate a pin on the arduino, you set the pinMode to Input, which makes the pin act as if it was not connected to anything.

      He doesnt use pinMode/digitalWrite as they are too slow for what he is doing.

  9. i am very interested in this cube design. i would love to see all of the info on this project. where can i get the info on the schematics, instructions? also i will need a full parts list and where to get the arduino..
    if anyone can help me out with this, it would be most appreciated.

      1. Has anyone been able to duplicate the cube?
        Mine seems to kinda work when displaying solid colors (RGB, but gets goofed up totally when displaying the mixed colors.
        Any ideas? mail me … kurt.v.k at

  10. Found out to my annoyance (after I made it!) that the libraries make it too big to run on an atmega168 :(

    If I comment all but 1 anim then it comes in at 16+k
    Any tips on how to optimize this for the <14k limit?
    ( or am I better just ordering a 328? )

    BUILD TIPS – I used a rig made of perf board and skewers to keep them all lined up. I used straight florists wire for the supports. I used a card with holes in to keep the tops aligned then drilled a wooden base and used epoxy to hold all the spires in place. It looks the business, if only I could get it lit up properly! :)

  11. Okay, well I ordered an Uno and it came today, plugged it all in and yay! – it all lights up, but, boo! not in the right order.
    Now I look at your new diagrams and you’ve changed the legs/groups and I’m double confused.(Had to check google cache to make sure I wasn’t going insane!)
    Here’s what I have, can you explain how to remap the pins?

    Using base layer LEDs for reference:
    blue legs in columns on pins 2-5. equivalent to your group 2.
    Greens in rows on pins 6-9 – equivalent to group 1.
    Cathodes on 10-13 equivalent to group 3.
    reds on 14-17 like group 4

    I’ve soldered the groups onto ribbon wires so it would be great if I could adjust software to reflect the above rather than split them – but how?
    Thanks for any help!

    1. In the end I resoldered it to match the diagrams.
      I’d bent the middle two legs the other way so had to allow for that.
      If it helps anyone, on his drawings wires 1-4 are the blue leg of the base layer, 5-8 the cathodes, 9-12 red and 14-16 green.

  12. Love this. I built one but changed one thing. I bent the led pins as you did and then back to their original direction with a small dogleg so they are then outside the profile of the next led down instead of laying another 4 wires on the side of the leds.
    This saves cutting the led legs and using another 4 wires per stack.
    Then I just lay the next led inside the four legs from above and solder.

  13. Hi Sir Asher Glick,

    I follow your instruction in your website and everything ok the hardware. i’m using arduino uno and i upload the code but the main issue the first program only working and not continuing the program. please help me. Thank you.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.