Introduction: Levitating LED Lamp

Have you ever played around with magnets and tried to make them levitate? I'm sure many of us have, and although it might seem possible, if placed very carefully, after a while you'll realize it is actually impossible to do. This is because of Earnshaw's Theorem, which proves that it is impossible to levitate an object with only ferromagnetic materials. However, we have a workaround. Instead of using magnets, we will levitate the lamp using an illusion called tensegrity, making a lamp that looks like it is floating!

Step 1: Supplies

To make this lamp, there are a variety of supplies needed:


Decorative Supplies:

  • Cardboard (or wood, if using laser cutting)
  • Fishing line (any should work, and try to choose one as transparent as possible)


Step 2: Assemble the Electronics

First we need to assemble the electronic parts. This is simple and can be done with a few steps:

  1. Solder the 9V battery connector to the Arduino Nano board. This can be a little bit difficult, but it is an essential part to the success of the project because not enough power provided to the board will cause it to not function properly. Connect the red wire to the VIN pin, and connect the black wire to one of the GND pins on the board.
  2. Solder the pins to the back of the LED ring. On these 24 LED rings, there are usually 4 places for solder, but in this project, we will only be using 3: DI, VCC, and GND. The DO part will not be used in this project. Solder it with the wire pointing into the ring, as the outside of the ring will be hidden behind a piece of paper, but if the jumper wires are soldered in the wrong direction, it will protrude from the lamp.
  3. Connect the wires to the Nano. The DI has to be connected to the D5 pin, the VCC connected to 5V, and the GND to the GND, on the LED ring and the Arduino Nano, respectively.

And you are done with the electronics!

Step 3: The Tensegrity Sculpture

For this project, we are using tensegrity, which is a term used to describe the act of using tension to hold something in place. If you just want to create the sculpture, then you can download the Adobe Illustrator file, made for laser cutting, or look at the photo and cut it out in cardboard yourself.


If you want to understand how this works, then keep on reading below!

This tensegrity sculpture uses fishing line to make it seem more like a levitating object. In the annotated photo, the position of each of the 6 lines are highlighted, in separate colors. The longer red ones are the ones keeping the top from falling. Let's call these the "structural lines". Then we have the blue lines, which are much shorter than the red ones, holding the top portion up. Let's call these the "levitation lines".

In our tensegrity sculpture, the levitation lines are the ones holding the structure up. Because the top portion wants to move down because of gravity, the levitation lines must hold the structure up. When they are attached, they are very tense, holding the top portion of the structure up. There are one of these on two of four sides of the sculpture, even though in theory, one is enough to hold up the structure.

However, if you tried attaching just the levitation lines, you'll notice that it falls over easily. This is because the top is attached by only two points, which is not enough to provide a stable structure. Imagine a seesaw. It is attached by one line, allowing it to move freely. In our case, we have the top portion attached by two points, and two points form a line, so the top of our tensegrity sculpture, with only the levitation lines, is just a seesaw.

This is where the structural lines come in to play. These lines are also tense, and they hold the structure in position. If the top of the structure leans in any direction, structural lines in the other direction will hold the structure in place, causing the structure to become stable.

Even though it looks like magic, there is actually a lot of reason behind the entire sculpture!

Step 4: Assembling the Structure

Now it's time to assemble the structure to have the the lamp attached to it. This part is relatively easy:

  1. Find the base pieces. They are always the biggest square ones.
  2. Put the "arm" pieces on. Make sure they are all facing the same direction when looked at from their side. This ensures the tensegrity structure will be able to be assembled as intended.
  3. Put one of the side pieces on. This allows us to be sure the arm piece is not pushed too far in while we glue it, and makes sure the entire base of the structure can be aligned.
  4. Assemble the rest of the structure. The pieces should fall into place exactly, and with some gluing, you will end up with what is shown above.

After doing that, it is time to connect the fishing lines to the structures.

  1. Using hot glue, glue four pieces of fishing line to each of the corners of one of the portions of the structure. Make sure they are all the same length.
  2. Glue the fishing line to the corresponding corners on the other structure. I found it easier to glue if the entire structure was laying down, so I wouldn't have to hold it up with my hands.
  3. Glue the "levitation lines" in place. Push the top and the bottom portions as far away as you can, after the glue has cooled, and glue the last two fishing lines in between, connecting the arms of the structure.

