*** Check out my blog for updated version of this project and more! ***

My obsession of LEDs has led me to this. Aurora 9x18 is a thing of beauty (if I can say so myself) - has 162 RGB-LEDs in a circular configuration. The color of each circle is controlled by a microcontroller using a twisted form of PWM.

The microcontroller (PIC24F08KA101) only has one PWM module, yet Aurora is capable of 27 (9xR,G,B) independent brightness control. This Instructable reveals the inner-working of Aurora 9x18 through the building process.

Step 1: Concept

A RGB LED is nothing more than a LED that actually encases 3 small LEDs of primary colors inside. RGB LEDs can create wide range of colors by combining 3 primary colors - Red, Green, and Blue. By changing the ratio between the 3 colors, you get many in-between colors. RGB LEDs are often called full-color LEDs.

Most of brightness controlling circuit utilizes the method called PWM. Many of microcontrollers today have a PWM controller or more built in, however there are usually less than 4 or 5 of them in a controller. So if I were to control 9 LEDs, I needed to use multiple controllers or external circuits. If those 9 LEDs were RGB LEDs, then there would be 27 PWM controllers needed.

I've gone through a few approaches - multiple microcontrollers working together in various configurations - some are complex and exotic. I was trying to solve more than just the number of LEDs that I can control - I wanted to make the fades in/out of brightness as smooth as possible. Turned out, 8 to 10 bit PWM resolution that most PIC microcontrollers provide was not good enough to create smooth transition in the darker/dimmer part of the brightness change. When the brightness is low, the transitions look more like steps than fading. Due to human eye's non-linear or exponential response to light intensity necessitates gamma correction of the brightness change curve, which requires at least 12 bits of PWM resolution to give smooth fades (in my conclusion).

If I simply design a circuit where each LED is controlled by it's own PWM controller having 12 bit or more resolution, I'd have to use a speciality LED controller IC. While this solves the problem, the added cost and size to the final product did not appeal to me. (Those LED controller IC are not very small or cheap.)

So I came up with an idea of combining PWM with multiplex drive. I further broke up each PWM cycle into multiple pulses, so that multiple LEDs were lit multiple times within one PWM cycle. (Kind of hybrid between PWM and PDM, I guess.) This way, the average output of LEDs are the sum of the many pulses within the short period. By combining more than one PWM pulses increases effective PWM resolution.
This technique also helpes reduce the perceived flicker of the light out of LEDs. Aurora 9x18's LED refresh rate is about 246 Hz, but LEDs blink a lot more often. This creates the illusion of much higher refresh rate.

Take a look at the timing chart. I picked 7 LEDs and R/G/B bus signals to present the concept.
As you can see, R/G/B buses go up momentarily, taking turns. These pulses control the actual duration that LEDs light up. Each common lead of the LEDs controls whether that LED will light during the period that R/G/B buses go high. The actual timing that LEDs light up are marked with the color on the chart.

The condition here is:
LED 1 is on level 1 red (the lowest brightness).
LED 2 is on level 2 green.
LED 3 is on level 3 blue.
LED 4 is on level 3 yellow (red + green).
LED 5 is on level 3 purple (red + blue).
LED 6 is on level 3 turquoise (green + blue).
LED 7 is on level 255 (maximum brightness) white.
* time scale is about 8.1 ms for the entire width of the chart.

Hope this explains the way Aurora controls the brightness/colors of LEDs.

- PWM on wiki
- PDM on wiki

LED refresh rate originally stated was wrong - it's 246 Hz not 123 Hz.

