Stranger Things Interactive Wall Art

39K282102

Intro: Stranger Things Interactive Wall Art

hello everyone,

here is a great beginner arduino + neopixel "art hack" - you can bring any art form into life with this very simple instructable. I decided to create the christmas light wall decoration from the netflix show "stranger things"

it has an onboard usb rechargable battery, so you can hang it up anywhere and still be able to demonstrate your art.!!

it also has an mini button to shuffle through pre-recorded spellings :)

.

materials needed;

1x arduino

26x neopixels

1x 470ohm resistor

1x 16V 1000uF capacitor

1x mini momentary switch

1x usb powerbank

few feet of thin solid core wire

involves using hot glue + soldering (learn)

.

let's make >

please vote for this post on the LED contest

STEP 1: Design

included zip file includes the 2D vector drawings. and how I alligned the lights on the board, to figure out exact drilling spots. i used adobe illustrator to design..

.

i cut the parts using a local CNC machine. you can easily use hand tools to cut the parts, just be careful.. or even better search for a local makerspace, become a member and make something AWESOME. remember to sand everything nice and smooth :)

.

print the PDF file, which includes the picture to print and glue on the board. use US letter size paper and do not choose "fit to page" on print settings.

STEP 2: Place Lights

we start assembly by hot gluing the neopixels to the frame

STEP 3: Start Wiring

follow the diagram and take your time, especially if you are new to soldering.

you can use hot glue to first lay down the wire and secure it into place.

STEP 4: Circuit

here is the full circuit. you can recharge the battery like a cell phone. and then use the usb cable to power the arduino either from the battery or from any usb outlet.

.

remember

all the 5V + positive wires from the lights come together as one into arduino 5V pin

all the GND - negative wires from the lights come together as one into arduino GND pin

data in for first led goes into D6 on arduino

.

capacitor - negative leg goes to arduino GND pin with the light wires

capacitor + positive leg goes to arduino 5V pin with the light wires

.

resistor goes just before the first LED's Din pin

button 1 leg goes to GND

button opposite leg goes to D4 on arduino.

hot glue the battery to a place where the usb cable can easily connect

STEP 5: Program

here is the arduino code;

feel free to comment below for help if you are new to arduino

STEP 6: Place the Print

before gluing anything, place the print on the board to see if everything is aligned right.

.

if you hold it up to ambient light, you should see it come through the paper.

.

i used cardstock paper to make it more durable & spray glue to secure it down on the wooden board.

STEP 7: Lights On

assemble rest of the frame to give it more of a picture frame look

now go ahead turn it on & hang it up :)

.

hope you enjoyed it and that this instructable will spark your creativity

please share, favorite + follow.!!

81 Comments

What is the Z light connected to? On the plans it just has the 5V data and GND in, but on your actual project it connects to the board.

Thank you everyone for their fantastic advice and guidance on this project.

I've made a vector version of the text - it's not exactly the font for the letters, but the bulbs are in the same place, so it will work with this layout for the LEDs.

You can download the version I've created here: http://f.zndr.co.uk/R0lP

weird, uno is ok to use, same thing. did you install the neopixel library correctly.?

also are you powering the lights correctly.?

Merhaba, bir Türk ismi görünce yazmak istedim, başarılar dilerim :)

Hi I am wanting to make this. But I want it bigger around 22x16 inches. Your source files cncparts.ai gave me an error
"Could not find linked file "stranger things wall.png" " I was hoping to
edit it possibly for bigger printing. How did you make it originally?

I also noticed it was pixelated in areas which would look even worse when blown up. Any suggestions?

Hi Akin (and others)!

My LEDs came in, and I've been able to start testing. The C9 format is exactly what I wanted, and they are working great. They are 12V, so I did need to run additional power independantly (I may ask you some additional hardware questions later)!

For the code, here's a quick clean up of what you provided. The "For" loop is useful if you want to set all LEDs to the same colour (or turn them all off). It isn't necessary for turning individual lights on and off.

Hopefully you can make sense of what I've done, and re-do your code snippets in the instructable. In another week or so, I'll share the updated code I'm doing, so the lights will blink, and do patterns, and hopefully have a simplified way of entering messages.

Thanks again.

#include <Adafruit_NeoPixel.h>

#define PIN 6

Adafruit_NeoPixel strip = Adafruit_NeoPixel(27, PIN, NEO_GRB + NEO_KHZ800);

void setup() {

strip.begin();

strip.show(); // Initialize all pixels to 'off'

}

