Hanging LED Spiral Light









My home has a large front window that I wanted to fill with something special, so I came up with this large hanging LED spiral. The spiral is filled with WS2812B "Neopixel" addressable LEDs, forming 90 individual lit "segments". Each segment is dual sided, so the light is visible on both the front and back. This is perfect for my window, as I can see the spiral's effects while also sharing them with the outside world. However, the spiral should also work well when hung on a wall, with the rear lights creating a nice back-spill aurora.
All the spiral's lighting effects were created using my Pixel Spork Arduino Library. Checkout the video above to see the spiral in action! I am pretty happy with how it turned out. :)
The spiral is about 70cm in diameter and about 3.5cm thick. It is almost entirely 3D printed, using paper panels for light diffusion. Asides from an external power brick, all the electronics are hidden neatly within the segments. It can be hung with power supplied at the top or bottom. I added a crystal to the spiral's center to act as a sun-catcher, but it should be easy enough to add whatever you want there, such as more LEDs (see the "Customizing the Center" step below).
The spiral is lit using WS2812B addressable LEDs in a "pebble" style string (linked in the Supplies below). The strings are basically just common WS2812B 5050 LEDs coated in translucent resin and spaced apart, so they are very compact and easy to work with (much more so than traditional LED strips).
If you've not worked with WS2812 LEDs before you may want to familiarize yourself using the Adafruit Neopixel Uber Guide, just to get an overview of how they work.
The resin coating makes the LEDs more omnidirectional, but does limit their brightness. Combine this with the relatively large size of each segment means the spiral is not super bright; it's more of a light accent that a light source. It works great at night, or in darker rooms, but it will not hold up in bright rooms or direct sunlight. For ease of use, the spiral include an adjustable light sensor, so you can set the LEDs to trigger at an appropriate light level.
Overall, the spiral's build is pretty straight forward, being more labor intensive than anything else -- a lot of printing, cutting, and wire routing! There is a small amount of soldering, including a bit of basic SMD work, all of which can be done comfortable by hand. Other than that, I'd say the spiral is pretty beginner friendly.
For reference, you can find all the project's files, code, etc at its Github Repo.
Before starting the project, please read through the whole Instructable so you can plan your approach.
As a final word before diving in, if you have any questions at any point, please leave a comment and I'll be happy to help!
Supplies
Custom PCB's:
To fit all the electronics within the spiral, I had to use a couple of custom PCB's. While you could in theory wire everything together without them, the PCB's keep everything compact enough to fit within the spiral.
You'll need two PCB's for this project:
- A breakout board for the Wemos D1 Mini micro-controller, found here (click the three-dots in the upper left to download).
- A mounting board for the photoreistor, found here (click the three-dots in the upper left to download).
You'll need one copy of each board.
Unless you can make PCB's locally, you'll have to order them from a prototype PCB manufacturer. If you've never purchased a custom PCB before, it's very straight forward and inexpensive; most companies have an automated quoting system that accept zipped Gerber files (linked above). I can recommend JLC PCB, Seeedstudio, AllPCB, or OSH Park, although I'm sure most others will work as well. All the default board specs from these manufactures will work fine. For more info about ordering PCBs, you can checkout Step 13 of my Custom PCB Design Instructable.
Electronic Parts:
- One Wemos D1 Mini V3 micro-controller: link
- One 1000uf,10V electrolytic capacitor: link
- One 74AHCT125N logic level converter. link
- One 0805 1Kohm SMD resistor: link
- One 10K SMD trim potentiometer: link
- One 5mm diameter 5516 photoresistor: link
- One 5.5mm x 2.1mm DC jack socket: link
- Two meters of 5V WS2812B "pebble" string, 10cm spacing: link. You need 180 LEDs in total, if the link is dead, google "WS2812B pebble 5V" and match them to the build images.
- One pair (male and female) of 3 pin JST-SM connectors: link. These should come with the LED string, they are also optional, as you could opt to direct wire the LEDs.
- 22Ga stranded wire, preferably in 3 colors.
- Heat shrink, ~3mm diameter.
- One 5V 10A power supply with a 5.5mm x 2.1mm DC jack: link
Hardware Parts:
- Six 10mm M2 machine screws.
- One M2 nut.
- Two to four 10mm M3 machine screws, for the D ring hooks below.
- Two to four leather D ring hooks: link. These are for hanging spiral. The listing won't specify, but they should have a M3 screw thread inside. If the link is dead, search for "leather D ring hooks" and try to match those in the build images. You can get them in a variety of styles and colors.
- If you can't find they D ring hooks above, you can use M4 eye bolts and nuts: link, which should be commonly available, if a bit ugly imo.
- Chain/rope and hook for hanging. The length and style are up to your own personal situation. The spiral weighs ~4lbs (2kg), so most common light metal chains should work.
Other Parts:
- At least 20 sheets of white resume paper for light diffusion. I don't have the exact brand, but mine is 0.2mm thick, which is what you should aim for. You want paper that is somewhere in between an index card and common printer paper in stiffness.
- One 76mm diameter round sun-catcher prism/crystal: link. This is for the center of the spiral. You can also opt put something else in the center, but you'll have to design your own mount. (see the "Customizing the Center" step)
- Krylon UV Clear Coat spray: link. For protecting the paper panels. Only needed if the spiral will be exposed to direct sunlight.
Tools Required:
- 3D printer + a little under two 1kg rolls of filament, preferably ABS.
- Acetone, if using ABS filament.
- If not using ABS filament: a strong glue with a short setting time, possibly Weld-On 16, or 5 to 15 min epoxy. I can't say for certain, as used acetone to chemically weld the spiral's segments together. You can check out this instructable for more on gluing PLA: link.
- Common hand tools -- scissors, screwdriver, wire cutters and strippers, etc.
- Soldering iron + solder.
- Hot glue.
- Some small clamps, or binder clips in a few sizes, for holding segments while gluing.
- Right angle ratcheting screwdriver: link. Not totally needed, but is handy for tightening the D ring hanging hooks. It is also just a useful tool to have in general.
3D Printing