If you have made it this far, then good job! You've done most of the work already :)

Now we need to assemble the lamp. This part is really easy:

  1. Glue the LED ring to the circular "wheel" piece with the two holes in the middle. Make sure the plastic support for the jumper wires are inside of the outside circle completely.
  2. Glue the two circular pieces together. Glue the first "wheel" piece with complete circle with two holes in the middle. These make the top of our levitating lamp.
  3. Tie the battery to the last rectangular piece. This piece has a hole made for the 9V battery, and tie it down, along with the Arduino Nano board, with rubber bands. Remember not to use glue here: the battery will eventually die and you won't have anything to use!
  4. Take a piece of B5 paper and glue it around the rim of the lamp. This works like a lamp shade, and it will also block the viewers from seeing the board and the battery in the lamp.
  5. You can have something hanging out of the bottom of the lamp. In a few of my photos, I tried using short, cut straw pieces to create a chandelier effect, but I later took it out because it was in the way of my photos. You can be creative with what you put here!
  6. Glue the top of the lamp to the last wheel piece. Make sure, again, that all of the pieces of fishing line are the same length.
  7. Glue velcro to the top of the second wheel and to the bottom of the top portion of the structure. This will hold the lamp in place while it is levitating. The use of velcro allows you to take it down and give it a new battery when you need it.

Step 5: Coding!

Now here's the fun part: coding what you want the lamp to look like! I have used a rotating RGB light here, but feel free to create whatever you want, and be creative with it!

I know I explained each part of the code independently in my last instructable, but this time, I included all of the explanations in comments in the code. While you explore the code, keep in mind what I've created: a rotating rainbow lamp. If that explanation wasn't good enough (I don't know how else to explain it), you can always look back at the video included at the beginning. You can see the code below, or download it from the Arduino Create website link below!

Arduino Create Link

(Also, if enough people ask me to explain the code in more detail, maybe I'll do something about it...)


#include<Adafruit_NeoPixel.h>// include the library to use the LED ring
#definePIN5// the pin which the LED ring is connected to
#defineNumPixels24// the number of pixels in the ring. there are rings with 8 LEDs, or you could use an LED strip with the Neopixels. Just remember to specify how many LEDs you have!
Adafruit_NeoPixel pixels(NumPixels, PIN, NEO_GRB + NEO_KHZ800); // declare the light object called pixels. The code will refer to the LED ring as this.
#defineDELAYVAL20// this decides how long the board should wait before the lights are rotated. If you make this smaller, then the rainbow colors will rotate even faster.
int r[NumPixels]; // this is the red value for all of the LEDs
int g[NumPixels]; // this is the green value for all of the LEDs
int b[NumPixels]; // this is the blue value for all of the LEDs
constint diff=31; // this sets the brightness value. The maximum number is 31, but any number x where 0 < x < 32 will work.
/////// Set the initial position of the lights ////////
int R=8*diff,G=0,B=0; // the initial position of all of the LEDs
for(int i=0;i<8;i++,R-=diff,G+=diff){
for(int i=0;i<8;i++,G-=diff,B+=diff){
for(int i=0;i<8;i++,B-=diff,R+=diff){
/////// Finish setting the initial position of the LEDs ////////
voidsetup() {
pixels.begin(); // turn on the pixels object
setLights(); // set the initial position of the LEDs
int idx=0; // set the initial position of the LED rotation
voidloop() {
/////// set the color of each of the LEDs ////////
for(int i=0; i
pixels.setPixelColor(i, pixels.Color(r[(i+idx)%24], g[(i+idx)%24], b[(i+idx)%24]));;
/////// finish setting the color of the LEDs ////////
delay(DELAYVAL); // wait DELAYVAL milliseconds
idx++; // move the rotation of the LEDs by one
idx%=24; // mod the value by 24. This restricts the value of idx to between 0 and 23, inclusive

Step 6: Complete!

Now it's time to power up the lamp, stick the velcro to the structure, and turn off the lights: it's showtime. Feel free to make whatever changes you want, and share with the world what you have created with this project!

Good luck and Keep Exploring!

Arduino Contest 2020

Participated in the
Arduino Contest 2020