Projects

Strange Sights

Stranger Things Inspired Ouija Lights

Daniel Koch & Johann Wyss

Issue 32, March 2020

This article includes additional downloadable resources.
Please log in to access.

Log in

Recreate and elaborate on a famous scene from the popular TV series, Stranger Things.

BUILD TIME: 2 HOURS
DIFFICULTY RATING: Intermediate

Our inspiration from a Christmas present one of our staff made for their niece.

As one of the most successful TV series going around, Stranger Things has inspired some interesting projects, creations, and tributes. The series is produced by Netflix, who owns the intellectual property, and that means any commercial use of the material has to be licensed. That doesn’t cover non-commercial DIY projects, however, and this project is exactly that. We’re supplying a set of instructions, rather than selling a commercial product.

We’re going to show you how to recreate the well-known scene where a missing character communicates supernaturally through the control of otherwise inanimate Christmas lights. If you’re not familiar with the series, there is an official Netflix clip of this scene on YouTube. For want of a better word, we’re going to refer to the series moving forward as a film. We’re going to replicate this scene with some addressable LEDs, some 3D printing, and a background made of MDF sheet. We chose this because the idea of painting letters straight on the wall will probably upset others in your house, or even you when the novelty wears off. In using a separate background, you could also source similar wallpaper, which seems to be making a resurgence at the moment. We found a Sydney-based online party supply store selling a pair of posters which, when hung together, form a backdrop of the correct wallpaper and timber lining boards as seen in the film. We glued these to our MDF.

THE BACKGROUND

The lights in the film are glass-envelope, filament globes, and appear big enough to be small Edison screw-based mains-powered globes. The film is set in the 1980s, and the set designers have done a stellar job of making what are most likely addressable LED lights look like pre-LED glass envelopes. The lights in question are still available overseas as filament globes with glass envelopes. Some online projects replicating this scene use 3D-printed pine-cone or spiral envelopes, but the ones in the scene are clearly plain.

Some people even have YouTube videos showing them opening the glass envelopes of real lights to replace the filaments with addressable LEDs. We’re pretty sure you can imagine the results here, which is why we have chosen the 3D-printed route.

SOURCING

While we avoid buying from online auction sites as much as possible in DIYODE projects, this one is an exception. We’re using addressable LEDs for this, with individual LEDs mounted with their control IC on wires, rather than the LED strip we’re more familiar with. We simply can’t find a retailer for these in the configuration we need them in, even an online retailer. Because online auction sellers vary in consistency, and the product quality varies, we were hesitant about this. However, the project excited us too much to leave it unpublished. The strings can be found online by searching for ‘addressable LED’. Most of the results will be strips, but look at the images and soon you will see some with the LEDs in their own housings with the IC, and wires coming from the base. Some are labelled as ‘strings’, but many results are not. Likewise, don’t search by control protocol, like WS2812b, because many are actually WS2811 or others, and will appear way down the results pages.

The wires between LEDs on nearly all of the options are around 100mm to 120mm long. That’s shorter than in the film, but this suits us because our scale is smaller. We didn’t build a full-sized wall. We chose to write our code so that the letter lights are every second light where applicable, and every light in some places. However, if you want absolute authenticity, or don’t want to buy from an online auction site, the alternatives come from Core Electronics. They have a range of individually addressable LED options of varying economies which will allow you to solder your own wires and make the connecting lengths whatever you want. We have a separate information on our website with the details of Core’s products.

OUR PROJECT

We’re taking things a bit beyond the original film scene. In it, the supernatural presence of the missing boy spells “right here” and “run” with the lights. Then the scene progresses elsewhere, and the lights are not used again. We are going to factor this in, but add other references from the film as well. In normal operation, all the lights will be on, set to alternate colours of red, green, blue, and yellow, just like the coloured-glass originals. Of course, in the scene, the lights were initially off, but this would be rather boring. At random intervals, the lights will extinguish. After a short pause, the given word will be spelled out, one letter at a time. Following this, all of the lights will flicker, before going back to their steady-state colours. The words spelled out will be taken from a list within the code. Users will be able to add words to this as they like. You could also change the colours and timings too, but we’re going as close as practical to the original scene.

EARLY EXPERIMENTS