I designed the spiral to be almost entirely 3D printed using Autodesk's Fusion 360 CAD software, so before you can start putting the spiral together, you need to print all the segments and also cutout all the paper diffusion panels.
3D Printing:
The spiral has 10 "arms" composed of 9 segments each, so you'll need to 3D print 10 of each segment for a total of 90 segments. While the inner segments are small enough that you can probably print most of them at once, the outer segments are quite large and may only allow printing 1 or 2 at a time. Overall the print time will be quite long -- it took me about a month to print all the parts, although I only print during the day and my printer is quite slow. Likewise, in total, the segments will need a bit less than 2kg of filament (2 standard rolls).
Important: the outer most layer of segments is different than the others. While it still has 10 total segments, it is composed to 3 segment types: a control segment, hook segments, and normal segments. The control segment is for the electronics; print 1. The hook segments are for hanging the spiral. I recommend printing 5, so that you can have multiple hanging points on the top and bottom of the spiral. The remaining 4 segments can just be normal.
You'll also need to print a few extra parts, like the center ring, programming hatch, etc.
For more details, refer to the Fusion 360 assembly drawing image in this step, or found here.
You can find all the print files at the Github repo here.
You may want to vary the segment print colors, as I did. I think it helps prevent the shape from being too monotonous.
If possible, print everything in ABS, so you can use acetone to chemically weld the segments together during assembly.
Important: the segments don't have their numbers printed on them! To keep them organized, you should label or organize them as you print them!
Paper Panel Cutting

