Acoustic Levitator





Introduction: Acoustic Levitator

About: Build your own cutting-edge devices coming directly from the research lab. Ultrasonics, electromagnetism and more. Researcher at Bristol University interested in Ultrasound and in general any effect that wa...

Use acoustic waves to hold in mid-air samples such as water, ants or tiny electric components. This technology has been previously restricted to a couple of research labs but now you can make it at your home.

If you want more background and details you can check our Open Access papers:

Do not forget to watch the attached video. The first video is the instructions whereas the second one is a fantastic video by Physics Girl explaining the physics behind it.

If you want to build other devices coming directly from the research lab subscribe or get in touch: Youtube:

Twitter: @AsierMarzo

Step 1: Gather the Components


Now you can get all the components in this kit:

Individual components

We present a list of the necessary components. I have tried to place links for different countries. However, the same parts can be found all around the world, some useful websites are

  • 72x 10mm 40kHz transducers. Manorshi provides MSO-P1040H07T at a very good price, minimum order is 500 but they will ship with less at a higher price. Also Ningbo has good ones FBULS1007P-T
  • 1x 3D-printed TinyLev support. (STL file provided in Step 2)

Necessary Tools

  • 3D printer -> you can use an online service
  • Soldering Iron, Tin and Flux.
  • Hot-glue gun
  • Multimeter
  • Cable Peeler
  • Screwdriver and Pliers.
  • Drill
  • Oscilloscope with two probes (optional) -> you can get one for less than 50£

Step 2: 3D Print the Base

3D print the STL file included in this step. We used a 0.4mm nozzle and brim but no support. It should be possible to print it in one piece.

  • You may also want to print the fantastic stand from Jeff Bearer
  • Or you can also use a full case to make more robust and look awesome. by Jakub_Nagy

Step 3: Clean the Base

You may need to use a file to clean the edges around the levitator and clean the sockets. A Dremel will do the job faster. You may also want to drill a hole in the centre of each side, this will allow to insert a camera, a needle or evacuate liquids.

Step 4: Mark Polarity (Recommended Method)

The easiest way to mark the polarity is to use the Arduino itself. This method does not require an oscilloscope or to poke the transducers inside.

Install the code from this section into the Arduino. Connect one wire to A0 and another wire to GND.

While the Arduino is connected to the PC, run the Serial Plotter (Tools->Serial Plotter) and be sure that the speed is set to 115200.

When a transducer is connected between A0 and GND the signal will do one of the following things:

  • Signal goes down or remains at 0. Then, mark the leg connected to GND.
  • Signal goes up or remains at 1023. Then, Mark the leg connected to A0.
  • It is important to not touch the transducers leg or the wires while doing that or the values will reset.

If it is still not possible to detect the polarity, poke the inside of the transducer with a thin wire and check if the spike goes up or down (like in the obsolete method). Spike up -> mark A0 leg, spike down -> mark GND.

Step 5: Mark Polarity (Obsolete Method)

The transducers have polarity and it is important to glue them in the base oriented with the same polarity. Do not trust the marks made by the manufacturer, they are not reliable at all. The easiest way is to connect a transducer to an oscilloscope and poke the inside with a thin wire. If the spike goes up, mark the leg connected to the positive part of the probe. If the spike goes down, mark the leg connected to ground. You can use two stripes of copper to make this process faster. After all, you will need to mark 72 transducers.

Step 6: Glue the Transducers

Apply a little bit of hot glue on the side of the socket (if you apply glue near the holes for the legs, the legs will be covered in glue when you push the transducers through), push the transducer in and apply some pressure with your fingers to make it lay as flat as possible in the socket.

It is very important that all the marked legs are pointing towards the centre of the device (where the hole is).

Step 7: Wire the Transducers

Wrap the exposed wire in six concentric rings around the legs of the transducers.

Step 8: Solder

Solder the pins to the wires.

Step 9: Prepare 4 Long Wires

Now, we need to make the wires that connect the transducers to the driver board.

2 red wires and 2 black wires. They need to be around 1 meter. In one side there is only the tip exposed. On the other side there are 3 segments exposed, in the video it is shown how this can be done.

The side with 3 segments will go into the transducers rings and the side with only the tip will go into the driver board.