hi, led artist, <br> <br>according to the Current limits of DMP3098,3A. a RBG bus line can hold 600LED? because one LED current= 5V/(1k+150ohm)=5mA. 3A/5mA=600. <br> <br>so if the PCB is larger, it will be even much beautiful.
LEDs get about 11 to 18 mA each. The formula is: (supply voltage - LED forward voltage - transistor C-E saturation voltage) / 150 ohm<br> So you can only connect about 166 LEDs. In practice you can push more - in fact I doubled that with no problems. So about 350 might be the limit.
<p>There are 162 LEDs in this project,but only 9 LEDs will be lighted at the same time.Does it mean that the maximum current is 9x(11~18 mA)=160mA,?Thanks for your help.</p>
<p>why not use 9 resisters in the emitter of BJT to limit current,rather than 162x150ohm?</p><p></p>
The layout of the LEDs nailed it for me, great work
hi, LED artist, <br> <br>what's the camera with you to get to beautiful Pictures and videos of &quot;aurora&quot;? not only the art itself ,but also the pictures and videos are art!
I shot the video with Canon HF S200 camcorder. Stills are shot with Nikon D700, but many of the stills are from the video. <br>
Hi,Ledartist, <br> <br>i was quite empressed by the beauty of your LED art. and made a 18mini (easiest one). thanks for your study and share on the net! <br> <br>when i passed by supermarket , a question rised. can a full color screen do the same? what's the cost of a full color screen the same area of an 9*18 art? <br> <br>as long as you limit your work in toy, that's ok ,but when i was used in industry, there should be an answer. <br> <br>
Fantastic work! In your schematic for aurora R-DRV G-DRV B_DRV are all in parallel on the same PWM output so this means RGB lines receive same PWM pattern .. <br> <br>My question is that why in the aurora conceptial timing diagram the PWM patterns are not in sync ??
The 3 transistors Q2R/G/B effectively work like an AND gate.<br> So R-BUS only gets high when PWM = high and R-DRV = low, G-BUS gets high when PWM = high and G-DRV = low, and so on.<br> The microcontroller uses R/G/B-DRV pins to select which R/G/B channel PWM pulse goes to.
legit, awesome work. could be cool to see LEDs move in circular pattern too
Thanks! I know it would be cool if the colors moved in other directions too...<br>
Can I program it using an Arduino ?
Not sure... Some people are programming 8 bit PICs using Arduino:(<a href="http://arduino.cc/forum/index.php/topic,92929.0.html" rel="nofollow">http://arduino.cc/forum/index.php/topic,92929.0.html</a>)<br> <br> However I can't find any information on programming 16 bit PICs.<br> <br> Aki
I mean the PCB design that your showed in this page. Could you please share me that, because i am not professional.
Sorry, but I'm not sharing the PCB files. However, you can create the PCB with the information published here.<br>
I think you should sell the PCB as many of us cannot create PCB's in our kitchen... the MixMaster just ruins them. ;)
You can buy PCBs at my website - http://www.theledart.com/ .<br> <br>
Cool! Thanks! BTW the PCB is a pretty cool work of art itself! ... Looks decidedly Mayan in concept. Thanks!
Hi. This project is sick as. I am working on my own version using an AVR uC. I was just wondering what the diameter of the PCB is. Also, how do you line the LEDs up on a circle? Thanks in advance
PCB diameter is 4.3 inches. Not sure that you mean by &quot;how do you line the LEDs up on a circle&quot;...
I'm really impressed by the project, but I must admit I didn't quite understand the part about the colors shifting.<br><br>Could you show the *.c program? If not, could you elaborate about how do you do to keep the colors going through the lines?<br>On the chart it seems like the LED 7 turns white in the end, and all the others fade out.
You can read the text in the instructable, but the LEDs will light:<br> <br> LED 1 is on level 1 red (the lowest brightness).<br> LED 2 is on level 2 green.<br> LED 3 is on level 3 blue.<br> LED 4 is on level 3 yellow (red + green).<br> LED 5 is on level 3 purple (red + blue).<br> LED 6 is on level 3 turquoise (green + blue).<br> LED 7 is on level 255 (maximum brightness) white.<br> <br> I wrote the program in assembler, so there's no .c file...<br> <br>
I love this innovative art did you intentionally use a Fibocci Sequence ? in the pattern?<br><br>http://youtu.be/-Ibc8sD5sgw
Yes, Fibonacci number was one of the influences in the design. I looked into the nature for timeless beauty.<br> <br>
COuld you please share me your PCB.
Absolute Genius!!!!! Thanks for everything.
1 x PIC24F08KA101<br> 3 x VP3203N3-G<br> 12 x PN2222ATA<br> 1 x MCP1702-3302E<br> 162 x rgb leds common cathode<br> 13 x 1000 ohm<br> 162 x 150 ohm (1/8 watt)<br> 9 x 220 ohm<br> 1 x 10k ohm<br> 1 x 7805<br> 2 x 100 nf<br> 2 x 10 uf
Excellent excellent<br> <br> Thank you for sharing!&nbsp; I ordered the components for this awesome project. Hope it will arive soon.<br> <br> Thanks!!<br>
Wow!!! A successful replica of Aurora 9x18 with TH parts!<br> Congrats!!!<br> <br> The picture looks as though the green LEDs are not lighting... or it's just that picture?<br> <br> Looking at the parts, VP3203N3 seems a bit weak for the job - 0.6 ohm RDS seems high. How does it perform?<br> <br> I'd love to hear more about it.<br> <br> Aki
Hi Aki<br> <br> Thanks for your comments but it was you who really did the hard work, I can't even write programs for micro-controllers, so I didn't modify your firmware at all. I have uploaded a hand drawn circuit diagram of my modification at:<br> <br> http://www.mediafire.com/?juaveff334ntzo3<br> <br> Basically, to add remote control (as well as keeping the original manual pushbutton switches) I added a pic16f628 together with tsop2236 receiver and slightly altered an RC5 example program for the Proton Basic Compiler to toggle outputs on the PIC in response to button presses of the remote. The outputs of the PIC feed an 'or gate' so that a logic high is produced when either a button on the remote is pressed or a manual push-button switch is pressed for each of the 'up', 'down', 'left', 'right', 'centre' cases. This logic high then feeds a cd4066 switch chip which then feeds the PIC24F08ka101.<br> <br> To add auto-dimming I simply fed the DMP3098L mosfets with a varying voltage of about 2.9V in dark conditions to about 5V in bright conditions (as opposed to a fixed 5V). As you can see in the circuit this is simply achieved using an mic2941 regulator and an LDR together with appropriate resistors. Oh, and to make sure the colour balance remains relatively unaffected at lower mosfet supply voltages I added a 1N4001 diode at the output of the R-bus to lower the red LED current (due to the lower voltage drop of the red LED).<br> <br> I'll have a look at your analogue input mode next.....hope it's as good as the rest. Amazing work (subarashi dekibae de odoroki mashita) Aki.<br> <br> Hibs
Thanks for uploading the schematics. I see you added a voltage based brightness control... IR remote is something that can be added to Aurora via a simple firmware upgrade - so long as you can let go of one of the switches to open an I/O pin. (I have working IR remote receiver code for 16Fxxx. My earlier work almost always had the IR receiver, but I started preferring mechanical switches somehow.)<br> This gives me an idea for the next round of enhancements. Great work. Yoku dekimashita.<br> <br> Aki
Hi Aki<br> <br> I've finally finished making your Aurora 9x18 display, and have added a temperature/clock display in the centre of it. I also added a remote control and auto-dimming functionality to it. Feel free to ask any questions.<br> <br> Again, many thanks for developing Aurora 9x18 - it really is hypnotic to look at. You'll find a couple of videos at:<br> <br> http://www.youtube.com/watch?v=7ArCmOtHIsc<br> http://www.youtube.com/watch?v=ZQ9bqS7RbhA<br> <br> Hibs
Just realized that there is a shot of the controller in the video...<br>
Wow! Congrats! Great looking finish. I wish I was that handy...<br> <br> I'd love to see the controller part of Aurora as well.<br> <br> How did you add the auto-dimming and remote control? Did you add code to the Aurora chip?<br> <br> I have IR remote receive firmware written for PIC16F, but haven't ported to PIC24F yet...<br> <br> Thanks for shearing.<br> <br> Aki
Can you send me a better picture of the PCB or maybe a CAD (if you have it) please? Thanks! --- rmashmoul@yahoo.com
I bought the kit and put it together without any problems. This project and instructable are very well done. I high recommend this project to anyone considering purchasing the kit (if there are any left).
Thank you for sharing a PCB. I think a lot of people have mixed results with soldering SMD components like me. When the size of the print exceeds the 5x5 cm I already know it will fail because of temperature differences between inner and outer regions of the board. If it succeeds the components are not positioned straight.
Hi,<br> <br> My name is Ika and i want to share a non smd components pcb with you. I have many reasons for it. I have spend more than a million of dollars trying to solder smd components without success. Also a project on instructables must be reachable for everybody so all people can learn from it. The pcb contains the leds and resistors only. The rest can easily be added by yourself (you have to find the non smd equivalent for the components). Attached the source files which can be imported in eagle. Also a self made library is attached which can also be imported in eagle.<br> <br> Greetings from Tokio,<br> <br> Ika
Thank you for sharing a PCB. I think a lot of people have mixed results with soldering SMD components like me. When the size of the print exceeds the 5x5 cm&nbsp;I already know it will fail because of temperature differences between inner and outer regions of the board. If it succeeds the components&nbsp;are not positioned straight.<br> <br> I'm not familiar with the Eagle PCB design software but if you succeeded to not use SMD components for this awesome project it is worth trying.<br> <br> Can you also make a PCB with all components included? You are only a few components&nbsp;away from having it fully available.&nbsp;I don't mind having a second board which can be put below the LED board like it is done in the LED Cube 8x8x8 project which is also an instructable winner on this website.
<br> If someone decides to make a through-hole only version of Aurora 9x18, I will help with the circuit design, etc.<br> I just don't have the desire to design the through-hole version of PCB...<br> <br> Aki<br>
<br> Wow! I applaud the effort to create the through-hole version of the layout.<br> I guess the rest of the circuit needs to be converted to through-hole as well. I know I could not find the equivalent MOSFET in through hole without going for a larger size ones (like TO-220). So the through-hole version of Aurora 9x18 would be quite large.<br> <br> Why don't you post your through-hole version Instructable?<br> <br> P.S. Do you speak Japanese?<br> <br> Aki<br>
Hello Aki,<br> <br> You designed an awesome project. It is more than a beatifull &quot;object&quot;&nbsp;as you described yourself :-)<br> <br> May I ask a question about why you choosed the powerfull&nbsp;DMP3098L MOSFED in your project? In step 2 you describe the current drawn by 162 LED's in parallel which can peak to 3A. In step 13 you describe the power supply with 1A capacity. It looks like less current is needed so a smaller MOSFED can be used?<br> <br> The LED Cube 8x8x8 project on this website with 512 LED'S&nbsp;(no full color) consumes at about 360 mA when&nbsp;I switch all&nbsp;LED's on because of the multiplexing (a single LED in this project consumes 20 mA when using the same resistor and voltage but no multiplexing).
Thanks for your compliments.<br> <br> The &quot;peak&quot; current that the R bus draws is 20 mA x 9 x 18 = 3240 mA. This is the worst case scenario, and in reality it's more like 2800 mA. So the MOSFET chosen is a nice/safe fit. A bit less capacity would be fine, but I could not find other MOSFETs that fit the bill.<br> <br> However, since LEDs are always blinking at a fast speed (about 86kHz), and average duty rate (rate between the LED on/off time) is about 33%. So the average calculated current draw is 924 mA. (Red LEDs draw the highest current, other colors draw a bit less, so the actual average is even less.)<br> <br> The current gets even lower as the supply voltage lowers even a bit. So with a USB supply tending to give slightly lower than 5V (I see 4.9V or less), Aurora 9x18 only draws about 400 - 600 mA (actual measurement).<br> <br> Aki<br>
Would this device be all that is needed to load the HEX file to program the PIC microcontroller??? Is this the least expensive device?<br><br>What about the Gerber files to have the PCBs fabricated? Did I miss that file somewhere???<br>
I'm not releasing the PCB file for this project. I _might_ be able to sell the PCB in limited quantities.<br><br>Please understand that this PCB requires very tight tolerance in fabrication, and it will be expensive to get it done in small quantities. (6 mil traces &amp; space, many holes, etc.) Bargain priced manufactures won't get it right for sure. <br><br>Aki
Can you please tell me the price of this...I'd really like to build this. Anyways, Congrats...
<br> Aurora 9x18 Kit is now available in limited quantity. In case you are still interested.<br> <br> <a href="http://www.instructables.com/community/Aurora-9x18-Kits-for-Sell/">http://www.instructables.com/community/Aurora-9x18-Kits-for-Sell/</a><br> <br> Aki<br>

About This Instructable


461 favorites


Bio: I am an electronic artist living in Brooklyn, NY. I work with LEDs and microcontrollers to create beautiful objects.
More by ledartist: T962A SMD Reflow Oven Fix/Hack Color Organ Triple Deluxe II Aurora 48 - 48 RGB LED Sequencer
Add instructable to: