LED Sphere (Desktop-Sized)

by AGBarber in Circuits > LEDs

479 Views, 9 Favorites, 0 Comments

LED Sphere (Desktop-Sized)

DIY LED Sphere (Desktop-Sized)
PXL_20250709_180538634.jpg
PXL_20250709_222850071.jpg
Gif3.gif
PXL_20250708_174007172.jpg
PXL_20250708_175611488.jpg
PXL_20250708_175410977.jpg
Gif4.gif
Gif1.gif
Gif5.gif
Gif2.gif

I have seen a few LED sphere's across the internet, but most of them are either pretty big, or require some complex (and expensive) arrangement of flexible PCBs. I thought I'd have a go at making a sphere using commonly available WS2812B (aka "Neopixel") addressable LED rings, thinking that the rings would make the design easier to reproduce, and also fairly compact. I am pretty happy with the end result, with the sphere being small enough to fit comfortably on a shelf or desk (while still packing enough LEDs for some fun effects), and being fairly straight forward to assemble (but still a little trickier than I'd like). In this instructable, I'll show you how to built your own.

I designed the sphere using Autodesk's Fusion 360 CAD software. The sphere is about 98mm (3.6") in diameter (about the size of a large onion), and contains 120 LEDs. It is powered by an internal LiPo battery, but can also be run externally via a 5V USB connection. An ESP8266 Wemos D1 Mini serves as the brains of the sphere. The sphere also includes an IR receiver, allowing for remote control.

The body of the sphere is entirely 3D printed, using transparent filament for the light emitting portions. I've also included a stand and hanging hook for display.

All the sphere's lighting effects were created using my Pixel Spork Arduino Library. Checkout the video above to see the sphere in action!

For reference, you can find all the project's files, code, etc at its Github Repo.

Please note that while most of the build is straight forward, it does require some tricky soldering and gluing in tight spaces. Before starting the project, you should read through the whole Instructable so you can plan your approach.

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.

Finally, please know that while the sphere is tough enough to withstand normal wear and tear, it is not intended to be thrown, dropped, submerged, etc. It is for display only!

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 build the sphere you'll need a couple of custom PCBs I designed:

  1. A breakout board for the Wemos D1 Mini micro-controller, found here (click the three-dots in the upper left to download).
  2. A PCB for joining the rings together, found here. You'll need six copies. Note that this PCB is possibly optional, see Step 7 for info.

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 accepts 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:

Note that you may be able to find the parts elsewhere for cheaper, I just grabbed the first results from Amazon/Google, etc.

  1. One Wemos D1 Mini micro-controller (must be V3.0.0+): link
  2. One TP4056 1s LiPo charging board: link.
  3. One TSOP4838 DIP-3 IR receiver: link. (it's the common IR receiver variant with the round dome in the center).
  4. One IR remote: link. Technically most IR remotes should work, but I linked to the one I used. You won't need the bundled IR receiver. You'll also need a CR2032 battery for the remote.
  5. Two 14x12mm Micro USB breakout boards: link.
  6. Two sets of 61 LED WS2812B rings: link. You'll usually find these as a set of 93, with one of each of 32, 24, 16, 12, 8, and 1 pixel rings, we only need the 24, 16, 12, and 8 rings. Also note that there are multiple variants of these rings floating around, all with slightly different diameters, you want the set where the 24 pixel ring has ~92mm diameter, others won't fit the sphere. Another sign of the correct rings is that they have the LED capacitors on the inner edge of the rings.
  7. One 1s LiPo battery. It must fit within about a 60x30x10mm envelope, but other than that, try to get an RC/drone battery with the largest capacity you can find. The one I used can be found here: link, although battery listings come and go pretty often, so don't be surprised if the link is dead :(. You could also use a 14500 LiPo cell and holder, although the capacity will be low.
  8. One female connector to match with your battery, so you can hook it up to the control board. Mine had a red JST plug: link.
  9. One 19x6x12mm slide switch: link. These are pretty common, but their naming isn't. If the link is dead, try searching for "Micro Miniature Slide Switch". The switch is rectangular black metal with an orange PCB.
  10. Three 3-pin 2.54mm female JST-XH connectors: link.
  11. Three 3-pin 2.54mm male JST-XH connectors: link.
  12. At least twelve JST crimp connectors: link.
  13. At least 40 2.54mm common male header pins: link.
  14. 22Ga stranded wire, preferably in 3 colors.
  15. 26Ga solid core wire. You only need about 10cm, also possibly optional (see Step 12).
  16. 3mm heat shrink.
  17. (for testing) One three pin male-male Dupont jumper cable, and ideally a spare Arduino board of some kind.

Hardware Parts:

  1. Two M2 nuts.
  2. Two 10mm M2 screws.
  3. ~40mm of ~1mm diameter solid wire (I used a paper clip).

Tools Required:

  1. 3D printer + one roll of transparent filament and one roll of a solid color, both preferably ABS (for easy gluing).
  2. Acetone, if using ABS filament (used for gluing).
  3. If not using ABS filament, a good glue for bonding your filament of choice, possibly Weld-On 16, or superglue. I can't say for certain, as used acetone to chemically weld the sphere together. You can check out this instructable for more on gluing PLA: link.
  4. Hot glue + hot glue gun.
  5. Superglue.
  6. Duct tape.
  7. If you want a metallic finish like I did, you'll need some "liquid chrome" paint markers. There are a bunch of these available in different colors. I used the copper color from this set: link.
  8. Crimping tool for JST-XH terminals: link.
  9. Soldering iron with a fine tip + solder.
  10. Common hand tools -- scissors, screwdriver, wire cutters and strippers, etc.
  11. Fine tweezers and mini pliers.
  12. Heat gun (for heat shrink).

Assembly Prep

Assembly Diagram.PNG
PXL_20250520_172952388.jpg
LED Rings Top 61.png
PXL_20250602_170203666.jpg

Gather and Prep Parts:

Before beginning the sphere's assembly, you should 3D print the parts as indicated by the assembly diagram image attached to this step (also available as a PDF here). You can find the part files here. Be sure to print all the "Light Rings" in a clear transparent filament, everything else can be a color of your choice. For the 24 "Pixel Ring", I have included a custom brim to help with print adhesion. As pictured, this should be removed before construction.

Note that most of the sphere is glued together, so I printed all my parts in ABS, allowing me to chemically bond them using acetone. I encourage you to do the same, as I don't have specific glue suggestions for other filament types.

You should also gather the electronic components, and separate the LED rings using wire clippers, sanding their edges smooth at the same time.

Construction Overview:

Conceptually, the sphere's construction is quite simple, consisting of two identical halves (save for the "Mid Rings" and "End Caps"), split into 4 layers; one for each ring. The LED rings sit on each "Pixel Ring", forming an internal stair-like structure, and shining vertically out through each "Light Ring". The rings are electronically linked using custom PCBs (or may be wired directly, which I'll discuss later). To join the sphere halves, the "Mid Rings" are glued to the base of each half, and a pair of pins are used to hold the sphere together. The control electronics and battery are mounted vertically in the middle of the sphere, making for a nice, neat, self-contained package.

Be sure to read though the whole instructable before starting, as some parts of the assembly are quite tricky, so you may want to consider your approach.

In order we'll:

  1. Assemble the shells for the upper and lower halves of the sphere.
  2. Add LED rings to the lower half of the sphere and electrically connect them.
  3. Assemble the control PCB and add it to the lower half of the sphere, connecting it to the LED rings.
  4. Add LED rings and electronics to the upper half of the sphere and electrically connect them.
  5. Connect the two halves together to form the final sphere.
  6. Configure the IR remote and upload code.

Finally, you should test both the Wemos D1 Mini micro-controller, and the LED rings before assembly. Especially the rings, as I've had some come with dead LEDs before and they are inaccessible once the sphere is assembled. You can test them by hooking up a micro-controller (hopefully you have a spare Arduino UNO or something), and using male 2.54mm jumper cables to push on the rings' connection pads. You can use a FastLED library example to test (see Step 27 for library link).

Note that I won't be going over how to setup and upload code to the Wemos in this instructable. There are plenty of instructions out on the web, with more details than I would provide :).

Likewise, I'll also assume that you are somewhat familiar with WS2812 style addressable LEDs. You shouldn't need to know a lot for this instructable, but it may help if you need to troubleshoot. Adafruit has a great beginner's guide here which will get you up to speed.

Painting

To avoid ruining any of the transparent parts, you should do any painting before you assemble the sphere. As you can see from the intro pictures, only the outer edges of the "Pixel Rings", "End Caps", and "Mid Rings" are visible when the sphere is complete, so only those areas need work.

If you'd like to mimic me, and go for a metallic/steampunk look, you can use metal paint markers (linked in the Supplies above). Using them is easy, just like a normal marker, and the print layer lines really help with paint absorption/retention. I went with a "copper" marker, although it looks more like a gold to me. Be aware that some metallic markers take a loooong time to fully dry (like multiple days), although mine only took about half a day-ish. Also, you cannot varnish or clear coat true metallic paint, as it ruins the metal effect.

Sphere Halves Assembly

PXL_20250527_174015788.jpg
PXL_20250527_174050749.jpg
PXL_20250527_174117768.jpg
PXL_20250527_174133358.jpg

The first step in assembling the sphere is to combine all the "Pixel Rings" and transparent "Light Rings". The step images should give you a pretty good idea of what to do; just slide each "Light Ring" into it's corresponding "Pixel Ring". The rings have tabs that slide together and control the depth of the "Light Rings". The 24 pixel "Light Ring" inserts from the bottom, the rest, from the top. For me, the rings were a press-fit, but you could add a drop of glue to help hold them in place if needed.

In the end you should have two of each type of Pixel-Light Ring pair; one for each half of the sphere.

Add End Caps

PXL_20250527_180335071.jpg
PXL_20250527_174318810.jpg
PXL_20250527_180111438.jpg

As pictured, slide the USB and Switch End Caps into 8 pixel rings, using their tabs for alignment. Glue them in place.

For the Switch Cap, you need to add two M2 nuts to the inside of the "Pixel Ring", as pictured. These should align with the M2 holes in the Switch End Cap, allowing you to mount a hanging hook should you want (see Step 28). The inner surfaces of the cap may not be totally flat, so you may need to use an M2 screw to thread and center the nuts into the cap. Secure the nuts with glue -- I used UV resin, but super glue should work.

Join the Sphere Layers

PXL_20250527_214928806.jpg
PXL_20250527_220746314.jpg

To assemble each sphere half, combine one of each of the 8, 12, 16, and 24 Pixel-Light Ring pairs, stacking them together as pictured. As with the light rings, each ring has a pair of tabs for alignment and depth setting. Make sure that the rings are fully meshed together -- altogether they should form a near perfect sphere. Secure each ring in place with a drop of glue.

Add Mid Rings

PXL_20250527_220817367.jpg
PXL_20250528_170703826.jpg
PXL_20250528_170720905.jpg
PXL_20250528_171238587.jpg

To finish off each sphere half, you need to add a "Mid Joiner" ring to each. There are two different "Mid Joiner" rings, one with a tab, and one with a slot. You should have one of each, and they should slot together easily. You should also confirm that the 24 pixel LED rings can fit through the mid rings -- sometimes there's variation in the PCB diameter, and you may need to do some sanding for a easy fit.

You'll need to glue a "Mid Joiner" ring to the base of each sphere half. It doesn't matter which sphere half has which Mid ring, but the alignment of the rings is important. The "Mid Joiner" ring's tabs/slots should align with the inner tabs of the 12 pixel ring. See the step images for more. The mid rings need to be correctly aligned so that IR sensor, control PCB, and LED rings are all placed for symmetry and easy assembly.

Some notes on gluing:

  1. Unfortunately, there wasn't room to add any indexing or extra width to the Mid rings, so the glue area is basically just two flat, fairly thin rings. This makes gluing a little tricky, as you're doing both alignment and gluing at the same time.
  2. I suggest using super glue to initially tack down the rings at their tabs, which should let you align the rings without dealing with glue everywhere.
  3. After that, you can squirt a small amount of thin glue along the ring-sphere seam to tack everything down. You may even be able to add the glue from inside the sphere if it is thin enough. Make sure that the glue is fairly strong, as the rings hold the sphere together.
  4. Unfortunately, I don't a have a specific glue suggestion, as I printed all my parts in ABS, so I could use acetone to weld them.

Electronics Overview

Wiring Diagram.png
PXL_20250602_170245923.jpg

See the Wiring Diagram image attached to this step for an overview of the electrical connections. Conceptually, the sphere's electronics are quite simple. The control PCB contains both the Wemos D1 Mini micro-controller and the TP4056 LiPo battery charging board, acting as the "core" of the sphere. To drive the sphere, the control PCB is hooked up to a power switch, LiPo battery, the LED rings, and the sphere's sole sensor; an IR receiver LED.

The difficulty in the electronics comes mainly from cramming them all into the sphere. To ensure everything fits correctly, I opted to insert and connect the electronics into the sphere in stages (as opposed to assembling everything outside of the sphere and inserting). This method leads to some tricky soldering situations, where you're soldering somewhat "blind" or in cramped areas. It is essential that you are decent at soldering, and have a fine tipped iron available.

I encourage you to look over the assembly steps before starting, as you may want to do things differently than me. Likewise, for each soldering maneuver, be sure to plan your approach, and try a "dry run" before getting the iron hot.

Honestly, I'm making it sound worse than it actually is, but I just wanted to give you a heads up!

Be aware that the WS2812 LEDs can be damaged by excessive heat, so try to be efficient with your soldering. Avoid applying heat close to any LED for more than 10sec or so (not a fixed time, LEDs are usually more robust, but it's just something I go by).

Notes on the Ring Joiner PCB:

As you'll see in the next steps, the LED rings are staggered within the sphere, forming a staircase like structure. Meanwhile, each ring has a single 5V, GND, DI (LED data in), and DO (LED data out) pad. This creates a soldering challenge, as you need to connect all the rings GND and 5V pads together, while also zigzagging the data line and keeping the rings separated enough to fit in the sphere correctly.

To make the ring connection process "easier", I designed a "ring joiner" PCB (pictured in this step), which does all the GND/5V/Data line work for you. The PCBs solder vertically to the LED rings' connection pads using the PCB's bottom "half-holes", while the two rows of through-holes are sized for common 2.54mm male headers. Likewise, the holes are spaced vertically to match the heights of the rings in the sphere. So by adding male headers to each of the rings' pads, they can be connected and staggered all using the single PCB.

The ring joiner PCB literally just does connections, so each numbered pin on the PCB connects to all other pins with the same number. The pin layout may look a little wacky, but it's designed to accommodate the ring connections from the wiring diagram (with the LED data running from bottom to top, from innermost ring to outermost to innermost).

The orientation (backwards or frontwards) of the joiner PCB on each ring is critical for correct data flow. Make sure you pay close attention to the PCB in ring assembly images!

Finally, while I designed the joiner PCB to make things easier, it ended up being more of a give and take. It absolutely makes connecting and aligning the rings easier, but it's a little tricky to solder the joiner PCB to each LED ring's pads, especially with male headers added. So, while I used the joiner PCB's, you may want to consider just going with wired connections. However, you'll have to figure out that method for yourself.

Lower Ring Electronics 1

PXL_20250602_171152649.jpg

To begin the electronics assembly, we'll start by assembling and inserting the sphere's lower set of rings (also the lower set of rings on the wiring diagram).

To start, solder 2.54mm male headers to the 24, 16, and 12 pixel rings as pictured. Be sure to only add two headers to the 12 pixel ring on the GND/5V pads. Likewise, for the 12 and 16 pixel rings, only solder one of the header's legs to "tack it down", which will make adding the ring joiner PCBs easier.

Lower Ring Electronics 2

PXL_20250602_174354203.jpg
PXL_20250602_174402134.jpg
PXL_20250602_174426730.jpg
PXL_20250602_174440989.jpg
PXL_20250602_174726696.jpg
PXL_20250602_174732971.jpg

In this step, you'll be adding a joiner PCB to each ring.

I'll provide specific notes for each ring below, but overall you should:

  1. Be sure to match the joiner PCB's orientation as pictured (match the pin orders).
  2. Do a "dry test run" with your iron to find a good soldering angle before applying heat/solder.
  3. Soldering the joiner PCBs can be tricky. Take the soldering slow, avoid rushing or panicking, as you may overheat the LED below the pads. If it's not going well, take a step back, and try a from different angle.
  4. You can flow solder from the front or rear of the joiner PCB. If there's solder on the ring's pads, it should flow and connect.
  5. Try to keep the joiner PCBs as close to the outer edge of each ring as possible and close to a 90 deg angle.
  6. Try to keep the joiner PCB's flush with ring surface. There's a good amount of wiggle room for each pin, but if the joiner PCB is to high, it will be tricky to keep all the rings a the right height in the sphere.
  7. If in doubt about a PCB's orientation, remember that the LED data should flow from the inner 8 pixel, through the 12 and 16 pixel rings to the outer 24.

Ring Notes (also see step images):

  1. 8 Pixel Ring: No headers on this one, so is a good place to practice soldering the ring joiner. Joiner PCB should be oriented frontwards.
  2. 12 Pixel Ring: Joiner PCB should be oriented backwards. You also need to add an extra wire to the middle pin 1. Make it about 2cm in length; you can trim it later.
  3. 16 Pixel Ring: Joiner PCB should be oriented backwards. Probably the trickiest to solder due to having all four headers. After adding the PCB, you'll also need to solder a 3 pin JST connector to the mid PCB pins (2, 3, 5), as pictured. This is used for electronically connecting the upper and lower sphere halves.
  4. 24 Pixel Ring: No joiner PCB is required, as it is the upper most ring.

Lower Ring Electronics 3

PXL_20250602_183040425.jpg
PXL_20250602_183023411.jpg
PXL_20250602_183049738.jpg

With joiner PCBs added to each ring, you can insert them all into the lower sphere half (the half with the USB end cap). Follow the pictures above, and orient the rings so that their joiner PCB's are parallel to the USB end cap's center tab.

As you insert the rings, you should be able to slide the male headers of the ring above into the joiner PCB of the ring below. This should let all the rings sit well in each printed "Pixel Ring", while providing a secure electrical connection. If the rings aren't totally flush, you can bend the male headers up to push the rings down. Note that the 12 pixel ring's headers should slot into the middle set of through-holes on the 8 pixel ring's joiner PCB -- all other ring connections should slot into the top set of through-holes.

For this half of the sphere, the data flows from the bottom 8 pixel ring, to the top 24 pixel ring. Use this to confirm the rings' connections. The extra wire from the 12 Pixel ring is used to connect its DI pad to the 8 pixel ring's DO pad.

Once everything looks good. Solder all the rings headers' in place to connect all the rings together, including soldering the 12 pixel ring's extra wire to pin 1 of the 8 pixel ring's joiner PCB.

Lower Ring Electronics 4

PXL_20250602_183812838.jpg
PXL_20250602_184820482.jpg
PXL_20250602_184825881.jpg
PXL_20250602_184837425.jpg
PXL_20250606_203703039.jpg
PXL_20250606_215724870.jpg

In this step, we'll add the GND/5V/Data wires to connect the rings to the control PCB.

Cut three different colored 22Ga wires to ~3cm lengths. As pictured, strip and solder these wires into the 8 pixel ring's joiner PCB, using the upper row of through-holes. Pin 4 should be data in, pin 2 GND, and pin 3 5V.

With the wires in place, the lower rings are completed! You should secure the rings in place using hot glue, and cover the 24 pixel ring's exposed pads with some tape, to help avoid shorts (the rings from the upper and lower half shouldn't be able to touch, but it's better safe than sorry!).

Control PCB 1

PXL_20250529_215233362.jpg
PXL_20250529_220435292.jpg
PXL_20250529_220452740.jpg
PXL_20250529_222436988.jpg
PXL_20250529_223405202.jpg

The control electronics are mounted within the lower half of the sphere, so to avoid confusion, I thought it would be best to assemble the control PCB before tackling the upper half.

Before we start working on the control PCB itself, we need to make a modification to the Wemos D1 Mini. Due to where the Wemos is mounted in the sphere, its USB is inaccessible when the sphere is closed, making it impossible to program.

To solve this issue you can:

  1. Do as I did, and rig a USB extension to the Wemos. I'll go over doing this here.
  2. Configure the Wemos to upload wirelessly OTA. This should work fine, but you'll have to lookup how to set it up elsewhere.
  3. Opt to open the sphere for programming. Note that you'll have to also check the clearance with your USB cable and the control PCB's JST connector (see the next step).

Note that if you want to power the sphere via USB, you must add the USB extension.

Adding The USB Extension:

The Wemos is programmed via a CH340G serial converter chip located on the bottom of the micro-controller. The chip is connected directly to the USB, so by piggy-backing off the chips relevant input pins, we can add our own USB where we need it. This does require a bit of precise soldering, but if you were able to solder the LED rings above, you shouldn't have any problems.

  1. To begin, cut two 3.5cm lengths of 26GA solid core wire (stranded may also work, but will be more tricky to solder).
  2. Take the wire lengths and solder them to the pins on the CH340G as pictured above. Be sure to get the correct pins!
  3. Grab a USB breakout and solder the wires to the D+/- pins, matching the pictures above. Make sure the USB is oriented in the same way as the Wemos's.
  4. Add male headers to the Wemos.
  5. Finally, take two lengths of 22Ga stranded wire, and connect the USB breakout's 5V and GND pins to the Wemos's 5V and GND pins. Tape over the exposed pins on the bottom of the USB breakout. (ignore the bent signal wires, I've adjusted the lengths so you shouldn't need to bend them).

You should now be able to upload code to the Wemos using the new USB. You should test it by uploading a test program, such as the "Blink" example.

Control PCB 2

PXL_20250529_225904994.jpg

We can now prep the control PCB for assembly.

To do this, grab the PCB and:

  1. Bridge the D5, D6, D7 and D8 pads in the "74HCT125" area.
  2. Bridge the VIN pad.
  3. Connect a 3 Pin JST connector to the large pads at the end of the PCB.

Note that the PCB is designed to be configured for a few different situations, so don't worry about any pads or components that seem to be missing. Just match what is in the pictures.

Control PCB 3

PXL_20250529_230249832.jpg
PXL_20250529_230315102.jpg
PXL_20250529_230623840.jpg
PXL_20250529_230629741.jpg
PXL_20250529_231335601.jpg
PXL_20250529_231341355.jpg

Prep the TP4056 LiPo charging board by soldering male headers to the +/- and B+/- pins. You can use the control PCB to keep the pins straight.

Solder the TP4056 to the control PCB as pictured. Trim away any excess header lengths.

Finally, flip the PCB over, and solder the Wemos D1 Mini in place. Trim away any excess header lengths.

Control PCB 4

PXL_20250607_214430019.jpg
PXL_20250607_214942363.jpg
PXL_20250607_215013070.jpg

Now we'll add a battery power connector to the PCB. My battery used a red JST connector, but you should use whatever connector matches your battery.

Trim the connector down to about 8.5cm in length, can be longer/shorter depending on how long your battery's lead is. You want enough length so that the battery isn't strained in the sphere, but not too much such that you have a bunch of excess wire to squeeze away.

Solder the connector to the control PCB's VIN +/- pins as pictured. Be sure to match your battery's ground to - and positive to +!

Control PCB 5

PXL_20250607_215815518.jpg
PXL_20250607_220835094.jpg
PXL_20250607_221225064.jpg

Next we'll add the IR receiver to the control PCB.

To do this:

  1. Cut three ~7cm lengths of 22Ga stranded wire, ideally in three colors (or you can label them).
  2. Solder the wires to the IR receiver, and cover with heat shrink. In my case, blue -> data, red -> 5V, black -> GND. Be sure to check the exact pin order of your receiver!
  3. Solder the receiver to the D5 pin row of the control PCB on the TP4056 side, as pictured. Use the neighboring VCC/GND pins for 5V and GND.

This completes the control PCB.

Control PCB 6

PXL_20250607_222327808.jpg
PXL_20250607_222234902.jpg
PXL_20250607_224458751.jpg

Next, we'll mount the control PCB to the lower sphere half.

As pictured, you should be able to insert the PCB into the sphere vertically using the 12 pixel ring's inner tabs to help hold it in place. You'll also need to guide the USB breakout down into the bottom of the sphere, so that it sits within the USB cap, and is deep enough to accept a USB connector. This is a little tricky, but a pair of tweezers should help. (See Step 19 for bottom view of sphere).

Once you are comfortable, you can glue both the USB and PCB in place. I used hot glue for the PCB, but had to use super glue for the USB, as the area was too cramped for my glue gun. To help, you can connect a USB connector to the USB breakout, ensuring a strong connection.

Finally, as pictured, glue the IR receiver into the circular cutout in the Mid Joiner Ring.

Control PCB 7

PXL_20250607_223541564.jpg
PXL_20250607_223705875.jpg

With the controller secure, you can solder the rings' input wires to it.

You need to solder the Data/5V/GND wires to the controller's D6 pin row, using the neighboring VCC/GND for 5V and GND as you did with the IR receiver. The area is a little cramped, but as long as your wires are tinned, you should be able to use a pair of tweezers to insert them into the controller. Likewise, soldering them in place may be a little tight, but still doable with a fine tipped iron.

See the pictures above for more, although it was hard to get a really clear image.

Control PCB 8

PXL_20250607_225611198.jpg
PXL_20250607_225619623.jpg
PXL_20250607_230735208.jpg
PXL_20250607_230753024.jpg

Finally, we'll add another USB breakout, this time for providing power to the TP4056 for charging the battery.

To do this:

  1. Cut two ~4.5cm lengths of 22Ga stranded wire.
  2. Solder them to the VCC and GND pins of a USB breakout, and cover the exposed pin areas with tape, as pictured.
  3. Next, as you did with the controller's PCB. Insert the USB breakout into the bottom of the sphere half, down into the USB cap. You should be able to connect a USB connector to it from the outside of the sphere.
  4. Glue the USB in place, and solder the VCC and GND wires to the + and - pins on the TP4056. Note that the wires crisscross each other.

You may have noticed that there aren't any markers on the bottom of the sphere to indicate which USB is which -- there wasn't enough space to add any 3D printed text/markers. I encourage you to add your own indicator. I scratched a "+" into the paint next to the charging USB (not pictured).

Upper Ring Electronics 1

PXL_20250602_171152649.jpg

With the lower half of the sphere fully assembled, we can work on the electronics for the upper half, starting with the LED rings.

The upper rings' construction largely mirrors the lower rings with only small changes.

To start, like with the lower rings, solder 2.54mm male headers to the 24, 16, and 12 pixel rings as pictured. Be sure to only add two headers to the 12 pixel ring on the GND/5V pads. Likewise, for the 12 and 16 pixel rings, only solder one of the header's legs to "tack it down", which will make adding the ring joiner PCBs easier.

Upper Ring Electronics 2

PXL_20250606_200243554.jpg
PXL_20250606_195824566.jpg
PXL_20250606_201720238.jpg
PXL_20250606_201926025.jpg
PXL_20250606_201934351.jpg

Like with the lower rings, you'll add a joiner PCB to the 8, 12, and 16 pixel rings. Solder them using the same techniques as before, being mindful of to match the PCBs' orientation as pictured. Remember that the LED data should flow in reverse compared to the lower rings -- from the outer 24 pixel ring to the inner 8 pixel.

Ring Notes (also see step images):

  1. 8 Pixel Ring: No headers on this one. Joiner PCB should be oriented frontwards.
  2. 12 Pixel Ring: Joiner PCB should be oriented frontwards. You also need to add an extra wire to the middle pin 1. Make it about 2cm in length; you can trim it later.
  3. 16 Pixel Ring: Joiner PCB should be oriented frontwards. After adding the PCB, you'll also need to solder a 3 pin JST connector to the mid PCB pins (5, 3, 2), as pictured. This is used for electronically connecting the upper and lower sphere halves.
  4. 24 Pixel Ring: No joiner PCB is required, as it is the upper most ring.

Upper Ring Electronics 3

PXL_20250606_203505897.jpg
PXL_20250606_203514295.jpg
PXL_20250606_203643291.jpg
PXL_20250606_215712261.jpg

With the rings complete, you can insert them into the sphere half. Like you did with the lower rings, slide the rings into the sphere's pixel rings, while also slotting their male headers into the joiner PCBs. Make sure that the rings position match the pictures above, with the joiner PCB's being parallel to the switch cap.

Solder the rings together using the joiner PCBs, and solder the 12 pixel ring's extra data wire pin 4 of the upper row of the 8 pixel ring's joiner PCB.

When you're ready, you can hot glue the rings in place, and add a bit of tape over the 24 pixel ring's exposed pins.

Upper Ring Electronics 4

PXL_20250608_174400593.jpg
PXL_20250608_175629000.jpg
PXL_20250608_180023860.jpg
PXL_20250608_180031509.jpg
PXL_20250608_180038384.jpg

To finish the upper half's electronics, we'll add the power switch.

To assemble it:

  1. Cut three ~9cm lengths of 22Ga stranded wire. Colors don't matter, but I used black to distinguish the center wire.
  2. Solder the wires to the slide switch's tabs and cover with heat shrink. Also break off the switch's side mounting tabs.
  3. Attach a 3 pin JST connector to the other ends of the wires by stripping and crimping. Make sure that the switch's center wire is connected to the center pin of the JST connector. The other wire's position's don't matter. (The center tab is common for between both switch positions, and the controller PCB is designed to fit this kind of switch).
  4. With the switch assembled, you can glue it into the slot in the switch cap of the upper half of the sphere, as pictured. Hot glue or super glue should work fine. The switch should stick out of the end cap, and be easily "flicked".

With that, the upper sphere half is complete, and we can move to the final assembly!

Final Assembly 1

PXL_20250604_23090420.jpg
PXL_20250604_231918080.jpg
PXL_20250608_180123795.jpg
PXL_20250608_180222010.jpg

To start the final assembly, you'll need to make the wire to connect the LED rings of each sphere half.

To do this:

  1. Cut three ~7cm lengths of 22Ga stranded wire in three different colors.
  2. Strip/crimp the wire ends, and connect them to two 3 pin JST connectors. Be sure to match the wire order at each end as pictured!

With the connector finished, we can connect everything together.

Begin by connecting the LiPo battery to the control PCB using the battery connector we added. You should be be able to fit the battery in just behind the control PCB so that it's resting in the 12 and 8 pixel rings. When the sphere is closed, it should be held fairly snugly, but you can opt to hot glue it in place if you want.

Once the battery is in place, you can connect the power switch to the control PCB's JST connector and connect the rings together with the connector we assembled in this step. When connecting the rings, be sure that the connectors pins match those of the rings (Data/5V/GND)!

Once everything is connected, toggling the power switch should switch between charging the battery, and turning on the sphere. You can confirm this by connecting a USB to the TP4056 -- when the battery is connected to the TP4056, its lower LED should be blue (charged) or red (charging) and when the battery is disconnected from the charger (when the sphere is switched on) the upper LED should pulse red.

Final Assembly 2

PXL_20250608_180317679.jpg
PXL_20250608_180551209.jpg
PXL_20250608_180620336.jpg

With the internals finished, you can push the two sphere halves together to form the full sphere -- there should be plenty of space inside to manage any excess wire lengths.

Two pins are used to hold the halves together. To make the pins, you'll need two ~1.5cm lengths of 1mm diameter stiff wire -- I used a paper clip for mine.

When you are ready, as pictured, push the pins into the holes in the sphere halves slot/tabs to hold them together. Use a pair of tweezers to help. The pins should be loose enough that you can slide them in without much force, but not so loose that they fall out if you shake the sphere. You may also want to add a slight kink to the pins to give them some more friction.

Once the pins are in, the sphere's construction is complete! All that's left now is to configure the IR remote, and upload the sphere's code.

IR Remote Configuration

IR Recv Demo.PNG
PXL_20250708_175741982.jpg

Before uploading the sphere's lighting code, you need to pair it with an IR remote. You should be able to use almost any remote with the sphere, as long as it has at least seven buttons.

IR remotes emit a unique hex value for each their buttons, so to use a remote with the sphere, you need to record these values and add them to the sphere's code.

To obtain the button hex codes, you'll need the install the "IRremoteESP8266" Arduino library by searching for it in the Arduino IDE's library manager, or by downloading it from here.

With the library installed, you'll need to upload and run the library's "IRrecvDemo" example. In the example, change the "kRecvPin" value to "D5" to match the sphere's receiver pin.

When the example is running, any signals received by the IR receiver are spat out into the Arduino IDE's serial monitor (make sure your baud rate is set to 115200). Pushing a button on your remote should give you a hex value for that button (make sure the remote has batteries!). Then, you can replace the button values in the sphere's code (sphere_code.ino) "IR Button Mappings" section with your own. Be sure to add "0x" in front of each code.

You can use any configuration of buttons you like, but overall you'll need seven buttons for:

  1. Increasing the sphere's brightness.
  2. Decreasing the sphere's brightness.
  3. Switching to the next effect.
  4. Switching to the previous effect.
  5. Toggling the effect cycling (locks the current effect to run infinitely).
  6. Turning all effects on/off (a software on/off switch).
  7. Restarting/resetting the current effect.

See the next code step for more info on the button functions.

Code Uploading

With the remote configured, you can now upload the sphere's code and get it glowing!

You can find the sphere'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 three Arduino libraries:

  1. The FastLED library
  2. My Pixel Spork library
  3. The IRremoteESP8266 library, which you should have already installed in the previous step.

All 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, and use the sphere's programming USB (not the charging USB).

IMPORTANT: Code was originally compiled with FastLED ver 3.10.0, ESP8266 core 3.1.2, and IRremoteESP866 ver 2.8.6. So use those versions if you run into any bugs! There is a bug in FastLED ver 3.10.1, which will stop the sphere from working.

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 sphere'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!

IR Control:

As discussed in the previous step, you can control the sphere using an IR remote -- changing the brightness, skipping/pausing effects, etc. To make the sphere a bit smarter, some settings are saved using EEPROM when the sphere is powered down, so they can be re-applied when the sphere starts. For some inputs, the saving is depends on the current state of the sphere. This should hopefully be intuitive, but I'll explain the button save conditions below:

  1. Brightness increase/decrease buttons: These increment/decrement the brightness levels through the values in the brightness levels array (see the code). The brightness level is always saved so it can be re-applied on next boot.
  2. Next/previous effect buttons. Cycle forwards or backwards through the effect list. Only saves the current effect if the effect cycling is locked (the sphere is locked to the current effect).
  3. Effect cycle lock button. Locks or unlocks the effect cycling. When locked, the current effect is played indefinitely. Both the locked/unlocked state and the current effect number are saved. When locked, the current effect will resume upon re-boot. Likewise, when locked, the next/previous effect buttons will also save the current effect.
  4. Effect reset button. Restarts the current effect (with new random inputs if applicable).
  5. Effects off Button. Turns the LEDs on/off and pauses/resumes the effect updating. This is basically a software off switch. When resumed, the current effect's cycle runtime is reset, so it will run for a full run time. When the effects are off, all other button inputs are ignored.

Please note that EEPROM has a limited write life-span of ~10000 writes, after which it may misbehave. This shouldn't be a huge issue unless you're constantly changing settings, but to help extend the life, I've configured the code to only save your settings after a cool-down of 3 seconds. So you can quickly change effects/brightness, with the final input only being saved after 3 seconds.

Finally, on initial boot, the EEPROM values will be empty, which may lead to some weirdness. Using the IR remote to change the settings will fill in the values.

Final Notes

PXL_20250624_230425644.jpg
PXL_20250708_173930881.jpg

Powering the Sphere:

The sphere can powered either via its internal battery, or via the programing USB on the bottom. When powered with the battery, the sphere's power switch toggles between powering the sphere and charging the battery. You cannot charge the battery while the sphere is running! When charging, the TP4056's LED glows red (blue when fully charged), which should be visible through the cracks in the sphere.

When powered via the programming USB, the sphere's power switch does nothing -- you'll need to turn the sphere on/off using the IR remote. Remember to only power the sphere with 5V, any more will fry the system! Your power supply should be able to output at least 4 amps for safety.

Displaying The Sphere:

To help display the sphere, I've included print files for both a display stand, and hanging hook. You can find them with the other print files here.

The display stand includes a cutout for routing a USB cable. I painted it using a dark gray, and the same copper metallic paint markers I used for the sphere.

The hook is mounted at the top of the sphere using two 10mm M3 screws, as pictured. The screws should thread into the M2 nuts you added to the switch cap in Step 4.

Final Words:

With that, the sphere 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!