Step 10: Solder Long Wires

Solder the long wires to the transducers. The side with the 3 segments exposed goes into the transducers, one segment for each ring. Each side of the levitator has a black and a red wire. You can use flux and tweezers to facilitate the soldering. Tin the other sides of the wires (the side that only has the tip exposed)

Step 11: Solder Arduino Headers

Solder the headers of the Arduino, backwards if possible.

Step 12: Program the Arduino

Upload the code provided in this step into the Arduino Nano.

Step 13: Glue Arduino and Driver

Glue the Arduino Nano and the Driver into the base. It is important to use the positions and orientations of the figures.

Step 14: Create the DC Supply

You will need to solder the DC female connector to the Switch and leave two wires prepared to supply power to the driver board.

Step 15: Glue DC and Wiring

Glue the DC connector and the switch.

Connect the red wire from the supply into the 12V input of the driver.

Connect the ground from the supply into the middle connector of the driver, also insert a male-female jumper there.

Insert a male-female jumper into the 5V input of the Driver.

Connect the male-female jumpers that we connected to the driver into ground and 5V of the Arduino.

Connect 4 female jumpers from the Arduino (A0,A1,A2,A3) into the inputs of the driver (IN1,IN2,IN3,IN4).

Connect a female-male jumper into ground of the Arduino, this jumper can be connected to D2, D3 or D4 to move the particles up, down or reset them to their original position.

Connect D10 to D11 with a jumper. This is vital for the synchronised emission of the signals.

Step 16: Test the Driver

When powered (always between 6V and 12V) the output signals of the driver (IN1&IN2 or IN3&IN4) should output a 40kHz square wave of twice the voltage provided to the circuit.

Step 17: Test for Shortcuts

Test that there are no shortcuts between the red and black wires of the levitator.

Step 18: Test the Transducers

Connect the levitator to the driver board and switch it on (always provide between 6V and 12V). For testing, 6V will be enough.

You will need two probes with transducers connected (pay attention to connect the marked leg into the positive part of the probe).

Transducers of the same array (side) should be in phase.

You can correct mistakes by cutting the exposed wire and bridging with wires.

Step 19: Test Optimum Resonance

Connecting the wires as shown in the right should provide optimum performance and minimum power consumption. Otherwise, swap the red and black wire.

Step 20: Secure the Wires and Glue the Legs

Apply some hot-glue to glue the wires to the levitator for mechanical support.

You can now glue the legs.

Step 21: Levitating Solids

Provide up to 10V. You can use a tweezer to place the particles. Also a metallic grid or thin fabric (acoustically transparent) will be useful since the particles can be placed there and then introduced into the levitator.

Step 22: Levitating Liquids

It is necessary to adjust the voltage to the type of liquid. Too high and the droplets will pop, too low and they will fall. For water around 9V is enough and for alcohol around 8V.

It is important to place a thin fabric on the bottom to absorb falling droplets, they can damage the transducers.

Place a particle to have a guidance of where to inject the droplets.

A syringe with a bent needle and the tip removed is the best option.

Step 23: BIGLev (optional Device)

If you want a more powerful levitator you can use the 16mm transducers. The process is exactly the same but you will need to 3d-print the levitator base in 2 part and glue them together (one half is attached in this step). This levitator can take up to 20V in the driver board (40Vpp) and levitate solids of up to 6g/cm3 but it is not as easy to use for liquids.

You can use instead 25kHz transducers, they are weaker but would allow to levitate larger objects. For that use the simplified code attached, and modify it to match your frequency.

Step 24: Mid-Lev (Optional Device)

If you want to use 16mm diameter transducers but BIGLev is too big, you can use MidLev. It uses 16mm diameter transducers but it will fit most of the printers.

Step 25: MiniLev (Optional Ultra Low-budget Device)

This solution only requieres an Arduino Nano and two transducers. You can desolder the transducers from a cheap Range Finder HC-SR04.

Install the provided Arduino Code from Step 12. Connect pin D10 to D11. Connect one transducer to A0 and A1; and another transducer to A2 and A3.

Put the transducers opposite to each other to levitate a particle between them, it is easier to place the particle with a metallic grid.

You can use this 3D-printed case designed by IB-as.

