Persistence of Vision Christmas Ornament

by seanhodgins in Circuits > Electronics

9907 Views, 142 Favorites, 0 Comments

Persistence of Vision Christmas Ornament

IMG_1067-Edit-Edit-2.jpg

As you can tell from my list of instructables, each year I try to come up with a new and interesting Electronic Christmas Ornament. They are usually loud, heavy, and something generally too big for the average tree, with that in mind I had the perfect idea. A loud, fast spinning, bright, persistence of vision LED display the size of an ornament. That way you could make it look like any ornament you want. Or put cool images on it. I had the idea, now I just had to make it.

Watch the Video!

Its long, its detailed, it fills in a lot of the stuff I will probably forget here. I figure if you're interested in building one, its a great place to start!

Gather the Parts!

Parts:

  • Slip Ring (Digikey or Adafruit)
  • LED Strip (Digikey or Adafruit)
  • DC Motor 10:1 Gear Ratio (Pololu)
  • Magnetic Motor Encoder (Pololu)
  • Circuit Board (Kicad Files)
  • Circuit Board BOM (FindChips or GitHub)
  • Black PLA Material
  • Rubber Oring Kit (Amazon)
  • Aluminum (Optional)
  • Wires
  • M3 and M2 Threaded Insert (McMaster Carr)
  • M3 x 6mm Screws
  • Strong Double Sided Tape

Tools:

  • 3D Printer
  • Reflow Oven
  • Screwdrivers
  • Soldering Iron
  • JST Wire Crimp (Optional)

The Design

fusion2.jpg
fusion1.jpg

I've already done this part for you, so you can just download the STL files and go with it.

The idea of this design is to have a hollow ring that is nearly invisible(you'll see why later), and then mount the LED strip to that ring. It will reduce the weight and also cause a cool effect while its spinning. The ring will be coupled with the DC motor via a rubber oring. I suggest getting an oring kit to have a number of different sizes so you can find one that works well for you. I did this design in Fusion 360.

The device at the focal point of this design is a slip ring. The slip ring allows the wires to pass through and continuously spin without them ever getting tangle up. They're pretty interesting devices, and I have wanted to use one in a project for some time.

Order the PCBs

pcb2.jpg
pcb1.jpg

While I can provide a link to the PCBs where I ordered them. I strongly encourage you to open and view the KiCad files for yourself, and make your own Gerbers. Do your own checks of the PCB to make sure there are no issues.

Find them on the GitHub.

Start the 3D Prints

3dprint.jpg

At this point, I like to start the 3D prints so that they can print while I plan other stuff out. While the parts are printing you can move on to the next step. Or just watch them print, if you're one of those "watch paint dry" type of people. No judgement here!

Populate the PCBs

soldering.gif
IMG_1099.jpg

There is some surface mount soldering. As i've mentioned in my other instructables, surface mount soldering is not that big of a deal, and its actually a pretty small leap to get into it. Requires a few more tools like a cheap toaster oven and some tweezers. But in the end it will save you lots of time! Much faster than hand soldering.

Note* - If you don't want to solder a small APA102 on the circuit board, you can bypass it(on the board), but they strip may behave differently.

Machine the Pulleys (Optional)

machining.jpg

I like to look for reasons to use my lathe and milling machine. Both of these machines are works in progress, but they work fine for these little projects that don't take a lot of precision. I made the two pulleys for the belt drive system thinking it would make it a little smoother. Turns out it probably wasn't necessary (feel free to just 3D print them), however I love the look of my own machined parts, so totally worth it for me.

Wire the Slip Ring

IMG_1114.jpg
IMG_1110.jpg

Using the slip ring, we will only need 4 of the 6 wires available. Unfortunately you will have to cut two of the wires short or they will be in the way, so they won't be much use if you want to use this in a different project. The wires need to be soldered on the LED strip after it has been installed. And once they have been soldered, you cant really remove a few components.

On the stationary part of the slip ring I crimped on a JST connector. If you don't have this crimping tool you can just solder them directly to a premade wire that has been cut in half. Refer to the schematic for proper wire position. 5V -> Data -> CLK -> GND.

Make sure you put on the appropriate oring before soldering!

Stick on the LED Strip

mount LED.jpg

Use double sided tape to stick the LED strip to the ring. Make sure you attach the LEDs to the thin side, the thick side is for balancing the ring.

Install Motor, Slip Ring, and Threaded Inserts

IMG_1108.jpg
IMG_1115.jpg
IMG_1106.jpg

If your 3D prints are done, first thing to do is install threaded inserts. These are common to a lot of my projects and super useful to have around so you may find yourself buying them in bulk. You don't need a fancy tool, but I made my own to fit my Hakko soldering iron (video here).

You can also screw in the slip ring and motor. Pretty straight forward.

One of the changes I may make in V2, is to get a motor with a right angle adapter on it. This would save a lot of space.

Assembled?

IMG_1094.jpg
IMG_1097.jpg
IMG_1098.jpg

Assembled.

Time to Program!

As with most of my projects, the programs aren't very polished. They're usually just stepping stones for you to use to get the device working.

I have a couple of demos, one of them will just display a bunch of images of your choosing. The other you can connect the ESP32 to your network, from there you can access a web page and control which number of the image you want to show on the device.

Strongly encourage watching the video if you have questions about these.

Make Your Own Images!

sh_smol.jpg

Again this is a step that is best shown on the video.

The ornament firmware is setup to display 60x17 images (one of the LEDs is at the top and doesn't spin so its really 60x16). So in order to make an RGB matrix of an image you must first make a 60x17 image. Then I have a python script that will convert it into something readable in the Arduino Code. Once made you can copy and paste the matrix into your code and give it a unique name.

Interact With the Internet!

upvote.gif

Now you can write your own firmware(or programs to interact with your firmware) and do different things on your ornament. I setup a live stream and had it display an upvote any time someone upvoted this thread! That was fun. Check out the live stream.

Have fun with your new ornament, but as with most electronics and DIY things, don't leave them on while not attending them, you have been warned.

Enjoy Your New Ornament.

IMG_1067-Edit.jpg

Just don't leave it plugged in while you're not home. :)

Support Future Projects

SH_Grow.gif
downloads_logomark_color_on_white@2x.png
youtube.bmp

Thanks to my Patrons I'm able to make these projects and put out the information for free. If you think I deserve it, please consider becoming a patron.

SeanHodgins on Patreon

It also helps if you can like and share my content. Please subscribe to my Youtube channel and click the notifications so you know exactly when a project is released.

Click here to Subscribe!