Project tutorial
Northern Lights Wall Art

Northern Lights Wall Art

Bob Ross + Arduino = :)

  • 1 comment
  • 6 respects

Components and supplies

Ard nano
Arduino Nano R3
12070 01
SparkFun Solder-able Breadboard
or breadboard
A 4118 2
USB to 2.1mm DC jack cord
31ac4603 40
Hook Up Wire Kit, 22 AWG
Through Hole Resistor, 470 ohm
anything similar will work
Panasonic eca 1em102
Capacitor 1000 µF
3/8" plywood (~21 x 31" for main piece, then some extra for frame)
Card Board
White + Glossy Spray paint
Misc. Hardware
tiny nails/ screws and picture hanging hardware
Paint Stuff
Paints can be found in the Bob Ross "Northern Lights" video

Necessary tools and machines

Dremel + sawblade bit
Circular/ Hand Saw
Wood Glue
09507 01
Soldering iron (generic)
X-Acto Knife
Hy gluegun
Hot glue gun (generic)

Apps and online services

About this project

A mixture of painting and programming :) I came up with this idea when I couldn't find many creative ways to use individually addressable LEDs online. The project uses WS2812B NeoPixel LEDs, some plywood, and some basic programming to turn Bob Ross's Northern Lights painting into living art.

Demo Video

STEP 1 - Preparing the wood

The first step in building the project is to cut the plywood that will be the painting, I decided to kind of eyeball it; that's the beauty of art, nothing has to be perfect. Mine ended up being approx. 21x31". I used a circular saw for this, and then sanded the edges.

Next, I sketched the outline for the northern lights, MIRRORED, on the side BACK SIDE of the wood, so that the messy parts of cutting with the dremel wouldn't show on the painting side. After I had a rough outline of the area that I wanted to cut, I used the Dremel with the sawblade bit to make slits in the wood. This was alot slower and tedious than I thought it would be, but atleast I can give you some tips if you plan to use the same method:

1. Don't just make all of you cuts the same length, It looks better if they vary.

2. You can always sand the slits to make them wider, so don't mess up the entire project by accidently cutting into another slit.

3. If you look at mine, I have a lot of cuts in the middle where I just used a hand saw from the edge of the wood. These were way easier and quicker cuts, just don't go overboard or you won't have the wave-shape anymore.

After all the cuts were made, I moved on to the electronics.

STEP 2 - Making/ incorporating the LEDs

When I first started messing with the LED portion, I planned on using a NeoPixel strip that I already had. I changed my mind when I realized that the LEDs were too spaced out and the color wave effect wouldn't look good with so few lights. So, I decided to solder my own strips together using the same WS2812B LEDs.

You can buy your own, and maybe even get a strip that has smaller/ close-together LEDs for a better effect, but if you do solder your own, try not to use more than 1 inch of wire in between them. As for how many LEDs you use per strip is up to you.

This is the convenient part of creating your own strip: you don't have to have to cut a pre-made strip that leaves an akward inch of space at the end of the wood slits where there's no LED. I made 3 strips (17-17-32 LEDs) using 66 LEDs total. One strip for each separate chain of the northern lights.

I then used cardboard/ wood to create a sort of mounting rail for the LEDs below each set of northern lights (palce the cardboard perpendicular to the wood, so that the lights point UP when the painting is hanging on the wall).

I also cut out a piece of cardboard which I spray painted glossy white and then placed it behind the entire area containing the LEDs. This helped reflect the lightfrom the LEDs, as well as keep the colors of one set of northern lights from bleeding into the other 2 (make sure all the cardboard for the LED-rail portions are the same width, so that the white back-piece rests evenly over them to better seal each strip of lights off from eachother).

I used hot glue to secure all cardboard pieces, as well as the LEDs to the cardboard rails.

STEP 4 - The Electronics

The fritzing sketch shows how to assemble the electronics, and the code is commented, so there's not much to say about it here. Just pay attention to keeping the wires out of the way so they dont cover your northern-lights slits. Use hot glue where you can to route the wires.

For the power supply, I used an ordinary USB-charging box and cord. these are rated for 5v-1A, and the WS2812B's use 5v. If you don't live in a cave, you probably have dozens of USB charging boxes laying around your house. To decide which one to use, I plugged each one into the wall with the cord I intended to use, and used a multimeter to measure which one most consistently output closest to 5V. Most of them would've worked, so don't freak out too much about this part. 1A should be enough unless you use alot more LEDs (I used 66 LEDs and they were drawing around 0.65-0.7A).

It goes without saying, but if you don't have a USB to Barrel jack wire, you can just cut and solder one together (I'm being vague with parts of the project that you can easily google, like this).

**IMPORTANT** I'll mention this again later: Never connect the Nano via USB and 5V at the same time, you will fry it. If you're uploading code, make sure the 5V power is off or disconnected.

STEP 5 - The Painting

Before I painted, I cut out a frame with scrap wood to hide some of the ugliness on the back of the project when its hanging on the wall. This is a personal preference and the dimensions of the fram are up to you. I did ~ 1.5" thick, cutting a whole for the barrel jack power input and staining it before I used wood glue and clamps to secure it around the main piece of wood.