You can also use the simplified code by morlok.

Make It Fly! Contest 2017

First Prize in the
Make It Fly! Contest 2017

36 People Made This Project!


  • Woodworking Contest

    Woodworking Contest
  • Microcontroller Contest

    Microcontroller Contest
  • Make it Move Contest

    Make it Move Contest

We have a be nice policy.
Please be positive and constructive.

3 Tips

I have access to only very old and innaccurate oscilloscopes. But the arduino method without poking was fairly inconsistent. Poking however, worked very well with the arduino method.

Much easier way to determine polarity: Use continuity tester between each leg one at a time, and the metal ring AROUND the transducer top. Don't poke the transducer face, it's not conductive anyway.

Are you sure about that? that would imply that the Piezo crystal is always placed with the same orientation. In any case, I will try it. If it works, it is a very nice and simple method. Thanks for the info.

37 Questions

Hello. I built the Tinylev and it works perfectly. But now, I would like to control the position of the particle by using the Joystick of a Wii Nunchuk instead of using the buttons connected to D2,D3 and D4. I insert the code that read the position of the joystick in the loop, but it seems it modifies the frequency of the signal since the levitator is no more able to levitate a particle. Do you have an idea to solve this problem?

Best regards.

Since the arduino can only run one thread it is hard to combine logic with accurate emissions of phases. I totally recommend getting a another nano that process the joystick and activates the D2,D3,D4 pins.


1 more answer

Thanks for your answer. I tried your solution and it works well.

Best regards.


I couldn't find any 40kHz transducers, but only 4kHz, will it work too?

There are some links to 40kHz transducers. 4kHz will not work and also they are really loud. Best.

If we accidentally got glue on the transducer legs, would that interfere with the sound transmissions? And what could possible affect the frequencies of the two bases? Because one of ours is functioning at a higher frequency.

It does not matter at all, as long as the metal wires make good contact with the legs..

where did you measured the current value in Step 19.?

In a regulated power supply. In any case, this step is just for testing that everything is going ok.


Hello M.Marzo I am a High School student and I am building an acoustic levitator for a physics project. My problem is with step 4(marking the polarity) using the arduino method. I am not expreinced in programing and have in fact never programed anything before. I managed to install the software proparly and get it working (the port+type of Board).

Once I click SERIAL PLOTTER a blank page shows up. What can I do? please...

Thank you


Screenshot (41).png

hello again... ^-^ After several hours of searching it turned out I didn't upload the code into the arduino. Thank you very much for the attention, and I would like to ask once more for your help. I finished step 15. My problem is with the motor driver. I know certain information, like the voltage between gnd and IN 1/2/3/4 is about 3v, the voltage between gnd and both jumpers is 5v, and I am using a 9v adapter.
There is nothing on OUT 1/2/3and4 0V.
What should I do, is the problem with the wiring.
Thank you very much.

Have you uploaded the code in to the Arduino?

Have you selected the correct port for the Serial plotter?


hi asier,

when i put the particles in the levitator its really hard to find a spot where it will say still and levitate, should it be so ? (when i watched some videos, they made it seem really easy, with the first try, while i need 5-6 ) also could u tell me what is the max volt the transducers can take ? and one more thing when i try the D2 D3 D4 pins to move the particles they wont move, what might be the case ? thank you so much in advance.

When using styrofoam particles of around 2mm size it should be enough with even 6V and it should be very easy, especially if you use a piece of fabric or metallic grid.


Hi ! I love your project, I would like to make it but is it possible without oscilloscope ?


Yeah, there is an alternative method using the Arduino nano. It is described in step 4



how can I modify the frequency and density parameters in the simulation software? It seems there are only two scenarios available (EPS & water) and I want to simulate other materials with different frequencies.

Thank you so much already for the sharing of this amazing work.

You can change the frequency of the transducers either when you add them or when they are selected in the Fr: textbox

You can also add manually the speed of sound and density for using different materials. However, when you do levitation in air the particle material does not matter at all, everything is solid compared to air.


Can I use an Arduino Uno(R3) instead of the Nano? And

If I want to increase the number of transducers, do I need to do anything different?