We ordered a set of the lights, two strings of fifty lights each. We need at least twenty-six letters, with one light between each. Twenty-six letters plus twenty-four intermediate lights means that one string of fifty would work, but only just. However, we needed to go around corners and drop down between lines, so we chose to play it safe and get one hundred lights. Ours and most others are powered by 5V DC, but there are 12V versions around. The literature, if you can call it that, with the lights claims that the strip draws three amperes. That seemed a bit much to us, given the size of the supplied wire. So, a string was set up, connected to the lab power supply at one end, and an Arduino Uno at the other. The Uno was powered through the lights.

After loading a generic code onto the Uno to light fifty LEDs white, the Uno was unplugged from the USB port and wired to the lights. All fifty lit up, but a multimeter check revealed that the Uno was receiving just 3.62V DC from the end of the lights. That’s too close to the dropout threshold of the Uno for comfort, and likely the LED driver ICs too. Because of this, we chose to feed the LED power rails from both ends. The power supply was mounted at one end of the total of one hundred LEDs, but power was also run to the other end, and to where the two strings meet in the middle. We also note that it was easy to mix up the Data In and Data Out wires if one string was the wrong way around.

We decided to power our build with a PC power supply. If the LED strips were going to be supplied with their rated 3A each, then a 5V 6A power supply with enough stability to run the Uno as well would be required. These are not so common on retail shelves, and quite expensive when you can find one. A PC power supply is cheaper and relatively easy to find. You can trim all the wires that are not red or black, with the exception of a green wire hidden there somewhere. This needs to be shorted to a black wire to turn the supply on. Of the remaining black wires, count enough to match each red wire, then cut the rest - they’re for the other colours. Ensure none of the trimmed wires can touch a wire of any other colour. We bundled ours into colours and added heatshrink to each. We then soldered our mass of black wires together, and our reds as well. For full details, see the Benchtop Power Supply project from Issue 07.

With a functioning, well-powered string set up, we set about building a wall.

The Build:

Building A Wall

The UNO and the LEDs are almost the entire electronics for this build.

Decide what your background will look like. It may be plain MDF or ply, or you may paint it. You could also apply wallpaper. For our wall, we used 3mm MDF sheets. We used two, cut to the size of the plastic posters we sourced. Each had its own frame of 19 x 42mm DAR (dressed all round) pine for rigidity, end-joined with 8G x 35mm chipboard screws.

Your situation may be different, so you may or may not need the frame. If you’re using a larger sheet, thicker material, or a different size without the plastic posters, you may not need any extra rigidity. Our MDF was attached to the frame using small flat-head nails.

Parts Required: we sourced from:
2 x Strings of 50 x WS2811 LEDsEbay
1 x Arduino Uno or Compatible BoardWorkshop supply *
PC Power Supply#Local PC repairer
6m Medium Duty Speaker WireWorkshop supply *
2 x MDF Sheets, 1800 x 900 x 3mmBunnings hardware
6 x DAR Pine, 1800 x 42 x 19mmLocal independent hardware
12 x Cup hooks, 15mmLocal independent hardware
3 x Jumper Wires for connecting to ArduinoWorkshop supply *
16 x Screws, 8G x 35mmLocal independent hardware
Packet of Small Flat-head NailsLocal independent hardware
Stranger Things Party Photo Backgroundwww.costumes.com.au

We sourced from local, independent suppliers where possible for this build.

* All of the parts taken from workshop supply are available from Jaycar, Altronics, and many from Core Electronics

# We actually used the Benchtop Power Supply from Issue 07 for this build, however, it contains a generic PC power supply.

You will also need consumables like tape and glue, depending on your build. See text for details.

We glued our posters down with PVA glue mixed around 60/40 with water. We brushed this on all over the first sheet of MDF, then laid the poster over it, and used a roller to get rid of air bubbles. This didn’t work out so well. The MDF absorbed quite a bit of moisture and not all of the glue was still sticky enough by the time the sheet went over it. Additionally, the plastic posters are so thin, like the semi-reusable grocery bags, that the plastic just folded under the roller instead of squeezing air bubbles ahead of it. With thicker plastic or real wallpaper, the roller idea works.