Only the man himself can give you the painting part of the tutorial :)

Note: I painted the whole back with black acrylic before getting started, being careful not to get too much paint in the lights-slits.

STEP 6 - Final Touches

The last thing I did was use wood glue and tiny nails to put the 2 large pieces of wood on the back of the painting. This made it so that the painting rests evenly against the wall, far enough off of it so that the arduino parts aren't damaged by the wall itself. It also gives you a spot to attach mounting hooks/ brackets, if you plan to.

This was my first tutorial, so let me know if anything was unclear. I figure if you're like me, you'll want to put your own personal touch on parts of the project anyway, so I skipped some of those decision-based details here and there. Hope you guys like it!


Northern Lights RoutineArduino
This is the code for the Light routine. Pay attention to if you used the same pins. DO NOT HAVE THE NANO AND THE 5V POWER CONNECTED AT THE SAME TIME, YOU WILL FRY IT. When powering the Nano through the 5V pin, you are by-passing the voltage regulator. If you want to avoid this or don't trust your power supply to be consistent, look up how to power an arduino and peripherals separately.
// Northern Lights
// By: Max Scholtes
// Here I modified the multiple-strips array example from the FASTLED examples file to program the 3 LED strips.
// The 3 separate strips are put into a single array so they are treated as one, single strip.

  #include <FastLED.h>
  #define LED_TYPE         WS2812B
  #define COLOR_ORDER      GRB
  #define NUM_STRIPS       3
  #define NUM_LEDS_STRIP_1 17
  #define NUM_LEDS_STRIP_2 17
  #define NUM_LEDS_STRIP_3 32
  #define NUM_LEDS         66
  CRGB leds[NUM_LEDS];

  #define BRIGHTNESS  200 //adjust brightness
  #define UPDATES_PER_SECOND 25 // "speed" the lights flow
//  CRGBPalette16 currentPalette;
  CRGBPalette16 currentPalette;
  TBlendType    currentBlending;

  extern CRGBPalette16 myRedWhiteBluePalette;
  extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;

void setup()
  // STRIP 1
  // tell FastLED there's 17 NEOPIXEL leds on pin 3, starting at index 0 in the led array
  FastLED.addLeds<LED_TYPE, 3, COLOR_ORDER>(leds, 0, NUM_LEDS_STRIP_1).setCorrection(TypicalLEDStrip);

  // STRIP 2
  // tell FastLED there's 17 NEOPIXEL leds on pin 5, starting at index 17 in the led array
  FastLED.addLeds<LED_TYPE, 5, COLOR_ORDER>(leds, 17, NUM_LEDS_STRIP_2).setCorrection(TypicalLEDStrip);

  // STRIP 3
  // tell FastLED there's 32 NEOPIXEL leds on pin 6, starting at index 34 in the led array
  FastLED.addLeds<LED_TYPE, 6, COLOR_ORDER>(leds, 34, NUM_LEDS_STRIP_3).setCorrection(TypicalLEDStrip);

  currentBlending = LINEARBLEND;


void loop()
  static uint8_t startIndex = 0;
  startIndex = startIndex + 1; /* motion speed */

  FillLEDsFromPaletteColors( startIndex);;
  FastLED.delay(1000 / UPDATES_PER_SECOND);

void FillLEDsFromPaletteColors( uint8_t colorIndex) //Fills LED's from palette
    uint8_t brightness = 255;
    for( int i = 0; i < NUM_LEDS; i++) {
        leds[i] = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending);
        colorIndex += 3;

void AuroraPalette_green_blue_purple() // Custom color palette for LED's. Here, you can experiment with your own colors for the LED's.
    // This is where you can make up your own colors to play with. Look-up 'CHSV' to understand what the color's 3 values represent.
    CRGB purple = CHSV( 195, 255, 255);
    CRGB green  = CHSV( 100, 255, 255);
    CRGB graqua  = CHSV( 114, 255, 255);
    CRGB aqua  = CHSV( 128, 255, 255);
    CRGB teal = CHSV( 136, 255, 255);
    CRGB blue = CHSV( 160, 255, 255);
    CRGB black  = CRGB::Black;
    currentPalette = CRGBPalette16( // This is where you decide the order of the colors you created above. They are assigned to 16 LED's at a time, in the following order:
                                   green,  green,  aqua,  aqua,
                                   blue,   blue,   purple,    purple,
                                   blue, blue, aqua,  aqua,
                                  green,   green,   aqua,  aqua);


Circuit/ Wiring


Similar projects you might like

LED Tower Art

Project tutorial by Doug Domke

  • 70 respects

Steering unit, lights and servo fpv cam for RC 3ch radio

Project tutorial by wrighi

  • 1 respect

Stringent, the $15 Wall Plotter

Project tutorial by Fredrik Stridsman

  • 358 respects

Art Deco FM Radio Project Using Arduino

Project tutorial by Nick Koumaris

  • 27 respects

Arduino Plant Water Management System w/ BME280

Project tutorial by Kutluhan Aktar

  • 1 comment
  • 16 respects
Add projectSign up / Login