Stranger Things is full of nostalgic nods to the 80s and Stephen King novels. So what better way to celebrate Halloween than to make your very own lights to communicate with loved ones in the upside-down this year?

Supplies (from amazon.com) — $70 in parts

Power Supply (any ac/dc power supply from 9v to 20v should work) https://www.amazon.com/gp/product/B00BWA48AA/ref=oh_aui_detailpage_o00_s01?ie=UTF8&psc=1

USB 2.0 B Male to A Male cord https://www.amazon.com/gp/product/B00NH11KIK/ref=oh_aui_detailpage_o02_s00?ie=UTF8&psc=1

WS2811 Individually Addressable led string lights (but ws2812 lights work too) — have to be individually addressable https://www.amazon.com/gp/product/B01AG923GI/ref=oh_aui_detailpage_o03_s01?ie=UTF8&psc=1

Arduino Uno r3 (r3 just means revision three) https://www.amazon.com/gp/product/B008GRTSV6/ref=oh_aui_detailpage_o03_s01?ie=UTF8&psc=1

Breadboard w/ jumper wires https://www.amazon.com/gp/product/B004RXINEG/ref=oh_aui_detailpage_o03_s00?ie=UTF8&psc=1

9v snap on connectors and DON’T FORGET THE 9v batteries!!!!

Connecting Everything up

So you have all your supplies listed above, you’re now just a few steps away from communicating with Will.

Connect your Uno to your laptop with the USB 2.0 A male to B male cord. You should see a blinking light and next to it is says “ON” indicating that the Arduino is alive. You can’t miss it! Break out the Breadboard!!! Breadboards are basically rows of metal that you connect your wires up to to power things. See image:

These rows of metal are seperate from every other row, so keep that in mind when connecting things up. You will have to use jumper wires to complete the circuit. Don’t worry I will explain.

On the left you have the top view, with little holes where you can shove wires into. The left shows you how these rows are physically connected.

3. Now take out a jumper wire and connect it to one of the two GND pins (aka ground pin) as indicated on the Arduino microcontroller, and plug that bad boy into the breadboard.

4. After connecting the ground pin/GND to the breadboard you have to take another jumper wire and connect it to the power out pin labeled 5V

5. Now get out the christmas lights. Your lights are going to have these plastic connectors on each end one male and one female that make them chain-able so if you had multiple strings of lights you could hook it all up into one giant strip.

6. Find the female side not the male side. Should be self-explanatory. Innies vs outties. You can do it! See below:

as you see i connected two jumper wires to the female port and labeled everything for you

7. The data wire is the middle wire, in my lights. You can find this out by looking at your led light and peering through the case. You will see that one is labeled GND for ground, Din for Data in, 5v for power (indicating the voltage).

wire FB.) Female Connector Blue Jumper Wire = GND

wire FW.) Female Connector White Jumper Wire = Data = Din (HINT: THIS IS WHERE YOU SEND THE DATA THROUGH)

wire LR.) Loose wire RED = Power wire

wire LB.) Loose wire BLUE = GND wire

8. Connect wire FB to ground pin on arduino, but this time on the side that is labeled DIGITAL (PWM~).

9. Connect wire FW to PIN 11

Connect Female jumper wires to arduino like so!

10.) Connect the loose blue wire LB to the breadboard, in the same row as the black ground jumper wire you ran earlier that spans from the arduino’s GND pin to the breadboard (step 3).

11.) Connect the loose red wire LR to the breadboard, but connect it to the same row as the red power jumper wire you ran earlier (step 4).

12.) Download Arduino IDE https://www.arduino.cc/en/Main/Software, this is where you write or import the code to control the lights. Start it up!

13.) Download FASTLED library https://github.com/FastLED/FastLED/archive/v3.1.3.zip

14.) In arduino ide go to tools and make sure you select your board and right under that select your port, it should be the usb one!

15.) Then add the FastLed library In the toolbar go to Sketch -> Library -> Add .ZIP library and locate the zip you just downloaded and import it

16.) Then just load up an example FILE -> Examples -> FastLED -> Cyclon

and change the following variables.

#define NUM_LEDS = 50 (the number of leds in your string)