For the second sheet, we worked around a fifth of the sheet at a time. We brushed on the glue, then laid the poster on from the centre line, and smoothed it sideways to get most of the air out. This worked better, but when the glue had dried, we found that both posters were a little prone to peeling off the glue. Solvent-based glues may dissolve such thin plastic, so we had avoided contact glue. To solve the problem, clear packing tape was stuck to strategic locations: The corners, two points on the short side, and four points on the long side.

After this, the two framed sheets of poster-covered MDF were clamped together to form one wall. Of course, if you’re not using the posters, you’ll be creating your own wall process.

With the wall complete, it is time to mount the lights. We chose to mount the lights before soldering any wires, as the eventual location of the ends and middle would dictate how we wired our lights: If the middle was going to be on the face of the board, wire for the power connection at the join of the two strings would need to be run with the light string, and bound to the existing wiring for neatness. If the connection of the two strings was near or at the side of the wall, all of the power wiring can be concealed behind the panels.

Be sure to attach the 3D printed envelopes before mounting the LED string, as the weight will change how the string hangs. We started by screwing in 15mm cup hooks, which we had to drill pilot holes for. The beginning of the string of LEDs was cable tied to this, and the lights draped over the face of the wall. We did not try to make the mounting points even, because the lights in the film scene were not even and placed haphazardly all over the room. At the other side of the first run, we mounted another hook, cable-tied the string, then stood back.

This seemed to be working. We mounted another hook around 200mm below the previous one, and cable-tied the LEDs again. This is to give the impression that the drapes of lights are coming from much further away, from the sides of a full-length wall, in which case the gap between them would be bigger than simply using one hook.

We continued this idea until we reached the bottom of the wall. At this point, we took a tube of kid’s art paint, and began placing letters. Not liking the look of the first attempt, we went to wipe the paint off the plastic and start again.

The paint had dried quickly, and wet paper towel did not remove the paint. It turns out that we had used some good quality art paint. Not premium art store paint, but the best version available from an office supplier.

In the end, we held wet paper towel against the letters and let them soak. This worked, but not completely. So, if you want to experiment with letter placement, try a whiteboard marker. Even this does not come off completely, so just mark the points of the letters.

We also tried isopropyl alcohol to wipe out the letters, but that stripped the print from the plastic.

Using cheaper paint, we then painted on the letters where we wanted them. We used a screen shot from the film as a guide, but the scale of our build meant that compromises had to be made, and the placement is not exactly as in the film. Additionally, the letters in the film were brushed on with a thick brush rapidly dipped in a can of house paint by a very panicked character. As a result, the paint dripped, giving the letters a somewhat creepy look. You’ll have to thin your paint if you want to recreate this look. We didn’t try, as the handwriting (or brushing, as it were) used by us looked different from the film character’s anyway.

If you really want the exact shape of the film’s letters, printable replications can be found online. You could even have these cut from vinyl.

WIRING

Start by soldering the LED strings together into one long string. Ours came with a plug and socket, but yours may not. Take care to ensure that the Data In wire is connected to the Data Out wire where they join. Without a plug and socket, it’s easy to get a string the wrong way around and have two Data Outs or two Data Ins joined. One end of your new long string will have a Data In wire free. This is the end the Uno will connect to. Solder a jumper wire to it for connecting to the Uno’s GPIO, and heat shrink the joint.On the back of your wall, you need to mount the Uno and power supply. The power supply can be mounted with a makeshift bracket, the holder from the Slapshot project in Issue 22/23, or strong double-sided tape (the outdoor black variety). The Uno, if genuine, comes with a mounting plate that can be glued, screwed (be careful of protrusion), or taped on, then the Uno clips into it. If not, it can mount directly with double sided tape, or self-adhesive PCB stand-offs. If you really want to, you could use countersunk screws from the front to hold tapped PCB spacers, but that would be hard to hide.

Solder speaker wire to the power wires at both ends of the LED string. At the Uno end, also add jumper wires to power the Uno. Solder another piece of speaker wire to the point where the two LED strings meet. On ours, the plug and socket connection had two fly leads for additional power connection. See the Fritzing if this all makes no sense. Don’t forget to apply heatshrink. Solder all three pieces of speaker wire to the power supply connections, being careful of polarity. Because we’re re-using the Benchtop Power Supply from Issue 07, we just attached ours to banana plugs.