void loop() { //main ardino loop - this keeps repeating

// set all colours to christmas colors

strip.setPixelColor(0, 105, 105, 105); //A - white

strip.setPixelColor(1, 0, 0, 105); //B - blue

strip.setPixelColor(2, 105, 0, 0); //C - red

strip.setPixelColor(3, 0, 80, 105); //D - light blue

strip.setPixelColor(4, 0, 0, 105); //E - blue

strip.setPixelColor(5, 105, 105, 25); //F - yellow

strip.setPixelColor(6, 105, 0, 0); //G - red

strip.setPixelColor(7, 0, 0, 105); //H - blue

strip.setPixelColor(8, 0, 0, 105); //I - blue

strip.setPixelColor(9, 105, 0, 0); //J - red

strip.setPixelColor(10, 0, 0, 105); //K - blue

strip.setPixelColor(11, 105, 105, 105); //L - white

strip.setPixelColor(12, 105, 105, 25); //M - yellow

strip.setPixelColor(13, 105, 0, 0); //N - red

strip.setPixelColor(14, 105, 0, 0); //O - red

strip.setPixelColor(15, 0, 80, 105); //P - light blue

strip.setPixelColor(16, 105, 0, 0); //Q - red

strip.setPixelColor(17, 0, 80, 105); //R - light blue

strip.setPixelColor(18, 105, 105, 105); //S - white

strip.setPixelColor(19, 105, 105, 25); //T - yellow

strip.setPixelColor(20, 0, 0, 105); //U - blue

strip.setPixelColor(21, 105, 0, 0); //V - red

strip.setPixelColor(22, 0, 0, 105); //W - blue

strip.setPixelColor(23, 105, 105, 25); //X - yellow

strip.setPixelColor(24, 105, 0, 0); //Y - red

strip.setPixelColor(25, 105, 0, 0); //Z - red

strip.setPixelColor(26, 255, 0, 255); //empty - none

strip.show();

delay(1000);

//turn all colours off

for(int i=0;i<26;i++){ //loops through LED 'i' setting all to 0,0,0 (off)

strip.setPixelColor(i, 0, 0, 0);

}

strip.show();

delay(1000);

//turn on and off individual lights --- RIGHT ---

strip.setPixelColor(17, 0, 80, 105); //R - light blue

strip.show();

delay(600);

strip.setPixelColor(17, 0, 0, 0); //R - off

strip.setPixelColor(8, 0, 0, 105); //I - blue

strip.show();

delay(600);

strip.setPixelColor(8, 0, 0, 0); //I - off

strip.setPixelColor(6, 105, 0, 0); //G - red

strip.show();

delay(600);

strip.setPixelColor(6, 0, 0, 0); //G - off

strip.setPixelColor(7, 0, 0, 105); //H - blue

strip.show();

delay(600);

strip.setPixelColor(7, 0, 0, 0); //H - off

strip.setPixelColor(19, 105, 105, 15); //T - yellow

strip.show();

delay(600);

strip.setPixelColor(19, 0, 0, 0); //T - off

strip.show();

delay(1100);

//turn on and off individual lights --- HERE ---

strip.setPixelColor(7, 0, 0, 105); //H - blue

strip.show();

delay(600);

strip.setPixelColor(7, 0, 0, 0); //H - off

strip.setPixelColor(4, 0, 0, 105); //E - blue

strip.show();

delay(600);

strip.setPixelColor(4, 0, 0, 0); //E - off

strip.setPixelColor(17, 0, 80, 105); //R - light blue

strip.show();

delay(600);

strip.setPixelColor(17, 0, 0, 0); //R - off

strip.setPixelColor(4, 0, 0, 105); //E - blue

strip.show();

delay(600);

strip.setPixelColor(4, 0, 0, 0); //E - off

strip.show();

delay(2100);

//turn on and off individual lights --- RUN ---

strip.setPixelColor(17, 0, 80, 105); //R - light blue

strip.show();

delay(600);

strip.setPixelColor(17, 0, 0, 0); //R - off

strip.setPixelColor(20, 0, 0, 105); //U - blue

strip.show();

delay(600);

strip.setPixelColor(20, 0, 0, 0); //U - off

strip.setPixelColor(13, 105, 0, 0); //N - red

strip.show();

delay(600);

strip.setPixelColor(13, 0, 0, 0); //N - off

strip.show();

delay(2100);

}

Here's a better version if you install the FastLED library:

#include <FastLED.h>

template<typename T, size_t N> constexpr size_t countof(const T(&)[N]) { return N; }

CRGB leds[50];

// Christmas light colors

CRGB colors[] = {

//yellow

0xFFA500,

//white

0xFFFFFF,

//green

0x008000,

//aqua

0x00FFFF,

//red

0xFF0000,

//blue

0x0000FF

};

// An array to store which color is at which index is

// used so that the color of each LED stays the same.

// Values are generated in setup().

uint8_t index[countof(leds)];