#define DATA_PIN = 11 (the pin you connected the Din wire to)

and Delete the CLOCK_PIN variable as it is not needed.

Now just hit the → button in the top left corner and see the lights work!

Stay tuned, I will upload the Stranger things code very soon!

CODE!!!! Just plug this in and play. Note, I will be updating the code below very soon to allow you to have multiple messages lined up and show you how to put the lights up with the alphabet to display your spooooky messages!

#include “FastLED.h”

// the milliseconds to give each letter

#define MILLIS_PER_LETTER 1000

// number of LEDs in the strip

#define NUM_LEDS 50

// the data pin

#define DATA_PIN 11

// an array to keep track of the LEDs

CRGB leds[NUM_LEDS];

// the message we will display

String message;

// the time we received the message

unsigned long received;

// we’ll use all 26 letters of the alphabet

#define NUM_LETTERS 26

// the LED number (start counting from 0) that we light up to show our message

const int LETTER_LEDS[NUM_LETTERS] = {

/*A*/ 7

,/*B*/ 8

,/*C*/ 9

,/*D*/ 10

,/*E*/ 11

,/*F*/ 12

,/*G*/ 13

,/*H*/ 14

,/*I*/ 32

,/*J*/ 31

,/*K*/ 30

,/*L*/ 29

,/*M*/ 28

,/*N*/ 26

,/*O*/ 25

,/*P*/ 24

,/*Q*/ 23

,/*R*/ 38

,/*S*/ 39

,/*T*/ 40

,/*U*/ 41

,/*V*/ 42

,/*W*/ 44

,/*X*/ 45

,/*Y*/ 46

,/*Z*/ 47

};

// how many colors to cycle through for the lights

#define NUM_COLORS 4

void setup() {

// send print statements at 9600 baud

Serial.begin(9600);

// initialize the LEDS

FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);

// set them all to be off

fill_solid(leds, NUM_LEDS, CRGB::Black);

FastLED.show();

// connect to wifi.

// this message will show until it is overwritten from Firebase and shown if Firebase fails

message = “run”;

received = millis();

}

void loop() {

// how many milliseconds have elapsed since the last message came in

unsigned long elapsed = millis() — received;

// assuming MILLIS_PER_LETTER, what letter (index) ofthe message should we be on?

int index = elapsed/MILLIS_PER_LETTER;

// if the letter we should technically be on is within the bounds of the message

if(index < message.length()) {

// get the character letter we should print

char letter = message.charAt(index);

// if the character is between ‘a’ and ‘z’ (no numbers, spaces, or punctuations)

if(letter >= ‘a’ && letter <= ‘z’){

// how bright to make this LED from 0 to 1, this is what makes them fade in and out

// it calculates what percent we are completed with the letter, and makes it fade in from 0–50% and fade out from 50–100%

// the formula can be visualized here: https://www.desmos.com/calculator/5qk8imeny4

float brightness = 1-abs((2*(elapsed%MILLIS_PER_LETTER)/((float)MILLIS_PER_LETTER))-1);

uint8_t value = 255 * brightness;



// get the LED number the letter should be in, assuming our array starts at ‘a’ and ends at ‘z’

int letter_index = letter-’a’;

int led = LETTER_LEDS[letter_index];

// get a rotation of colors, so that every NUM_COLORS lights, it loops

// e.g. red, yellow, green, blue, red, yellow green blue

uint8_t hue = (letter_index%NUM_COLORS*255)/NUM_COLORS;

// set that LED to the color

leds[led] = CHSV(hue, 255, value);

FastLED.show();

// set it to black so we don’t have to remember the last LED we turned on

leds[led] = CRGB::Black;



Serial.print(letter);

Serial.print(“\t!”);

Serial.print(led);

Serial.print(“\t=”);

Serial.print(brightness);

Serial.print(“\t@”);

Serial.print(elapsed);

Serial.println();

} else {

// if the letter wasn’t a-z then, we just turn off all the leds

FastLED.show();

}

} else {

// if the letter is beyond the bounds of the message, we just turn off all the leds

FastLED.show();

}

}

RESOURCES:

http://www.tweaking4all.com/hardware/arduino/arduino-ws2812-led/