With the Uno wired in and the power supply connected, all that remains is to load the code onto the Uno (see 'The Code' section), disconnect the USB, plug an IEC lead into the power supply, and turn it on.

Some housekeeping might be useful, however. Some LEDs on our string were not sitting on the face of the wall. Some were on the sides between hooks, a couple were hanging off the side freely where our strings joined and we chose to not have the connection on the face of the wall, and still more were left over at the end. You could deactivate these in code, but we chose to tape them to the back of the wall with black cloth tape, so that the light was not visible. The end of the string could go elsewhere depending on your end-use. You could even add another string and run it around the room.

3D PRINTING

We wanted to make our LEDs look as much like those in the tv series as possible, without trying to source real glass and deal with the hazards of working with it. Glass globes are coloured, apparently painted inside like some party light globes, rather than being tinted glass. You could use transparent coloured filament if you wish, which would add to the authenticity.

The model for the globe was created for us by Wesley Heard. It was a Christmas present idea for a family member of his that spawned the idea for this project in the first place. Wesley printed his models in vase mode, which you can only print one object at a time with, time wasn't on our side so we chose standard mode to be able to print more than one. We printed our globes in Flashforge Natural filament on a Flashforge Guider II in two batches of forty-nine units, printed at 0.2mm, with a 0.3mm first layer.

We added a two-layer, 5mm brim, and printed with no solid upper or lower layers, 0% infill, and three shells. Our Guider has a 0.4mm nozzle fitted. You can go for two shells, or even one, but this is pushing the Guider’s limits and will depend on your printer. Additionally, the thinner the layers, the better your globes will look. We would have loved to have time to print at 0.1, or even 0.05, but alas, we did not have that time.

Once printed, the globes will need to be cleaned up where they separate from the brim, and should interference fit (also known as friction fit) onto the LED housings. If not, a drop of PVA should help.

Wesley's original globe design printed at layer heights of 0.08mm in Vase mode.

THE CODE

To write the code for this project, we needed to define a few basic design criteria. These rules set the parameters for the code, and provide a reference to come back to if things don’t work out or head on a tangent.

For our project, we wanted the LEDs to spend most of their time lit up in either Red, Blue, Green or Yellow, alternating like the strings of fixed-colour Christmas lights that were common until being taken over by modern colour-changing LEDs. The fixed, basic colours combine with the replicated large glass envelope to help set the retro vibe. We wanted the lights to be in this state for a large percentage of the time, but still needed to be able to change them on demand.

At random intervals between thirty seconds and fifteen minutes, we wanted the lights to display a random message from a bank of six preset phrases. We opted for “Run”; “I’m right here”; “It’s coming”; “DIYODE”; “Eleven”; and “Upside Down”. Of course, this is a departure from the film. In it, “Right Here” and “Run” are all that is used. However, our build needed to be more engaging, and would be likely used in situations where not everyone would be intimately familiar with the film. As such, we expanded by using references to the film, and changing the syntax where needed. Naturally, we slipped DIYODE in.

The lights spell out a word or phrase by illuminating red. We wanted to use the individual LED’s set colour, but that proved to be a huge amount of work to map each LED to its colour while spelling the words, and there simply wasn’t time. Following the spelling out of a word, the lights return to their set colours, but they flicker and flash at random brightnesses, in the way many films depict a power surge. The lights then return to their set-colour, steady-brightness state and the random timer starts once again.

With these design parameters clearly defined, our first requirement was to ascertain where each letter was in relation to the LED string, so that we can provide each letter a designated LED. To enable this, we created a table in Google Sheets. The numbers start from 0 because that is how the LED control protocol addresses the LEDs. Remember this when you are physically counting them along the string. We coloured the cells to reflect the required LED colour for steady-state when a word is not being spelled.

To use the table, first mount your LED strings to the project, attach the 3D printed envelopes, and then paint your letters. If you do this in any other order, you risk the strings changing shape and position when the weight of the envelopes is added. Now count from the LED closest to the Uno. We marked a - if an LED was behind the board and not visible, a tick if it was visible but not assigned a letter, and wrote the letter for the relevant LEDs. We did this in pen so it’s not on the screenshot.