Hello Asier, I am trying to mark the polarity using the Arduino but when I click on the serial plotter it lets me choose a speed but the rest of the screen is blank. Any clue on what I'm doing wrong? I have been stuck on this for a while and only have 15 days to figure it out.

1 reply

You need to upload the code for that step in the Arduino. Then on the Serial Plotter be sure that the Correct port and speed have been selected. You can also use a regular oscilloscope if you have one around.

Hi ,

When i test the transducers at the step 18 , some of them are in phase opposition.

Do you have any solution to solve this problem ?

Thank you !

1 reply

If they are from different bowls it does not matter.

Give it a try anyway, it may have enough strength for your applications.

If they are from the same bowl and they are in reversed polarity it will be decrease the levitation strenght. You can cut the wires behind and in front of that transducer and put new wires in zig-zag.

hi I am not able to determine the polarity on the arduino sofware. I am a complete bigenner and this is what it shows

1 reply

Hi Asier , I have modified mini_lev.ino optimized to be more didactic, just to use a couple of ultrasonic transducers and uses software interruptions of a timer at 80 Khz.
No need to use external pins for synchronization and no delays with nops instructions.

1 reply

Great, I have added a link to your code if you do not mind. Best.


At 40 KHz this is within the hearing range of cats and dogs. I didn't see that the SPL of the device was stated. I would be careful with this device if one has pets in the house.

Maybe the frequency could be raised to 100KHz.

Thank you for all your help. I tested all of the transducers and the voltage coming out of the driver and everything seems to be working properly, I will try the foam balls.

Hi Asier!

First of all I want to thank you for this great project and I have a question for the l298n driver. How did you get the output voltage double the input voltage and do you think it is possible to use the same thing for two DC motors?I can't find something similar.

And a little advice for those who try to make the Acoustic Levitator and do not have 24 AWB wires nearby they can use cat 6 UTP cable cables that have 23 AWG and from my experience I can say they are going to work great and cat 7 which are 26 AWG .

1 reply

The peak to peak voltage on the transducers is double the input voltage because they work using push-pull.

The L297N is actually used to drive 2 DC motors, you cannot double the voltage but you can invert the rotation direction.


It's very impressive!!

I have a question!

Can I make a different waves between top array and bottom array??

If we can, can you teach me how to do it??

and! what does this codes mean about?

// generate a sync signal of 40khz in pin 10

noInterrupts(); // disable all interrupts

TCCR1A = bit (WGM10) | bit (WGM11) | bit (COM1B1); // fast PWM, clear OC1B on compare

TCCR1B = bit (WGM12) | bit (WGM13) | bit (CS10); // fast PWM, no prescaler

OCR1A = (F_CPU / 40000L) - 1;

OCR1B = (F_CPU / 40000L) / 2;

interrupts(); // enable all interrupts

1 reply

Hello, I have a question about a code. Can we regulate the frequency of top array and bottom array respectively?

1 reply

You will need to use 2 timers, one for each array. Remember that those transducers will only operate at 40khz+-1khz, they are quite narrowband. By using slightly different frequencies you can create travelling waves, but I do not think the Arduino has enough resolution for that.

I am on my way to build a TinyLev and while 3D printing, i noticed some strange support structure. The column like structure which supports the two halves have a checker board pattern. Was there any specific reason for selecting this particular pattern?

1 reply

They are quater wavelenght grid, to cancel reflections at 40kHz but I have never measured how effective they are.

What is better than an acoustic levitator with a laser shining down the path of the nodes? TWO lasers--one on each end. My first laser began to get dim so I replaced it and while I was at it (and while I had ordered a package of 10 lasers, I figured I'd put one on each end. Simply wire them in parallel to the same 5-volt connection that powers the Arduino on the motor driver. I would suggest that if anyone is going to drill a hole in the center of the printed frame, start with a small hole and work your way up using every drill bit size in-between, otherwise your drill will catch and you won't get a smooth hole. My first hole was rough and I had to hot-glue the laser but the second one friction fit nicely, with a 15/64" hole.

1 reply

That looks amazing. To cut it I use an ultrasonic knife, it works great on plastics. I will try to publish an instructables on it since the commercial ones are a little bit pricey. I also use a dremel with a filing tool to drill through the bases, I know it is not ideal but it does the job.