Introduction: ​LED Table Tennis Ball-Ball

About: I love making things, especially light related stuff


After building a flat panel of table tennis balls a while back, I started wondering If it would be possible to make a 3D panel out of table tennis balls. Combined with my interest in making "art" from recurring geometric shapes I made this! This lamp exists out of 80 table tennis balls, placed on the corners of a truncated-icosahedron, more commonly known as the pattern on a soccer ball. Originally I imagined a ball with colors flowing over it, and I'm content with how it ended up looking. I had to make two of these balls because I blew the first one up by plugging the 5v LEDs directly into 220V. .... But, on the other side, this allowed me to make some improvements to the build when making a second one. So I guess it isn't all that bad.

Design choices

Of course, the main components in this build that decide the size of everything are the table tennis balls. The number of options in which I could place the table tennis balls, such that it would be sturdy and such that there would be as little black space as possible space between the balls was limited. I ended up going with a truncated-icosahedron. As it turned out this shape luckily also worked well with another limiting factor, the LEDs. I wanted this project to work with commonly available WS2812B 30/m LED strips. The distance between the LEDs on those strips is 33.33 mm. The distance between the center of two table tennis balls is however 40mm. However, because the balls are not placed in a straight line, but in a curve, this turned out to almost fit perfectly.


I hope you enjoy building this project or just reading through the build. Good luck! (PS: If you end up building this, I would really appreciate it if you could share your build with me, seeing that others enjoy and build Instructables that I made really makes my day!)

Subscribe to my Instructables profile or YouTube to be updated on more awesome (LED) projects!

Step 1: Materials / Tools

As always there are multiple ways to build something like this, and a correct way does not exist. Because of this, I will mention some alternatives as well.


