Welcome to my version of the LED reactive table! I was inspired by previous work using discrete LEDs, such as this one, but I figured it would be easier and more fun to use NeoPixels — programmable RGB LEDs that can be set to any color you want. The table consists of a large array of infrared emitters and sensors, which are used to detect the rough location of objects on or above the table. This data is fed into a microcontroller that lights up the NeoPixels in interesting patterns. Check out some of the examples in the videos above.
Now, I’m not going to lie to you: this project is a lot of work, and some of it is pretty tedious. But there are a lot of useful techniques and components that you could use for other kinds of projects. The design is also fairly modular, so you can make it as big or small as you like. Don’t be intimidated by the number of steps — I just broke the process into a lot of small, detailed steps.
There are five main components of the table:
(1) IR emitters — an array of simple IR LEDs that cover the surface of the table creating a uniform field of infrared illumination. These LEDs are all wired together and are on all the time (although the light is not visible to the naked eye).
(2) IR sensors — an array of IR photodiodes, wired separately so that we read the voltage on each one individually. When infrared light from the emitters is reflected back by some object (your hand, e.g.), the photodiodes allow current to flow through them, which we can measure. The voltage varies according to the strength of the reflected light.
(3) Sensor multiplexer — a set of analog multiplexer boards that allow us to read any of the IR sensor values. We will need four boards for this version of the project, since it has a lot of sensors.
(4) NeoPixels — each sensor has a group of neopixels (also known as WS2811/WS2812 RGB LEDs) associated with it; the value of the sensor is rendered visually on them. In my version, each unit consists of one IR sensor and a ring of 12 pixels — in the code, I refer to this unit as a “cell”.
(5) Microcontroller — the microcontroller runs the code that repeatedly reads all of the sensor values and renders the visual effects on the LED pixels. I provide the code for my animations later in the Instructable — feel free to copy and modify to your liking. I use the FastLED library to drive the NeoPixels.
My version of the table has 61 cells — that is, 61 IR sensors and 61 LED rings — organized in a hexagonal grid. I will show you how to lay out the grid and the LEDs in this arrangement, but there are many other ways it could be done. And again, you can make a table with as many or as few cells as you want.
You will need the following skills to complete this project: soldering (there is a lot of soldering to do), basic wiring, some Arduino programming, attention to detail, and tons of patience!
Step 1: Materials
Below you will find exact counts of the materials you will need. The total cost of the materials will vary depending on where you buy them, but the LED rings are the most expensive component, and will probably set you back at least $100. I strongly recommend buying extras of almost everything — parts inevitably get lost, damaged, or are defective.
(1 sheet) Black cardboard or foam core, roughly 18 inches by 30 inches (you can always trim it down later). You can use other materials, but make sure that it is relatively easy to punch holes through it for the electronic components.
(156) IR emitters: 940nm wavelength IR LEDs. You will need 156 of them, but get more; they are cheap. I bought these.
(61) IR photodiodes: make sure they detect 940nm IR. You will need 61, but get extras. For example, these ones
(52) resistors in the range 6.8 ohms to 12 ohms. The exact value depends on the voltage rating of the IR emitters you buy. We will be powering groups of three in series with 5V input voltage. You can use this calculator to estimate the size of the resistor you’ll need.
(61) 10K ohm resistors; one for each IR photodiode. These serve as pull-up resistors.
(61) 12 pixel WS2812 rings — I bought mine from AliExpress (e.g., these) because they are cheap, but they take a while to get in the mail.
(50) 10cm three-wire female-female jumpers — like these.
A Dupont connector kit like this. I also recommend getting the crimping tool.
(4) Analog multiplexer boards — I bought these ones
(1) 5V 20 amp power supply — I bought this one
(1) ESP32 microcontroller — the ESP32 is an amazing microcontroller, with tons of memory and processing power, which you’ll need for this project. You can get them on Amazon (e.g., here), but AliExpress has more choices for less money if you’re willing to wait to get them (I bought this one).
You will also need a variety of hookup wires and prototyping boards to hold the components:
22AWG or 24AWG bare copper wire or bus bar wire. Get a decent size spool.
22AWG or 24AWG hookup wire. I like the silicone coated stuff because it is so flexible and heat resistant. Get a few spools of different colors.
18AWG or 20AWG hookup wire in black and red for power
28AWG hookup wire for the sensors — you’ll need a lot because there is a separate wire for each of the 61 sensors.
Prototyping boards like these.
Step 2: Building a Single “cell”

Before we get to building the full table surface, I’ll show you how to make a single “cell”: a set of IR emitters, a single IR sensor, and an RGB LED ring. In some sense, the table design is simple: it is just a large array of these cells.
In the first photo you’ll see a drawing of the layout. I organized my cells as interlocking hexagons, and in later steps I’ll show you how to lay them out on the cardboard surface. For now, we’ll just look at how a single cell is built, so the exact layout is not important.
The IR emitters sit at the intersection of each hexagon edge; the IR sensor is in the middle, surrounded by the LED ring. The second photo shows the layout on the cardboard (I actually drew two cells, but I’ll only wire one of them).
Step 3: Punch Holes for the IR Sensors and Emitters

The electronic components of the table sit on the top surface of the cardboard, but the wiring is all on the back. To make this possible we punch holes through the cardboard in the desired pattern. In order to make the components fit I built two hole punching “jigs” that ensure proper spacing of the holes.
The first jig is for the IR emitters and sensors. I soldered a two-pin piece of right angle header onto a small protoboard (see photo 1). The spacing of the holes exactly matches the spacing of the LED leads. You can add some hot glue and sharpen the points to make it easier to punch through the cardboard.
Start by punching holes for the emitters at each corner of the hexagon (see photos 2-4). Notice that the holes are aligned horizontally — this will be important for wiring on the back.
Next punch the holes for the emitter in the middle — notice that these holes are aligned vertically. See photo 5. When you’re done, you should have the pattern shown in the last photo.
Step 4: Punch Holes for the RGB LED Ring

Each RGB LED ring has six pads on the back (see first photo) — three are inputs and three are outputs, which makes them easy to chain together. My strategy for attaching these rings to the board is to solder a three-pin piece of right angle header to each set of pads, then push these pins through the cardboard, and link them together on the back with three-wire hookup.
To punch the holes for the ring I made another jig, which is just a ring with the pins soldered on and sharpened. You can add some hot glue to make the set up stronger, so it doesn’t break under the strain. I also glued on two pieces of thin wire to provide a “cross hair” for aligning the ring. See photos 2-4.
Line up the cross hairs with the center of the ring and push the pins through to create the six-hole pattern (photo 5). The final result should look like photo 6. Notice how the pins of the LED ring line up to the side of the center — this is crucial to the wiring on the back.
Step 5: Insert the IR Emitters and Sensor

Get a bunch of IR emitters (the clear IR LEDs) and one IR sensor (the dark one) for each cell. To simplify the wiring, and keep myself from making mistakes, I have all the IR LEDs oriented the same way with respect to their polarity. For the emitters all of the positive leads (the longer ones) are on the left, and all the negative leads (the shorter ones) are on the right. For the sensors the positive lead is on the bottom and negative lead is on the top. See the first photo.
Push all the LEDs through the holes. They should fit snugly. You may need to wiggle them a bit to find the hole through the back side of the cardboard. It should look like photo 2 when done.
Flip the board over — you should see the leads poking through, with all of the positive ones (the longer ones) oriented the same way.
Source: NeoPixel Reactive Table