Using the table, we can see that the letter ‘A’ corresponds to the 73rd LED in the string, remembering to include ‘0’, and thus if we want to illuminate the letter ‘A’, we just need to tell LED 73 to illuminate.

NOTE: This is the allocations for our build, but every build will be different. It depends on the width of your build, the way you hang the strings, and exactly where you paint your letters. This is why we recommend building first, then using the table to allocate your LEDs. You could also write a program that illuminates one LED at a time, one after another, a couple of seconds apart, from 0 to 99. You can follow along with the paper or have the code write the LED number to the serial monitor. This will help you recover if you lose count.

Before you start, install FastLED.h through library manager.

In order to illuminate the letters of the phrases, we opted to store the integers that denote the LED into an array for each phrase. So, to make the word ‘RUN’, we need an array holding the values for R=37, U=41, N=61.

int Run[3] = {37, 41, 61}; // RUN

This way, when we want to illuminate these LEDs, all we need to do is check if the current value of our loop’s counter is equal to the first letter of the array. If it is, we illuminate the LED and reset the loop counter which starts the loop from 0 again, but looks at the second element in the array. In this case, that is ‘U’. We repeat this process a number of times equal to the number of letters in the array. In the case of ‘Run’, it repeats three times.

void RUN() { // run sequence 1
int loops = 3; // number of letters in phrase // = number of loops
for (int i = 0; i < NUM_LEDS; i++) {
  if (i == Run[j] && j < loops ) {
    FastLED.clear();
    leds[i] = CRGB (255, 0, 0);
    FastLED.show();
    i = 0;
    j++;
    delay(letterDelay);
    }
  }
  sequence = 7;
}

Admittedly, it isn’t great that we repeat the same process for each of the phrase functions. It would have been many times more efficient to have one function, just changing the input variables such as the number of loops and the array name. However, there just wasn’t time to engineer this before going to print. Instead, we have essentially the same function repeated for all of the phrases, set into a switch case format.

The next step in the process was to set the default function, which is having all the LEDs set to the desired colours. Since the colours follow a specific pattern, it was a simple case of repeating a process of assigning each LED its respective colour using the RGB scale. The format looks like this:

  leds[i] = CRGB (R, G, B);

Where the value of R, G, and B relate to the value between 0 and 255 of each primary colour of Red, Green or Blue. Note that primary colours when dealing with emitted light substitute Green for Yellow, which is the traditional primary colour counterpart to red and blue.

Finally, to set the random countdown/ delay interval, we used the ‘minDelay’ and ‘maxDelay’ variables in milliseconds.

void default() { // sequence 8
  FastLED.clear();
  for (int i = 0; i < 100; i = (i + 4)) {
    leds[i] = CRGB (255, 0, 0);
    FastLED.show();
  }
  for (int i = 3; i < 100; i = (i + 4)) {
    leds[i] = CRGB (0, 255, 0);
    FastLED.show();
  }
  for (int i = 1; i < 100; i = (i + 4)) {
    leds[i] = CRGB (0, 0, 255);
    FastLED.show();
  }
  for (int i = 2; i < 100; i = (i + 4)) {
    leds[i] = CRGB (120, 120, 0);  
    FastLED.show();
  }
  delay(random(minDelay,maxDelay));
  sequence = random(0,7);
}

This is not the full code. We have only highlighted some of the code to show you how the different functions work. The full code is available on our website.

TESTING AND TROUBLESHOOTING

With so few connections, there isn’t much troubleshooting to do. Power up your creation, and see that the LED string lights. If it does not, first check the power supply. Make sure the polarity is correct going to the LEDs, and the Uno. Check for light on the Uno board as well. If power checks out, look at the Uno connections. The data wire may be in the wrong I/O socket. Failing that, make sure that you have in fact connected a Data in wire from the LED string, not a Data Out wire from the wrong end.

WHERE TO FROM HERE?

The most obvious expansion is to add words or phrases to the list within the code. These could reference the film, or be your own. You could also add more LED strings and more power connections, up to the limit of your power supply, and run them around the room. With Season Four of the series on the way, we have plans to have a lot of fun elaborating on this project, but we won’t say too much until we have it completely working! We don’t want to disappoint you if a small, unforeseen detail stops our ideas from working out. Let’s just say that we’re working on making this project more interactive.