Aurora 9x18 RGB LED art

FeaturedContest Winner
Picture of Aurora 9x18 RGB LED art
*** 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.

Remove these adsRemove these ads by Signing Up

Step 1: Concept

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

The layout of the LEDs nailed it for me, great work
smileyam1 year ago
hi, LED artist,

what's the camera with you to get to beautiful Pictures and videos of "aurora"? not only the art itself ,but also the pictures and videos are art!
ledartist (author)  smileyam1 year ago
I shot the video with Canon HF S200 camcorder. Stills are shot with Nikon D700, but many of the stills are from the video.
smileyam1 year ago
hi, led artist,

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.

so if the PCB is larger, it will be even much beautiful.
ledartist (author)  smileyam1 year ago
LEDs get about 11 to 18 mA each. The formula is: (supply voltage - LED forward voltage - transistor C-E saturation voltage) / 150 ohm
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.
smileyam1 year ago

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!

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?

as long as you limit your work in toy, that's ok ,but when i was used in industry, there should be an answer.

kbeharee1 year ago
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 ..

My question is that why in the aurora conceptial timing diagram the PWM patterns are not in sync ??
ledartist (author)  kbeharee1 year ago
The 3 transistors Q2R/G/B effectively work like an AND gate.
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.
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
ledartist (author)  danm_daniel1 year ago
Thanks! I know it would be cool if the colors moved in other directions too...
theargha1 year ago
Can I program it using an Arduino ?
ledartist (author)  theargha1 year ago
Not sure... Some people are programming 8 bit PICs using Arduino:(,92929.0.html)

However I can't find any information on programming 16 bit PICs.

happyfrank2 years ago
I mean the PCB design that your showed in this page. Could you please share me that, because i am not professional.
ledartist (author)  happyfrank2 years ago
Sorry, but I'm not sharing the PCB files. However, you can create the PCB with the information published here.
I think you should sell the PCB as many of us cannot create PCB's in our kitchen... the MixMaster just ruins them. ;)
ledartist (author)  mortso1 year ago
You can buy PCBs at my website - .

Cool! Thanks! BTW the PCB is a pretty cool work of art itself! ... Looks decidedly Mayan in concept. Thanks!
#iluvleds1 year ago
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
ledartist (author)  #iluvleds1 year ago
PCB diameter is 4.3 inches. Not sure that you mean by "how do you line the LEDs up on a circle"...
jackalinson2 years ago
I'm really impressed by the project, but I must admit I didn't quite understand the part about the colors shifting.

Could you show the *.c program? If not, could you elaborate about how do you do to keep the colors going through the lines?
On the chart it seems like the LED 7 turns white in the end, and all the others fade out.
ledartist (author)  jackalinson2 years ago
You can read the text in the instructable, but the LEDs will light:

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.

I wrote the program in assembler, so there's no .c file...

jmcculley2 years ago
I love this innovative art did you intentionally use a Fibocci Sequence ? in the pattern?
ledartist (author)  jmcculley2 years ago
Yes, Fibonacci number was one of the influences in the design. I looked into the nature for timeless beauty.

happyfrank2 years ago
happyfrank2 years ago
COuld you please share me your PCB.
alan52522 years ago
Absolute Genius!!!!! Thanks for everything.
artisticled2 years ago
1 x PIC24F08KA101
3 x VP3203N3-G
12 x PN2222ATA
1 x MCP1702-3302E
162 x rgb leds common cathode
13 x 1000 ohm
162 x 150 ohm (1/8 watt)
9 x 220 ohm
1 x 10k ohm
1 x 7805
2 x 100 nf
2 x 10 uf
PCB.zip325 KB
Excellent excellent

Thank you for sharing!  I ordered the components for this awesome project. Hope it will arive soon.

ledartist (author)  artisticled2 years ago
Wow!!! A successful replica of Aurora 9x18 with TH parts!

The picture looks as though the green LEDs are not lighting... or it's just that picture?

Looking at the parts, VP3203N3 seems a bit weak for the job - 0.6 ohm RDS seems high. How does it perform?

I'd love to hear more about it.

rhaber2 years ago
Hi Aki

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:

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.

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

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.

ledartist (author)  rhaber2 years ago
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.)
This gives me an idea for the next round of enhancements. Great work. Yoku dekimashita.

rhaber2 years ago
Hi Aki

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.

Again, many thanks for developing Aurora 9x18 - it really is hypnotic to look at. You'll find a couple of videos at:

ledartist (author)  rhaber2 years ago
Just realized that there is a shot of the controller in the video...
ledartist (author)  rhaber2 years ago
Wow! Congrats! Great looking finish. I wish I was that handy...

I'd love to see the controller part of Aurora as well.

How did you add the auto-dimming and remote control? Did you add code to the Aurora chip?

I have IR remote receive firmware written for PIC16F, but haven't ported to PIC24F yet...

Thanks for shearing.

rmashmoul2 years ago
Can you send me a better picture of the PCB or maybe a CAD (if you have it) please? Thanks! ---
asimo2 years ago
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.
artisticled2 years ago

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.

Greetings from Tokio,

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.

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.

Can you also make a PCB with all components included? You are only a few components away from having it fully available. 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.

Get More Out of Instructables

Already have an Account?


PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!