Introduction: App-controlled Alphabet Board Inspired by Stranger Things
This all began a few weeks ago when trying to figure out what to get my nine year old niece for Christmas. My brother finally informed me that she is a big fan of Stranger Things. I instantly knew what I wanted to get her, a something something that hangs on the wall with Christmas lights and letters that she can make spell out random sentences. Wouldn't you know it, absolutely nobody makes such a thing... I found countless instances of walls with painted letters and always-on Christmas lights. I found many miniature versions of the same. I found just a couple projects using microcontrollers (Arduinos) and addressable LEDs to actually spell out phrases, but those all seemed to rely on hard-coded phrases in the micro's software. Nothing quite like what I had in my head. So the rudLights Alphabet Board project was born.
The rudLights Alphabet Board, or rudLights for short, also uses an Arduino and addressable LEDs to display sentences on a string of "Christmas lights." However, it also makes use of a cheap Bluetooth receiver and a custom Android app which the user, my niece, can use to display any sentence she wants to send it from her tablet (an Amazon Fire in this case).
Read on for the gripping details of how I made this thing as I now make a second one for my own home. I didn't get a whole lot of photos or documentation as I made the original, plus I now kinda want one in my own living room. Follow along if you want to build one for yourself. By the end of this Instructable the necessary code will be available under the most permissive license I can make it, probably GPLv3 it seems.
Step 1: Necessary Parts
The parts list for rudLights is pretty straightforward. I had to buy LEDs, I needed 26 but only had five on hand. Fortunately I found a 100 pack of the WS2812B PCBs on Amazon for only fifteen bucks. The most difficult thing to source was something to pass for the ugly wallpaper from the show. My son and I finally found something in the scrapbooking paper section of JoAnn's that works fairly well. Here's the list of stuff I used and what it's for. When possible I'll link to where to purchase. I will not be using any affiliate links, though they are Amazon Smile links when possible.
Needful Things
- 26+ addressable LEDs (aka NeoPixels) - 100 for $15 at Amazon (I do not know why they're under Musical Instruments).
- Arduino Pro Mini - knockoffs at Amazon or legit from SparkFun There is no reason you can't use a full-size Arduino Uno if you have the space.
- HC-05 Bluetooth module - $8 at Amazon I'd imagine an HC-06 module would work too, but no promises.
- 5VDC 2A A/C power adapter - $7.49 at Amazon
- Document frame - 8.5 x 11 inch frame, I found one at JoAnn's for about $10. You can use any size frame you want, I chose one the same size as the paper my printer eats.
- Ugly wallpaper - Actually a 12x12" scrapbooking paper called "Tan Swirly Flowers" I found at JoAnn Fabric & Craft Store. I actually bought four so I could screw up a couple times. Behold its "beauty" here (click "Yes I'm a retailer" to actually view the page) YMMV
- Two sheets of vellum - Also from JoAnn's, used as diffusers to prevent blindness when observing the LEDs.
- 1/8" fiber board, 8.5x11" - 24x48" sheet is $5 at Home Depot
The Basics
- Voltage divider resistors - 1k7 and 3k3 (or 1k and 2k, or even 2k2 and 3k3) to level shift between the 5v Arduino TX pin and the 3.3v BT module's RX pin.
- 220-470 Ohm resistor - Goes on the data line between the Arduino and the first WS2812B LED.
- 4 16V 1000µF capacitors - Phenomenal cosmic power. $11 pack o' caps at Amazon
- 20-22g stranded wire in 3 colors - Power, Ground, and Data along the strand of LEDs.
- Small prototyping PCB - I used one to build a central power distribution thingie.
- Various pieces heat-shrink tubing - To cover up the resistors soldered into the connection cables. Five bucks at Harbor Freight.
Tools
- Wire cutters and strippers
- Soldering iron and solder
- Breadboard and hookup wire
- Sharp hobby knife (X-Acto)
- Cutting board
- Utility knife
- Straightedge or square
- Pushpin, awl, center punch, or other sharp pokey thing
- 5/16" drill and something to spin it (a drill motor, drill press, eggbeater...)
- File or sandpaper
- Wood glue (or white glue)
- Hot glue gun and sticks
Optional
- Raspberry Pi Zero W - I'll be using this on my own rudLights Alphabet Board instead of the HC-05 because I'm all out of HC-05 Bluetooth modules. You'll need an SD card for it too.
- 1/2" x 3/4" x 48" pine stick - Used to build an extension to the back of the document frame.
- Paint to match your frame and brush(es) - Used to disguise the above extension behind the frame. I used black acrylic craft paint and a foam brush.
- Shadow box - Instead of the document frame, removes the need for the above extension stick.
- 2.1mm power jack - $6 for a 5-pack at Amazon. You could also just cut the connector off the power supply and solder it directly to the project.
- 3.3V Arduino and power supply if you want to go lower power. The WS2812B LEDs should work at 3.3v. This would remove the need for a voltage divider. Again, no promises.
Step 2: The Aesthetic Part
I thought I could find a screengrab or something of the show to have printed as a photo to use in the frame. Try as I might I couldn't find quite the image I was looking for. This is what prompted the search that landed us the ugly scrapbooking paper. I had my son draw up an alphabet with a string of light bulbs, and he cut the 12x12" paper down to 8.5x11" so it would fit in the printer. Then I simply printed the alphabet image directly onto the ugly paper and had kiddo cut out all the light bulbs with an X-Acto knife.
Should you wish to go the same route, please feel free to save the image above, download the artwork from my server, or you can get it from the GitHub repository.
Using a normal piece of printer paper, or even better, the glass from your picture frame, lay out a section of the 12x12" paper to make an 8.5x11" sheet on which to print the alphabet image. The paper I used has some coloration around the edges to make it look worn, I guess. As such I ended up laying out a section out of the middle of the paper. I then just used a utility knife to make the cuts. Make sure to cut on a sacrificial surface, unless you are the lucky owner of a paper cutter. After I cut the paper using a piece of printer paper as a guide I discovered that my frame is just a wee bit smaller than 8.5x11 inches... To "fix" it I just laid the glass on my ugly wallpaper and trimmed about 1/16" off two sides with a hobby knife.
Now it's time to print your rudLights strand onto the ugly wallpaper. You'll want to make sure you tell your printer to print in landscape orientation, with margins set to minimum. The image has colored bulbs, but since they're going to be cut out anyway you can print it in black and white with no problem. I highly suggest printing it off on normal paper at least once to make sure the settings make it come out the way you want it to. Now you can load your custom-cut wallpaper into your printer and print out the piece to be used in the project. Do not cut the bulbs out quite yet though, we'll do that at the end of the next step.
Go ahead and frame up the newly-printed wallpaper and make sure everything is indeed lined up the way it's supposed to be.
Step 3: Preparing the Board
The 1/8" fiberboard (hardboard, masonite, whatever you want to call it) is two feet by four feet as it comes from the store. Clearly we need to bring it down in size somewhat. The nice part of working with this kind of board is that it's kind of like thick paper and can be cut fairly easily with a utility knife. Just measure the glass from your frame and mark that same measurement out on the board with a pencil. Then you can use your straightedge or square as a fence for the knife. Take several passes with the knife, take your time, there's no rush. Unless you have to finish this by Christmas and you didn't even know you needed to make it until about the 16th of December... Still, your fingers are worth more than the project, so be careful!
Once you've got the board cut out, break the edges with your file or sandpaper so it's not sharp. Seriously, this stuff gives the nastiest papercuts... Then test fit it in your frame and file/sand the edges as needed to fit smoothly with just the right amount of snug. Again, take your time and fit it right the first time. It's pretty difficult to put wood product back on a piece that's been cut too small.
Depending on the manufacturing quality of the frame you got you may want to try just turning the board around and seeing if it fits the other way. My frame wasn't actually square so this trick worked with minimal filing. If you find yours behaving the same way, make sure to mark which end is up on both pieces, it will matter when it comes time to lay out and drill the light holes.
Now you want to take the wallpaper you printed in the last step and lay it on top of your fiberboard piece and square it all up. It should be right about the same size. Once it's lined up, use your sharp pokey thing to pierce through the center(-ish) of each bulb and put a divot into the fiberboard. That divot will be the mark at which you drill 5/16" holes in the board for the LEDs to shine through. If you have already cut the light bulbs out of the wallpaper you can approximate the drill locations or use one of the scrap test pieces you printed. I've found it a bit easier to eyeball drill locations on this material by drawing a little circle around each divot with a pencil.
Time to make some chips. Use whatever drill-spinning device you have and a 5/16" drill to put 26 holes into the board. My baby drill press wouldn't quite hit the center hole... so I had to use another spinney device. You're right, my little eggbeater won't hold a 5/16" drill, but it will chuck up a 9/32" just fine ;-) The new holes will be crunchy so take your file or sandpaper and smooth their edges off as well. The LED should just fit through the hole so the PCB lays flat on the back of the board.
If you hadn't already cut the bulbs out, now is the time. Break out the X-Acto knife and a cutting board and go to town. My son says that cutting an X shape into each bulb and then trimming out the resulting triangular pieces worked fairly well.
Step 4: Put Some Sparkles in It
It's time to start the LED end of this project. Snap off 26 of the WS2812Bs and line them up on the board. You want to make sure they all lay flat correctly. This is also a good time to test them all individually before soldering a whole bunch to find out there's one wonky one in there. I've attached a simple Arduino sketch that just spits out random colors in WS2812-speak. You can use a servo cable, or ribbon cable, or whatever jumper wires you might have around to whip up a test cable. Just stick a 3-pin bit of pin header into the cable and you can hold that on the "in" pads of the LEDs' PCBs. Each LED should light right up, and as long as you're only testing one at a time the Arduino's power supply can easily handle the task.
Once you're sure all the LEDs are in good working order you can start making wires. I just used some old 20 gauge stranded hookup wire I got when Radio Shack was still around. You'll need to make 23 each of red, black, and green, or whatever colors you want to use for power, ground, and data. I don't have a dimension to provide for the length of the wires. I just held a wire piece between a couple LEDs and started cutting bunch to about that length. There are a couple in the center that seem to be a bit longer than the others, so keep an eye out for that.
After your wires are cut go ahead and strip a bit from each end, just enough to solder onto the pads of the PCBs. We'll not be connecting H to I, or Q to R just yet. Tin the ends of the wires, and tin the pads on the LEDs. Then prepare for a tedious process of singed fingertips and solder the wires onto the PCBs. Repeat what seems like eleventy thousand times, even though it's more like 155 in the end.
After you've got all three rows are soldered, you'll put a long data wire from H to I, then another from Q to R. Then each row will get power and ground wires directly from the power distribution board/plug/thing, so A, I, and R all have their own power wires. See the picture and schematic and it'll all make sense. You'll also put one of the 1000μF caps on the other end of each line, at H, Q, and Z, to keep a power reserve for each strand. (I can't promise it's necessary, but it sure doesn't hurt anything.) Finally you'll make the jumper wire from A's data in pad which will go to the Arduino. Just take a normal jumper and cut it in the middle, then solder R1, the 220 to 470 Ohm resistor, inline and cover with heat shrink. Solder one end to the DIN pad on the first LED, and the other end goes to the Arduino's pin 6 (it doesn't have to be 6, it can be any pin really).
Once you've got all your LEDs soldered together, and the power wires attached at one end of each row, and capacitors at the other, it's time to go ahead and hot glue everything down to the board. Take your time, don't glue your fingers to the board. I used like three or four glue sticks to make sure everything stays where I put it, including building up a little bit around the capacitors and power wires to make strain reliefs.
You'll see two clearly different boards up in the photos. One has the Arduino Pro Mini and the HC-05 Bluetooth module, the other has, well, nothing yet. The one with the Pro Mini is the one that went to my niece that I didn't get enough build pictures of. It's also the one depicted in the attached schematic. The voltage divider that drops the Arduino's 5v TX to the HC-05's 3.3v RX is just built into the cable that connects the two. You can just clip that wire and solder R2, the 1k7 resistor, inline. Then solder R3, the 3k3 resistor, from the HC-05 end of R2 to a wire going to ground. Or you can build that onto a protoboard if you'd rather.
The other board in the photos is mine and will be using a Raspberry Pi Zero W in place of the HC-05. The Arduino one has a power distribution board I knocked together on a protoboard. It's just a couple rows of headers and another 1000µF capacitor soldered up to the power jack cables. I'm fresh out of power cable jacks like that for the Pi version so I just got the kind with screw terminals on the end and screwed all the power leads into that. I'll probably end up building something a bit neater, and I'll certainly end up adding the 1000µF cap as well.
Attachments
Step 5: Give It Some Smarts - the Arduino Way
Now the part we've all been waiting for, making it actually do something. Fortunately for you I've already spent a few late nights writing the code for this project. All you need to do is download the zip file, extract it to your computer somewhere, open it up in the Arduino IDE, and upload it to your Arduino. Fortunately for me I'm nocturnal, late nights are not a large deal (it's 4 a.m. as I write this).
The Arduino end of this is actually six files in a folder named "rudLightsArduino." The zip file containing them is attached to this step. Alternatively you can get it from the GitHub repository. However you decide to acquire the files, once they're on your computer open up rudLightsArduino.ino in the Arduino IDE. That should load the five other files as tabs in the IDE as well. If you connected your WS2812B LED data pin to an Arduino pin other than pin 6 you'll want to find the line "#define LED_PIN 6" and change the 6 to the pin you used.
Then you can switch to the tab labelled "daVars.h" and find the part for the hard-coded strings that are displayed on the board. These are the lines beginning with "const char string_X[] PROGMEM blah blah" near the top of the file. Change these as desired, just make sure they're all CAPs and contain no special characters (like period, comma, etc...) Spaces are just fine.
You can add more lines by copying an existing line, paste it below the others, and change the number in the "string_X[]" part. Just increment the number each time. You can theoretically save as many lines as will fit into the Arduino's flash storage. The magic of the PROGMEM part means that these strings are not all kept in RAM, they're read directly out of the flash memory instead. I'll not get into further detail, but you can learn more on the Arduino reference page. When you add or remove lines there you'll have to edit a couple other parts too. Find the next section with the "ref table for the above strings" and add/remove "string_X" as needed from in between the {curly braces}. Finally, find the line "int string_count = X" and change the number to be the amount of strings from the above table. This number is the actual count, i.e. not starting at zero. If there are seven "const char string_X" lines then put a 7 here.
Now compile and upload the code to your Arduino. You'll need to disconnect the HC-05 in order to do so as the Bluetooth module uses the same TX/RX lines as the computer->Arduino programming device. After the code is uploaded, disconnect the 'duino from the computer and reconnect your BT module.
Now you can finally assemble the stack that goes in the frame. Glass first, then the ugly wallpaper with the lights cut out. Next come the two sheets of vellum as a diffuser. I ended up adding another layer of diffusion by sticking a sheet of normal printer paper in as well. At last you can put the fiberboard full of goodies into the frame, making sure that it's oriented correctly to the wallpaper sheet.
What comes next depends on what you used for a frame, and how things actually stack up in said frame. You can see in the photo of the finished one that I had to build an extension onto the frame to contain the added height of everything. This extension was just 1/2 by 3/4 pine strip, mitered at the corners, and glued onto the back of the frame with wood glue. I then used some small triangle-shaped pieces of fiberboard to wedge into the slot inside the frame that held in the original backing. To those I glued some standoff pieces of pine to build them out to the back edge of the frame extension. I then drilled some pilot holes and screwed the frame's original backing to the standoffs. Finally I pilot-drilled and screwed a length of leftover hookup wire to the frame extension to act as a hanger. If you used a shadow box or a thicker frame you may not need to go through all this extension fun.
At long last, flip it over and plug in the AC adapter and watch the light show begin. When my niece first plugged hers in it blinked out "Merry Christmas." Yours will spell whatever string you put in "const char string_0[]" or "RUDLIGHTS ALPHABET BOARD" if you didn't change the code yet.
If you skipped the HC-05 Bluetooth module part of this, congratulations, you're finished! I hope you get a lot of mileage out of your communications with the Upside Down :-)
If you went for the Bluetooth module, head on to the next step for, what I believe is, the cool part, and why I embarked on this project instead of just buying my niece another doll.
Attachments
Step 6: The App(!)
Yep, you read that right. There is a companion Android app for rudLights that allows you to display, and even save, custom messages on your board. Last Christmas we gave my niece an Amazon Fire tablet. So one of the key points of this project was to have a way for her to use that tablet to interact with the rudLights Alphabet Board. I ended up at Thunkable which provided a nice, simple way of building an app for a guy that's never made an Android app before. I managed to put together something that did everything I needed in just a few days. You don't have to do that though, you can just download the app from either my server or the GitHub repository. From either location you can also download the app's project .aia file which you can use at Thunkable to make your own version of the rudLights App. Feel free to add or remove anything, relabel, change images, what have you. It's available under the GPLv3 just like the Arduino end of things.
You can visit the rudLights webpage for details on installing and setting up the app, as well has how to use it once it's installed.
Step 7: The End?
Well, there you have it, the rudLights Alphabet Board. As my Pi-powered version is still being programmed I haven't added a step or support docs for that yet. I will update this Instructable as soon as I have something working. If you have any questions or comments, if anything is unclear, just hit me up in the comments below or send a Message via my profile page. I'm happy to answer.
Thanks for reading, enjoy!
Edited 20180113 - Changed link to HC-05 Bluetooth module as originally linked item is out of stock