- 80 x (buy a few more to be safe) WhiteTable Tennis Balls 40mm (

Picking the right type of table tennis balls is very important for this project. Table tennis balls generally have a seam where two halves were added together. This in itself is not a problem, since by making a hole in the middle one of those halves the seam will not be visible in the display. I heavily advise not to buy balls with a print on them, however, if you still buy those, it is important that the print on the balls is oriented to the back. This could result in a piece of the seam being visible from the front. When buying ping pong balls, also do not buy balls that shine, or are sold as beer pong balls (reflect light). They will not diffuse the light as well and it will look strange (an example of ping pong balls you should not buy).

- 5m 30LED/m WS2812b strip

An advantage of using an LED strip is that you end up with a lot more free space inside the ball. Making modifications or repairs will also be easier. However, gluing the LEDs in place is more work, and you will need to do a lot more soldering. Alternatively, you can buy two pre-soldered WS2811 strands. This is a little more expensive but will save you quite some work. A disadvantage of these LEDs is that they smell very synthetical, and the smell is a tiny bit noticeable when you are near them. Personally I would use the LED strip, just because I like my projects to be as perfect as possible, and the synthetic smell bothers me. Alternatively, the best option would probably be the non-waterproof version of the 50 LED stands, these should not smell, but that is just an assumption. These are however not available in most local webshops.

- (If using WS2812b) 3m of 3-strand wired

- 5V 5A power supply

Alternatively, it will be safer/neater to buy a cable with power brick already in there.

- Cable with plug (to provide power to your power supply)

I always get these from old broken devices, or from a thrift shop

- Microcontroller without pre-soldered pins

I ended using a nodemcuV3, just because I had one laying around and wanted the option to do something with wifi. If you have never used one of those before I advise you buy an Arduino nano

- JST 3 pin connector

These will just make connecting and disconnecting everything a bit easier.

- Some electrical wire

- Shrinking tube


- Column drill with 8mm drill

A normal drill could also be used, however, drilling large holes in a round object is not fun. Another potential alternative would be a soldering iron (don't worry, unless your table tennis balls are from celluloid the will not burn easily)

- 3D printer

You need this to print the parts that go in between the balls. I advise using a non-translucent filament color. As an alternative, you could CNC laser-cut the parts from wood or cardboard.

- Soldering iron

- Hot glue

And a decent supply of glue sticks

- (Phone) Flashlight

- small tie-wraps

- Rubberbands

Or someone else that can hold parts in place while assembling the ball. This will make your life a lot easier.

- Marker (optional)

Step 2: Printing the Panels and Helper Pieces

For the lamp itself, we need:

-11x "pentagon piece.stl"

-1x "pentagon piece nodemcu.stl"

-20x "hexagon piece.stl"

When printing these make sure if you want the part that will be visible in the final build to be the bottom layer of your print or the top layer. These parts can be printed in low quality, just use enough top/bottom layers so you don't see the infill. You can modify these parts to your own needs, for example by making holes in the pentagon panels for buttons, or a potentiometer. An Arduino nano should fit as well on the part for the nodemcu, you will just have to secure it in some other way.

To help construct the lamp we need:

-1x "hexagon helper.stl"

-1x "pentagon helper.stl"

-1x "pentagon helper top.stl"

-3x "construction helper.stl"

Alternatively, you can laser cut these parts, I do not have these files available at the moment, but it shouldn't be too hard to make them. On my first build of this lamp, I used laser-cut triplex that I painted black with acrylic paint. It ended up looking quite nice.

Step 3: Preparing the Table Tennis Balls

First off, let's start with something that is important when working with table tennis balls: Never lay them on a surface that is not clean, preferably always keep them on a towel. It is really easy to get hard to remove stains on the table tennis balls. Now we got that out of way, let's start with more things that I found whilst making things out of table tennis balls.

The location in which you drill a hole in your balls makes a lot of difference in how neat the final product will look. You want the part of the ball that faces outside to be as neat as possible. You want irregularities on the inside of the ball to be on the backside, you want prints on the table tennis balls to be on the inside and finally, you want to be as little as possible from the seam to be visible. If you got table tennis balls with prints you can choose to sand them off. I did this with water and very fine sandpaper. This does take quite some time, but the final result will be better.

If you have prints on your table tennis balls, it is probably best to drill the holes in the center of the print. If they do not have any prints you should get your flashlight and shine it on a table tennis ball to see the location of the seam and to see if there are any irregularities. You want as little of the seam and of potential irregularities to be visible from the front side. You can take a marker to place a dot on the ball on the location where you want to drill the hole (the opposite of the good side). If you decide to mark all balls at once, make sure to not just throw them on top of each other since the marker on one ball might rub off to another.

Step 4: Drilling Holes

If you have a column drill available this will be quite easy. Just make sure to place the table tennis balls on a towel. The column drill that I used had a 3cm hole in the bottom panel, and this was great for keeping the balls in place as I pressed the drill down. If you decide to use a hand drill it will probably be near impossible to drill 8mm holes. You will likely have to drill a smaller hole first to guide the larger drill.

After you drilled the holes you will have to remove leftover plastic from the balls. This will be easiest if you use your flashlight again. Just shine with a flashlight on the side of the hole and look at the bottom of the ball if you see any debris. If you see any you can either shake it out or use pliers to take it out. Make sure to do this now, because it will be hard to do once all balls are glued together.

Step 5: Pentagons

For all gluing goes, do not glue one ball to another, only put glue between the plastic parts and balls

Follow the following steps for constructing the pentagons:

-Place the "pentagon helper" on the ground and place 5 table tennis balls on top of it, with the holes facing up.

-Place the "pentagon helper top" on top of it and optionally use rubber bands to press the two helper pieces towards each other.

-Place the "pentagon piece" in the center, make sure the right side is facing towards the outside.

-Rotate all balls such that the holes are facing towards what will be the center of the ball.

-After making sure all balls are pressed against each other and are all touching the "pentagon piece" you can finally use hot glue to connect the balls with the "pentagon piece".

Repeat those steps for the remaining 11 pieces.

Step 6: Attach Your Microcontroller.

At this point, it is probably a good idea to connect your microcontroller, since everything is easily accessible right now. As can be seen at the image with the "schematic", connect the male JST connector to the Arduino. You can connect the JST connect to the beginning of The LED strip to make sure you get the wires for 5V and GND right. Then simply solder the GND wire to a ground pin on the Arduino, solder the 5V wire to the Vin pin on the Arduino (Vin pin, not the 5V pin) and solder the data wire to digital pin8. You should be able to attach the Arduino to the piece with some small tie wraps now.

Step 7: Adding Three Pentagons Together

This step has to be the most challenging step by far, so it might take you a few tries to get it right. It is doable with rubber bands, but a pair of extra hands will definitely make it a lot easier. please read these steps through before starting, because it is hard for me to explain this clearly.

Start by placing 3 pentagons (for the bottom half one of those 3 should be the pentagon piece with the microcontroller, this will be the center) on the "hexagon helper". Then insert the center ball and place the hexagon piece on top of it.

And now the real challenge starts. All 3 pentagon parts need to be lifted up a bit and need to be put in a stable position by placing the 3 "construction helper" pieces and 3 rubber bands around it. I used one hand to keep everything stable whilst using the other to place the "construction helper" pieces and rubber bands. next place 3 table tennis balls in the empty spots on the construction helpers. This will force everything in the correct angle.

Make sure everything if pressing against everything else and whist using one hand to keep a bit of force on everything use the other to glue two pentagon pieces together (do NOT glue the loose table tennis balls, just connect the pentagon pieces with the hexagon piece. Use glue across the entire edge, not just one dab. Wait for the glue to dry and then connect the third piece to it.

Glue the ball in the center of everything in place (only a few drops of glue are needed) and remove all construction pieces and remove the 3 loose balls.

Step 8: Adding the Rest of the Pentagons

Add the rest of the pentagons around the center pentagon. This should be a lot easier than the first one. The balls that go in between 3 pentagon pieces can also be glued in place.

Step 9: Final Balls

Get the hexagon helper and use it to get the final balls in the outer ring in place. This might require you to put some stress on the part, but it should be fine. Now repeat the last few steps for the top half and your done gluing balls!! just place the two halves on top of each other and admire your beautiful table tennis ball-ball. The halves might not fit well in every orientation, so check which orientation fits best.

Step 10: Electronics

I will explain the electronic stuff before actually building it. Since understanding everything is important for fixing problems. I'll use the image above to explain it. First of all the circuit uses a 5V power supply to power everything. Usually, someone will put this power supply on the end of a LED strip. The disadvantage of doing that if however that the LEDs on the end of the end stip will not shine as bright, this problem is usually solved by running extra wires from the beginning to the end of the LED strip (which you could do as well). I chose however just to provide power in the middle. The Arduino, which should already have the male JST connector, can now be easily connected to the beginning of the LED strip.

Now finally there is a small section of wire with two JST connectors without a 5V line in the bottom (see the second image). This section needs to be in between there when the Arduino is connected to a pc for programming. In other words, when the Arduino is receiving 5V over USB, the 5V line to the LEDs has to be disconnected, otherwise, stuff might break. You should make this piece with two connectors and no 5V wire now so that you can test your LEDs later on.

Oh, and I almost forgot:

The power supply can not be inside the ball. I tried, It will become an oven.

Even with the power supply outside of the ball, it will get a little hot inside, but nothing too bad.

Step 11: How to Make Sure You Are Wiring the LEDs in the Right Place.

All the LEDs in the ball are mapped to the hexagons, pentagons, and rings that they are part of. It is quite some work to map everything properly and to avoid you from having to do that, it is important that you wire the LEDs exactly like in the image.

The image shows the bottom half of the ball. LED 0 (The first led, the one that will be connected to your Arduino) should be at the green dot. The last LED of the bottom layer, LED 39, should be at the red dot. For the top half, you should follow the same line, but backward. Meaning that you start at the red dot, and work your way to the green dot.

To make sure that you place all LEDs correctly (In the case I failed to explain it clearly) you can run the code provided in this step. As can be seen in the images, this code will cycle through each individual group of LEDs (each pentagon and hexagon). If you see a group of LEDs lighting up that is not a pentagon or hexagon, you know that something went wrong. You can run this code with any number of LEDs, it does not matter how many LEDs you currently have connected.

Note: to put the code on the Arduino you will need to download the Arduino IDE and install the fastLED library. I will not go over this since there are plenty of good tutorials online on how to do that.

Step 12: Actually Wiring the LEDs (WS2812b Version)

Make sure to pay attention to step 11 about the wiring directions! The bottom goes from green to red, the top from red to green!

For the bottom half you will need to cut the following pieces from your strip:

-5 x 3 LEDs

-5 x 2 LEDs

-1 x 15 LEDs

They need to be soldered in the following pattern: 3,2,3,2,3,2,3,2,3,2,15 with the Din being on the first section of 3, and the Dout being on the last led of the section of 15. Make sure you solder the parts in the right direction. I used pieces of 3-strand wired of about 10cm in between each section. At the end of the 15 LED section, put a piece of wire that is 30cm. This will give you more room when taking the halves apart.

For the top halve you need the same amount of LED strip pieces as you used for the bottom half. only you add the min reverse order: 15,2,3,2,3,2,3,2,3,2,3. If you are uncertain if you are placing the LEDs in the right order just run the code from the previous step to ensure that everything is wired properly.

Use hot-glue to glue all the LED sections in place, you also might need to widen some holes to make the LEDs fit if the holes are not directed in the correct way. Make sure that no hot glue drips inside of the balls.

Afterward, you can put the power cable through the cap in the pentagon piece with the Arduino, so that everything can be powered.

Step 13: Actually Wiring the LEDs (WS2811 Strand Version)

Make sure to pay attention to step 11 about the wiring directions! The bottom goes from green to red, the top from red to green!

As can be seen from the images, it will be very "crowded" inside the ball. This means that you will not be able to access the Arduino and the hole for the power cable later on anymore easily. That is why you should already put the power cable through the hole in the bottom piece and glue it in place. I ended up powering the LED strand at the 50th LED instead of the 40th since there already was a connector in that place.

Actually putting the LEDs in is quite easy. Just put one in a hole, put some glue around it and follow the pattern described in step 11. During the placement of the LEDs, you can just check if you are placing them right by running the code provided in step 11.

To get some more freedom in between the halves I did not glue down led 39 and 40, so that they can come out when taking the halves apart, giving me some more space.

Step 14: Putting the Final Code on the Ball

Now the only thing left to do is to put the final code on the ball.

If you want a simple challenge, try to add a potentiometer to change the "Value" of the HSV, meaning you can easily dim the ball by turning a knob.

Alternatively, you can add a button to switch between modes or animations.

Or add wireless control if you used a NodeMCU, seeing people improve projects always makes me happy :)

Step 15: Admire Your Awesome Lamp!!

If you enjoyed reading this instructable, I would really appreciate it if you would support me by subscribing to my youtube or leave a comment here. I am trying to make more projects like this and seeing that people enjoy projects I make really motivates me.

Step 16: Extra Stuff Related to This Project

The python script provided is the script that I used to get the LEDs that form layers in the ball. At that point, I had already spent hours mapping the pentagons and hexagons (I do not know why it took that long), and I really did not want to also count LEDs in rings. The code is a mess but it works.

The first picture is from the first version of this ball. At that time I did not have a 3D printer, and also did not have the laser-cut parts yet. I was impatient and instead of gluing the balls to the laser-cut parts, I just glued the balls to each other. This was not practical, since that way you can see the gue from the outside. Anyway, it is a nice thing to do if you ever need a model of a "bucky-ball" for chemistry.

I included the second picture because I think that it could be a cool design for something like this. Just place the panels on the outside instead of the inside and you get an entirely different look!

LED Strip Speed Challenge

Participated in the
LED Strip Speed Challenge