sholtsnolts
Published

Northern Lights Wall Art

Bob Ross + Arduino = :)

IntermediateFull instructions provided3,583
Northern Lights Wall Art

Things used in this project

Hardware components

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

Software apps and online services

Arduino IDE
Arduino IDE
FastLED Library

Hand tools and fabrication machines

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

Story

Read more

Schematics

Circuit/ Wiring

Code

Northern Lights Routine

Arduino
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()
{  
  Serial.begin(9600);
  // 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);

  FastLED.setBrightness(BRIGHTNESS);
  currentBlending = LINEARBLEND;

  AuroraPalette_green_blue_purple();
}

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

  FillLEDsFromPaletteColors( startIndex);
    
  FastLED.show();
  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);
}

Credits

sholtsnolts

sholtsnolts

0 projects • 0 followers

Comments