void setup() {

for (auto &color : colors) napplyGamma_video(color, 2.2);

index[0] = random8(countof(colors));

for (size_t i = 1; i < countof(leds); i++) {

index[i] = random8(countof(colors)-1);

if (index[i] == index[i-1]) index[i] = countof(colors)-1;

}

FastLED.addLeds<WS2811, 6, RGB>(leds, countof(leds));

FastLED.setBrightness(255);

// Fill and show LEDs

for (size_t i = 0; i < countof(leds); i++) leds[i] = colors[index[i]];

FastLED.show();

// Message trigger

delay(5000);

// Flicker generator

for (int i = 0; i <90; i++) {

if (random8() > ease8InOutQuad(i*2))

FastLED.show();

else

// To prevent having to repopulate leds[], we

// simply show black instead of clearing the array.

FastLED.showColor(CRGB::Black);

delay(33);

}

// Finally clear the array so that the LEDs don't

// relight when we show our message

FastLED.clear();

}

void loop() {

// Spaces are moved to before the message so that there's a pause

// after the flicker. Could be replaced with a delay() in setup().

FastLED.clear();

write(" Message One");

write(" Message Two");

write(" Message Three");

// Fill and show LEDs

for (size_t i = 0; i < countof(leds); i++) leds[i] = colors[index[i]];

FastLED.show();

// Message trigger

delay(4000);

// Flicker generator

for (int i = 0; i <90; i++) {

if (random8() > ease8InOutQuad(i*2))

FastLED.show();

else

// To prevent having to repopulate leds[], we

// simply show black instead of clearing the array.

FastLED.showColor(CRGB::Black);

delay(33);

}

}

//May not be needed. This accounts for LED pixels skipped or not used for the 2nd and 3rd rows

int getIndex(char c) {

c = toUpperCase(c);

switch (c) {

case 'A'...'H':

return 50 - (c - 'A');

case 'I'...'P':

return 30 + (c - 'I');

case 'Q':

return 39;

case 'R'...'Y':

return 26 - (c - 'R');

case 'Z':

return 17;

default:

// Should never happen, but is here to avoid compiler warnings

return 0;

}

}

void write(char c) {

if (isAlpha(c)) {

// Get index and convert to 0-based indexing

int i = getIndex(c)-1;

leds[i] = colors[index[i]];

FastLED.show();

delay(750);

leds[i] = CRGB::Black;

FastLED.show();

delay(250);

} else if (isSpace(c)) {

delay(1000);

}

}

void write(const char *str) {

while (*str) write(*str++);

}

sorry for the late response, instructables didn't email me about this comment.. i normally reply back same day :(
great stuff.!! thank you for sharing the code

I really need to find the time to try this. So cool!

please do, thank you for your interest..sorry for the late response, instructables didn't email me about this comment.. i normally reply back same day :(

Hi Akin!

Thanks for posting this! I had the same idea as you and am happy there are others posting code here as that's my next step. I used neopixels and a Circuit Playground from Adafruit. I'm also working on setting up a character array that will be read from, instead of a long line of code.
Mine is going to be a Halloween costume so I am putting it on cardboard and wearing. You can also sew them into a shirt! I got some tiny dollhouse/scrapbooking Holiday lights. I will post some updates this weekend and share my code once I get it going.

-Sam

sorry for the late response, instructables didn't email me about this comment.. i normally reply back same day :(
very good stuff, hope you got to rock it for halloween.!!

Hey guys so I'm actually building this for an Art Project, and I really want to do this. However I'm completely new to coding and where to get them materials at. Anyone know a spot where I can find them without buying online since I have till Oct31 to present?

sorry for the late response, instructables didn't email me about this comment..
how did it go, did you present.?!

Also, this time of year places like Hobby Lobby or craft stores will have small plastic holiday lights that can be used for scrapbooking and wrapping gifts. That way you don't have to buy actual lights and can save some money.

If you go to https://www.adafruit.com/distributors, you can see if there is a local store you can get them from. Microcenter in the US has neopixels, and various controllers you can use; if you live near one with a stock you don't have to wait for shipping. And for learning code, I would just use the code others have posted to get it working, and learn from how it works. Basic principle of coding for me is: Take an input and do stuff to get your required output. I'm still learning myself, but it helps to think of it that way to read code and figure out what is being done to the input. This is great project to learn from!

I'm having the hardest time getting the solder to stick when it does its super fragile and breaks off of the LEDs. Are there any tricks to getting it to be secure?

I was completely new to soldering with this project. I bought the smallest tip I could find at Radio Shack, and the smallest diameter solder. I touched the tip to each LED and then the solder to form a very small puddle of solder. Then I came back with the wire, reheated the solder and quickly placed the wire down into it. Seemed to work for me.

More Comments