Paper Panel Cutting:
To diffuse the light from the LEDs, each segment uses a paper panel on the front and back. For these, I used resume paper from my local office supply store. I don't know the exact brand, but the paper is 0.2mm thick. You may use any paper/material you like, but try to aim for a similar thickness. Ultimately, you want the material to be rigid enough to hold its shape, but thin enough to let plenty of light through.
I have prearranged the panel shapes onto an 8.5"x11" sheet, with one panel for each segment on the sheet.
You can find the panel files at the Github repo here.
To cover the whole spiral, you'll need to cut out 20 sheets, for a total of 180 panels. I've included sheet versions for both hand and laser/die cutting, and the original sheet SVG file, in-case you need it. If you're mounting the spiral against a wall, you could opt to skip one side of panels, as you won't see them (so you'll only need to cut 10 sheets).
For the hand cut versions:
- Be sure to print the sheet at 100% scale. You should be able to adjust this on the print setup screen when you go to print.
- You should be able to cut just outside the black outline of each panel, but there's quite a lot of tolerance, so you don't need to be super precise. Don't cut through panels' edge tabs!
- Do a test fit before printing all 20 sheets. If needed you can adjust the scaling when printing.
- The panels include numbers which correspond to their segment number (see the assembly drawing above).
- Do not try to cut all the panels out in one sitting, unless you want sore hands and cramps! I cut the out the panels over a month while I was waiting for the segments to 3D print. If you need to cut them out quickly, enlist some "willing volunteers".
For the laser/die cut versions:
- I don't own a laser or die cutter, so I had to guess at the scaling. Make sure to test fit a panel before cutting them all!
- The panels are not numbered. I didn't want the text messing with the laser. Unless you love jigsaws, separate/organize the panels out as you cut them.
The panels are replaceable, so you can always cut new ones if needed!
Painting and Clear Coat:
If you're hanging the spiral where it'll receive direct sunlight, you may want to spray the panels with UV clear coat (linked in the supplies) to protect them from deterioration (at least for a while). You can also spray paint the panels to add some color to the spiral, but do light coats only! Any colored paint will dim and tint the light output!
Do any painting or clear coat before you cut the panels from the sheets. This should help prevent the corners from curling up.
Assemble Spiral Layers 1 - 8










With all the segments printed, it's time to start assembling the spiral. This should be pretty straight forward, just start with layer one, gluing the first segments around the center ring. Then move outward, adding one layer of segments at a time. Each segment has a tear-drop shaped peg and hole that slot into the segment before it to help keep them aligned.
Note that there is a hole in the side of the center ring, and a hole indent on the inside face of each inner segment. When you glue them together, you should align the ring's hole with the indent on one of the segments. This gives you an easy way to route LEDs into the center, should you want to.
The gluing process may take a while, depending on what kind of glue you're using. As mentioned in the Supplies step, I printed the segments in ABS, so I was able to chemically weld them using acetone. If you're printing in PLA, you could try "Weld-On 16", as tested in this instructable: link. For all other materials, you'll have to do your own research, but epoxy is usually a safe bet. When gluing, you can use blinder clips as clamps; you'll probably need a range of sizes. Make sure you keep the spiral as flat as possible to keep the segments well aligned.
When gluing, make sure you wear adequate PPE such as gloves and a dust mask.
Important! Only glue segment layers 1 through 8 for now! You'll handle the last layer in the next steps.
Hook and Control Segments







Before you can add the final layer of segments, you need to prep both the hook and control segments by adding some embedded hardware.
Hanging Hooks:
Both the hook and control segments have mounting points for D ring hanging hooks. As mentioned in the Supplies section, these are intended for use with leather and purse straps, but are plenty strong enough the hold the spiral (even with just two hooks).
Before you can secure the hooks, you need to drill out the mounting holes in the segments. I opted to add a 1mm thick plug to each hole to give you more freedom with where you put your hooks, while also avoiding having a bunch of unused holes spitting out light. The holes are marked on the outside of each segment by two pin-sized holes. Use an M3 or 7/64" drill bit to drill them out.
With the holes drilled, feed a 10mm M3 screw through each hole. The D ring hooks should have an internal M3 thread. Screw the hooks onto the screws. Don't over tighten them or you risk splitting the plastic. Refer to the images for more. Space is tight, but you can use a right angle ratchet screwdriver to help tighten the screws (linked in the Supplies), although I found that hand tightening was good enough.
For whatever reason, if you cannot find the correct D ring hooks, or do not want to use them, you can also use M4 eye bolts. The hook holes are sized for an M4 thread, and the inner hole is fitted for an M4 nut.
Programming Hatch:
The control segment has an extra side hole for programming, which is covered by the programming hatch when not in use. To mount the hatch, add an M2 nut to the inside of the segment near the hatch hole, as pictured, with a drop of glue to hold it in place. Note that I know some of you might want to use a heat set insert instead, but do not, there is not enough room. With the nut in mounted, you can slide the programming hatch into place, and secure it using a 10mm M2 screw, as pictured.
Assemble Spiral Layer 9


With the hooks added to the control and hook segments, you can now add the final layer to the spiral. Make sure you place the hook segments where you want to hang the spiral from.
In the case that you want to add extra LEDs to the center of the spiral instead of a crystal, I've added a pass though hole to the center ring. Make sure that the hole is aligned with the control segment as pictured. This ensures that the when you add the LEDs, the final LED will be in the segment with the hole.
Hanging the Spiral:
With the spiral's body finished, you can test out hanging solutions. Since everyone's situation is different, I'll only offer a few pointers for hanging the spiral.
The spiral weighs about 4lbs (2kg). I used some spare chain I had lying around to hang mine, but I imagine most small chains/rope will work for hanging. 4lbs isn't very heavy, so there should be plenty of adequate hanging hardware available at your local hardware store and online.
The purse D ring hooks I used seem to be sturdy enough to hold the spiral even only using one hook, although I recommend using at least two. They don't seem to have a listed weight rating, so be sure to test your own hooks for strength. If you have any problems with the hooks you can always revert to using M4 eye bolts, which are fully rated.
Control PCB



With the spiral's body built, you can move onto the electronics, beginning with the control PCB assembly.
Grab the control PCB, Wemos D1 Mini, and 74AHCT125N chip. Note that you should test the Wemos before adding it to the control board (most easily by uploading the "blink" Arduino example).
On the underside of the PCB, as pictured, solder the 74AHCT125N in place, and bridge the "VIN" pads and the upper pair of large pads on the right hand side of the board. Note that the board is configured to handle LiPo battery charging and 3.3v regulation, but we won't be using either of those features, so some pads will be left blank. Only solder the pads circled in the pictures!
Next, flip control PCB over, and, as pictured, solder the Wemos in place using 2.54mm male headers (they should have come with the board). Be sure to trim off any excess header length.
Photoresistor PCB



To assemble the photoresistor PCB, grab the PCB, 10K trim pot, photoresistor, and 1K 0805 resistor.
Solder the parts to the PCB as pictured. Be careful not to overflow solder onto the trim pot's central wheel. It's easiest to start with the pot's smaller legs. Once the spiral is finished, you'll be able to adjust the brightness level trigger by turning the trim pot with a small screwdriver.
For the photoresistor, leave it raised about 3mm from the PCB.
Wiring 1






With the PCB's done you can start wiring the electronic components together. To understand the connections, please refer to the wiring diagram attached to this step.
We'll begin by creating the power connector, which is somewhat tricky because we need power going to both the LEDs and to the control PCB. I'll explain the assembly below as best I can, but it may be more helpful to refer to the pictures attached to this step.
Begin by grabbing a 5.5mm female DC jack, a female 3 pin JST-SM connector (should have come with you LED strings), and some 22Ga stranded wire.
To create the connector, start by soldering the power (red) and ground (white/black) wires of the JST connector to the power and ground tabs of the DC jack along with one extra wire to each tab. There should be two wires coming from each of the DC jack's tabs! Make sure you connect the wires to the correct DC jack tabs, as pictured. Space in the control segment is tight, so trim the JST's leads down before soldering so you have about 2cm between it an the DC jack. Leave the JST's data lead (green or blue) alone for now.
Use heat shrink to seal the DC jack's tabs. To help align the wires before cramming them into the control segment, use more heat shrink to group the JST's data wire with the DC jack's extra power and ground wires, forming the whole power connector into a "Y" shape.
Note that you could omit the JST connector, and wire the LED strings directly to the power connector, but I advise against this, as you then have to juggle the strings during assembly.
Wiring 2


To connect power and data to the control PCB, solder the power connector's data (green), power (red), and ground (white) wires to the D8 and VIN +/- pins on the control PCB, as pictured. Make sure there's about a 3-4cm distance between the DC jack and the control PCB. You can see how the PCB is mounted in the control segment in Wiring Step 5 below, so you can offer up the wire length before soldering.
Wiring 3





To attach the photoresistor board to the control PCB, solder wires to the pins on the photoresistor PCB, as pictured. Then solder the wires onto the A0, 3v3, and GND line of pins on the control PCB. Use about 5cm of wire between the PCB's.
Overall, the connections should be:
- Photoresistor GND to control PCB GND
- Photoresistor VCC to control PCB 3v3
- Photoresistor Data (center pin) to control PCB A0.
Wiring 4



As a final step in preparing the control electronics, add a 1000uf electrolytic capacitor to the control PCB using the pins labeled "1000uf". The capacitor helps prevent large current spikes from damaging the LEDs.
As shown in the images, you'll need to do a bit of wire bending to squeeze the capacitor's legs under the Wemos D1 Mini. Make sure that you wire it with the correct polarity; the negative leg is usually indicated by a white stripe along capacitor's side. You should add some heat shrink to the capacitor's legs to help prevent shorts. Secure the capacitor with a dab of hot glue.
Wiring 5




With the control electronics built, it's time to mount them in the control segment. It's probably easier to follow the pictures above, but I'll also explain in text.
Begin by using the DC jack's nut to secure it through the central hole in at the top of the segment. With the jack secure, slide the control PCB into place along the left hand bottom of the segment. There is a small wall along the bottom of the segment that should rest on the control PCB's 74AHCT125N chip, helping to hold it in place.
Before securing the control PCB with hot glue, make sure that PCB is centered, and its sides are flush with the inside lips of the segment. There should be about a 0.5mm gap on either side. The paper diffusers rest on the lips, so we don't want the PCB edges protruding above them. The Wemos's USB port should also be easily accessible via the programming hatch.
Next, mount the photoresistor PCB using the cutout above the control PCB. The photoresistor and its trim pot should poke into the hole. Use hot glue to secure the PCB in place. Be sure not to glue the trim pot; you should be able to turn it using a small screwdriver from the top of the segment.
Finally, adjust the wires and JST connector so that they don't protrude from the sides of the segment, keeping them as centered as possible.
LED Wiring



I found that using a single LED for each segment did not produce enough light, so I opted to double them up by running two strings in parallel. The strings are "clones" of one another, so they share power, ground and data. You could possibly opt to have separate connectors for each string, but there's not really room, so it's easier to just wire them together.
Before joining the strings, you should use the control segment to test them. See the Code Step for uploading instructions.
To wire the strings together, you'll have to cut off their JST connectors at the start of the string. This should be the "male" JST connector (opposite the female used in the control electronics). Before cutting, you must make a note of their wiring order, so that you can solder them back together in that same order. In general, the JST colors match as follows:
- Positive -- red.
- Data -- Green or blue.
- Ground -- Black or white.
Your strings may be labeled better, but on mine the positive wire was marked with small black dots as the only orientation indicator, going positive, data, ground.
Once you cut the strings, strip them and twist their wire pairs together; positive with positive, ground with ground, data with data. Solder them back onto the male JST, matching the wiring order; positive to red, data to green/blue, and ground to black/white.
The spiral only uses 90 LEDs, but each string has 100, so you can cut off the final 10 LEDs (unless you want to use them in the center, see the Customizing the Center step).
Threading the LEDs Through the Spiral







With the LEDs ready, you can start threading them into the spiral. The position of each LED in the spiral matters, so you should follow the attached LED Wiring Guide image. The LEDs start at the control segment and go clockwise around the spiral, shifting inward at the end of each spiral "ring". Remember that each segment has a single pair of LEDs.
I recommend that you thread each of the two strings separately, as it will keep the wire management easier. For the most part, the threading is more tedious than difficult. Note that the strings are flexible enough that you can thread them through multiple segments before pulling the rest of the string through, which speeds up the process significantly.
As you get towards the center and the LEDs get closer together, you'll have a lot of excess wire between LEDs. You can control the wires by inserting them into the small side holes in each segment. You should try to center the LEDs in the segments, and keep the LEDs on their sides so that their light is shining towards the segment walls, which helps even out the light diffusion and limits bright spots.
Adding the Paper Panels




With spiral's internals in place, you can add the paper diffusion panels to the segments.
Starting from the center panels and working outwards, ring by ring, go around the spiral, and slide each paper panel into place on its corresponding segment. The the panels have side tabs that slide into corresponding slots in each segment, holding them in place. There is also a lip along the segments' walls to support the panels. I found it easiest to slide two of the panel's tabs into place, and then use a pair of tweezers to bend the other tabs down and into their slots.
The spiral is double sided, so you'll need to do two sets of panels. If you're mounting the spiral against a wall, you may opt to skip the rear set, but remember that the side you use will determine if the effects go clockwise or counter-clockwise (the clockwise side matches the view in the LED Wiring Guide in the previous step, ie the LED strings thread clockwise around the spiral).
The Central Crystal




The central crystal is sandwiched between two printed "Crystal Brackets" and held in place using five 10mm M2 screws. The Crystal Brackets have an inner lip that secures the crystal.
Make the crystal and bracket sandwich, as pictured, and mount it to the center ring of the spiral using the M2 screws and the ring's five mounting points.
With the crystal mounted, the spiral's construction is complete! Now all that's left is to upload the code to get it shining.
Note that if you wish to replace the spiral's crystal with something else (different crystal, more LEDs, etc), please see the "Customizing The Center" step below.
Customizing the Center



I purposely kept the spiral's center design simple, so that others could customize it as they like.
The central ring has 100mm outer diameter, a 96mm inner diameter (with a slight print tolerance included), and a height of 35mm. It has 5 inner mounting points for M2 screws, spaced evenly apart (72 deg), with the screw holes spaced at a radius of 44.5mm. See the included images for more dimensions.
Using the dimensions and diagrams above you should be able to create your own center insert and mount whatever you like.
Adding Extra LEDs to the Center:
In the case that you want to add more LEDs (such as using the spare 10 from the LED strings), there is a hole in one side of the center that you can thread the LEDs through. The hole should line up with the segment containing the final LED so the string can continue naturally.
How you arrange the LEDs in the center is up to you. You could mash them in randomly, or set the in a circle, continuing the spiral "arms". For the latter, you may want to design and print a harness to hold the LEDs in place. Likewise, you'll also need to design and print/cutout a paper diffusion panel + mount for center.
You'll also need to adjust the code to add and arrange the new LEDs. My Pixel Spork Library uses a system of virtual "segments" to map the LEDs into 2D shapes (spirals, rings, etc). To use the new LEDs you'll need to add them to the segments. The code has quite a few segment definitions, and because I can't know how you'll arrange them, I won't try to provide any sample code. Instead, I'll link you to Pixel Spork's wiki page explaining the segments here: link, and also to the worked examples page: link. The "single" sections example may be helpful if you want to treat the center as a single led.
Also, feel free to post a comment or message me if you need any help!
Code Uploading

With the spiral build completed, all that's left is to upload the code and get it shining!
You can find the spiral's code here: link.
You can upload the code like any other Arduino program using the Arduino IDE. To run it, you'll need to install two Arduino libraries:
- The FastLED library
- My Pixel Spork library
Both of these can be installed by searching for the library using the Arduino IDE's built-in library manager.
You'll also need to install the esp8266 boards package, as explained here: link.
When uploading, be sure to select the "LOLIN(WEMOS) D1 R2 & mini" as the board.
Note that by default, the code's effects will only run when the light sensor reads below a minimum threshold. You can adjust the threshold by turning the light sensor board's trim-pot with a small screwdriver. You can also disable the light sensor in code by setting "lightSenDisable" to true.
The code is configured to cycle through each effect over time, as shown in the intro video. It is fully commented, and explains how to skip effects, add new ones, etc. There are also a few spare unused effects that you might want to try!
All of the spiral's effects were created using my Pixel Spork library. For more tinkering, you can check out Pixel Spork's wiki: link, which explains all of the library's workings, including multiple examples, a full list of the library's effects, and more! I've also added a diagram of the LED layout to this step for reference.
With that, the spiral is complete. I hope that you enjoy it as much as I do and that you found this instructable helpful!
Thank you for reading! :)
If you have any questions, feel free to leave a comment below, or message me. I'm happy to help in any way I can!