You are on page 1of 62

instructables

Acoustic Levitator

by UpnaLab

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:
More details and supplementary information about this levitator
How Acoustic Tractor Beams Work
Acoustic Delay Lines for Compact Tractor beams

Do not forget to watch the attached video. The rst 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:
https://www.youtube.com/user/asiermarzo
Twitter: @AsierMarzo

Acoustic Levitator: Page 1


https://youtu.be/yVDWrWpaBho

https://www.youtube.com/watch?v=ABjRnSYw-4k

Acoustic Levitator: Page 2


Acoustic Levitator: Page 3
Step 1: Gather the Components

Kit
Now you can get all the components in this kit:
https://www.makerfabs.com/index.php?route=product/product&product_id=508
https://www.tindie.com/products/Makerfabs/acoustic-levitator-kit/
https://www.robotshop.com/de/de/acoustic-levitator-kit.html
Individual components
We present a list of the necessary components. I have tried to place links for di erent countries. However, the same parts
can be found all around the world, some useful websites are http://www. ndchips.com/ http://www.dx.com/
http://www. ndchips.com/ http://www.lightinthebox.com/ http://www. ndchips.com/
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 le provided in Step 2)

1x Arduino Nano (US UK)


1x L298N Dual Motor Drive Board (US UK)
1x 130x90mm sheet (wood or acrylic) for the base of the driver board.
1x power switch
DC adaptor variable between 7V and 12V
DC female connector
Jumper wires
12AWG black and red wire
24AWG black and red wire
24AWG exposed wire (UKUSA)
Some Expanded Polystyrene beads to levitate (between 1mm and 3mm diameter)
An acoustically transparent material: A metallic grid, very thin fabric or teabag paper.
If you plan to run your levitator for days or at at voltages above 12V you may want to upgrade the
heatsink of the drivers. Thanks to john xesstu for the Info.

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£ http://amzn.eu/5ey6ty2

Acoustic Levitator: Page 4


Step 2: 3D Print the Base

3D print the base for the levitator. We used a 0.4mm nozzle and brim but no support. It should be possible to print it in
one piece. A 0.6mm nozzle also provides good results.
Included in this step, you have the rst version (v0 14 x 7.86 x 8.31cm). Or you can use the next version with some
reinforcement in the joints (v1 15.6 x 7.86 x 8.54cm).
You may also want to print the fantastic stand from Je Bearer
Or you can also use a full case to make more robust and look awesome. by Jakub_Nagy
Another cool case by INVESTEGATE

Acoustic Levitator: Page 5


View in 3D Download

https://www.instructables.com/ORIG/F78/ZW23/JKN8P8JS/F78ZW23JKN8P8JS.stl

View in 3D Download

https://www.instructables.com/ORIG/F9J/3WN6/JKN8P8KG/F9J3WN6JKN8P8KG.stl

View in 3D Download

https://www.instructables.com/ORIG/FDA/5SBH/JKN8P8KE/FDA5SBHJKN8P8KE.stl

Acoustic Levitator: Page 6


Step 3: Clean the Base

You may need to use a le 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.

Acoustic Levitator: Page 7


Step 4: Mark Polarity (using a Multimeter)

If you have a multimeter and some copper tape, this method is quite simple to perform.
DO NO TRUST THE POLARITY MARKINGS FROM THE MANUFACTURER!!!

Acoustic Levitator: Page 8


https://www.youtube.com/watch?v=0HaKv3aJQWA

Step 5: Mark Polarity (Using an Arduino)

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.

Acoustic Levitator: Page 9


Acoustic Levitator: Page 10
Download

https://www.instructables.com/ORIG/FFW/IH82/J98RXO3E/FFWIH82J98RXO3E.ino

Step 6: 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
Acoustic Levitator: Page 11
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.

Acoustic Levitator: Page 12


Step 7: 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 ngers to
make it lay as at 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).

Acoustic Levitator: Page 13


Acoustic Levitator: Page 14
Acoustic Levitator: Page 15
Acoustic Levitator: Page 16
Acoustic Levitator: Page 17
Step 8: Wire the Transducers

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

Acoustic Levitator: Page 18


Step 9: Solder

Solder the pins to the wires.

Acoustic Levitator: Page 19


Step 10: 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.

Acoustic Levitator: Page 20


Step 11: 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 ux and tweezers to facilitate the
soldering. Tin the other sides of the wires (the side that only has the tip exposed)

Acoustic Levitator: Page 21


Acoustic Levitator: Page 22
Step 12: Solder Arduino Headers

Solder the headers of the Arduino, backwards if possible.

Acoustic Levitator: Page 23


Step 13: Program the Arduino

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

Acoustic Levitator: Page 24


Download

https://www.instructables.com/ORIG/FJ1/MSSN/J66Q8UBZ/FJ1MSSNJ66Q8UBZ.ino

Step 14: 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 gures.

Acoustic Levitator: Page 25


Step 15: 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.

Acoustic Levitator: Page 26


Step 16: 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.

Acoustic Levitator: Page 27


Acoustic Levitator: Page 28
Acoustic Levitator: Page 29
Acoustic Levitator: Page 30
Acoustic Levitator: Page 31
Acoustic Levitator: Page 32
Step 17: 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.

Acoustic Levitator: Page 33


Step 18: Test for Shortcuts

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

Step 19: 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.

Acoustic Levitator: Page 34


Acoustic Levitator: Page 35
Step 20: 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.

Acoustic Levitator: Page 36


Step 21: 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.

Acoustic Levitator: Page 37


Acoustic Levitator: Page 38
Acoustic Levitator: Page 39
Acoustic Levitator: Page 40
Step 22: 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.

Acoustic Levitator: Page 41


Acoustic Levitator: Page 42
Acoustic Levitator: Page 43
Acoustic Levitator: Page 44
Step 23: 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.

Acoustic Levitator: Page 45


Acoustic Levitator: Page 46
Acoustic Levitator: Page 47
Acoustic Levitator: Page 48
Acoustic Levitator: Page 49
Step 24: 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.
72x 16mm 40kHz transducers. Manorshi provides MSO-A1640H10

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

Acoustic Levitator: Page 50


View in 3D Download

https://www.instructables.com/ORIG/F33/JHPQ/J66Q97EF/F33JHPQJ66Q97EF.stl

Download

https://www.instructables.com/ORIG/FW8/AD7J/JEIV6OGA/FW8AD7JJEIV6OGA.ino

Acoustic Levitator: Page 51


Step 25: 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 t most of the printers.

View in 3D Download

https://www.instructables.com/ORIG/F8H/G7VV/J6MGGHMI/F8HG7VVJ6MGGHMI.stl

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

Acoustic Levitator: Page 52


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 simpli ed code by morlok.

Acoustic Levitator: Page 53


Acoustic Levitator: Page 54
Acoustic Levitator: Page 55
Hi, I have made this and it works, so cool !!
I missed a base so I designed one in fusion 360.
I had a little fan lying around so I put it in there, total overkill but hey, why not :D.

I also included an STL without the fan hole.


https://www.thingiverse.com/thing:5101903

Any idea on how to achieve this?

Thank you
Acoustic Levitator: Page 56
Hi there, I have completed the experiment. I can levitate small pieces of paper.
But It is not levitating the liquid (water) drops. I even tried by increasing the voltage input from 9V
to 12V and then 18V. Could anyone please tell me what can be the reason? or what should I do?
That would be a great help !!
did you mark the polarity of the transducers? What happens with the droplet? It bursts? it just
drops? it does not deatach from the needle?
Thanks for replying!!
I did mark the polarity of all the transducers. The droplet (water) does not detach from the needle
60% of the time. And when it does, it drops.
What could be the problem?
have you tried with a bent needle with the tip removed? One way of measuring if the levitator
performs well is to put one of those silica transparent beads that come in a paper bag to keep
things dry (the smallest you can find), you would need around 9 to 13v to levitate it. Then once
that it is there, you can reduce the voltage until it drops. In a good levitator it will drop at 7v or
lower, if you need too much voltage then either some polarities are wrong, or they are not flat in
their sockets.
Hi there
I love the experiment, but i had a doubt
When you lift and descend the particles, are you variating the voltage provided to transducers, or
what is the explanation behind it? Thanks

Hi,

I made this project, it is very nice!


Look at my YouTube Video about the project:
https://youtu.be/YD_oOmr6Pjk

Try it!
David

Hi my friends,

I am really gratefull to you to share your experience. I have a problem. I hope you can help me.
I used the program for 2 transducers with arduino mega. i connected the A0-A4 to the l298n but i
do not measure 6v. Rather, i measure 0.16 Volt. What could be the problem? I also loaded
tinylev.ino and made the connections but still i measure 0.17 V. Would you help me pls?
The sketch is prepared for Uno or Nano.

Thank you for reply. Do you have any information how to modify to Mega?

A0 to A3 in MEGA are PORTF https://www.theengineeringprojects.com/wp-


content/uploads/2021/01/introduction-to-arduino-mega-2560-rev3.png
byte TP = 0b10101010;
void setup() {
DDRF = 0b11111111;
noInterrupts();
Acoustic Levitator: Page 57
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 200;
TCCR1B |= (1 << WGM12);
TCCR1B |= (1 << CS10);
TIMSK1 |= (1 << OCIE1A);
interrupts();
}
ISR(TIMER1_COMPA_vect)
{
PORTF = TP;
TP = ~TP;
}
void loop() {
}

Do you think it is the program?


Seems great to me.

i am really appreciate you answering my friend. Thank you!

However, my system did not work. What i tried as follows:


1- changing ultrasonic sensor.
2- changing the order of the cables
3- using l298n
4- changing the factor OCR1A
5- changing the distance between the sensors

Nothing did not work. i do not have an oscilloscope so it is not healty but i do not know what can i
do or should do.
Please see my configuration with the mega above. Some changes I made to the code:

Line12: #define OUTPUT_WAVE(pointer, d) PORTF = pointer[d*N_PORTS + 0]


Line68: DDRF = 0b11111111;
Line69: PORTF = 0b00000000;
Line71: pinMode(12, OUTPUT);
Line72: pinMode(13, INPUT_PULLUP);
Line75: for (int i =50; i < 53; ++i){

In the loop:
Line104: while(PINB & 0b10000000);
Line105: OUTPUT_WAVE(emittingPointer, 0); buttonsPort = PINB; WAIT_LIT();

Thank you man i think thanks to you i could improved the system. However, when i measure the
legs for bottom device (talking about l298n) there is no voltage difference. for the top there is. i
tried to use just that part. it felt like there is a gravitation effect:). Do you have any suggestions?
You need interference between the wave generated from top and bottom arrays to suspend the
particles. If there is no voltage difference for the bottom legs, first check if there is a short, (use
continuity check on your multimeter) between the red and black rails. Next check if the nana is
Acoustic Levitator: Page 58
outputting a 40 kHz square wave. Lastly, replace the L298 with another one.
Nanos are 3$. Perhaps testing with other ports? https://content.arduino.cc/assets/Pinout-
Mega2560rev3_latest.png
I modified the code to be compatible with the mega 2560. A 9V battery can power both the
TinyLev and Mega, but this quickly drains the battery and acoustic forces become weaker. I didn't
have an oscilloscope, but my NI myDaq device + Labview from college days were sufficient for
detecting polarity/waveforms, though the max sampling frequency is 200 kHz. Waveforms are
output from port F, and the OC1B (outputs sync signal) is located at pin D12. Pins for the buttons
are located from D 50-52. I am also using the 3D printed stand designed by Jeff Bearer. Particle
are stable when stationary, but the up/down movements are a bit unstable and particles fall down
when shifting. I would appreciate some help understanding how the animation sequences were
generated!

Changes to code:
Line12: #define OUTPUT_WAVE(pointer, d) PORTF = pointer[d*N_PORTS + 0]
Line68: DDRF = 0b11111111;
Line69: PORTF = 0b00000000;
Line71: pinMode(12, OUTPUT);
Line72: pinMode(13, INPUT_PULLUP);
Line75: for (int i =50; i < 53; ++i){

In the loop:
Line104: while(PINB & 0b10000000);
Line105: OUTPUT_WAVE(emittingPointer, 0); buttonsPort = PINB; WAIT_LIT();

Hello, building the TinyLev here. I got all the way to the end, everything looked good, and after
running silently for a few moments, a high frequency ticking sound (10's of Hz) begins coming
from the transducers, and the power lights on the motor board and arduino both begin flickering.
Cycling the power sometimes gives 10-30 seconds of operation before the ticking begins. I can
drive either side of the TinyLev from either side of the motor board indefinitely with no problems,
and I'm getting the 40 kHz signals when only one side is connected. Hoping it's a bad motor
board, I've ordered a couple replacements. Any other ideas? Thank you!
Not enough current from the supply? In total it will take around 800mA

Just to close this off, a different power supply fixed the issue in my original post. I used a piece of
plastic mesh to place styrofoam beads instead of tweezers, and got 5 beads floating at once.
This is just fantastic! I'm a teacher, and it will be an incredible way to end the year for my
students. THANK YOU, creators!

A small update- I swapped out the power supply for another 9V one I had, and that seems to
have fixed the ticking issue. The signals look good on both sides, 40 kHz square waves. Not able
to get anything to levitate when placing styrofoam with tweezers, so I'll try a little bit of plastic
mesh as a holder later today.
It's fantastic! I placed the styrofoam bits using a little sheet of plastic mesh as a sort of "spoon,"
after tweezers just didn't work.

Acoustic Levitator: Page 59


Levitador acustico ovni, piezas 3D diseñadas por mí

I like this build! Are you using only two of the 16 mm transducers or a different type/ frequency?
The transducers seem to be be further than 16 mm apart.
Ha, that it is awesome. Very good work.

thanks, now I'm doing the big one

First learned about this tech as part of university project last year and wanted one for myself ever
since, finally ordered myself a kit and got it built :)

For people buying the kits with all components to the uk beware, from my experience the power
supply provided is a low quality two-blade NEMA type A model, rated at 9 volts/ 1 amp. Upon
building the kit I made the mistake of using a uk 3 prong adaptor to provide power to the device
using the provided power supply and within 5 minutes had blown the fuse on the supply.
Thankfully, there was no damage to the circuit and the device is running smoothly now that I have
upgraded to a more suitable uk power supply with variable voltage 3 V - 12 V and rated for up to
2.5 amps at 12 V.

Pictured is the stable levitation of 12 EPS beads at 5 V, a seed and some aluminium foil at 9 V
and water at 12 V. This is my first electronics project (I am a chem eng student and studied the
tech with a focus on the fluid dynamics behind it) but as my skills develop I would like to continue
to upgrade the device's phase control capabilities - with my next objective to implement the
acoustic lock system, Acoustic Lock: Position and orientation trapping of non-spherical sub-
wavelength particles in mid-air using a single-axis acoustic levitator — University of Bristol in
order to stably trap non-spherical objects. I would like to know what modifications to the current
design (specifically the code) are required to implement such a system? Is it still possible to
retain the vertical movement functionality while implementing the acoustic lock, or are more
complex electronics required to facilitate this?

Thanks to anyone who can provide advice, happy building

Excellent work.
I've made the miniLev, but with no results. I've desoldered the transducers from the HC-SR0
(they are marked with T and I've checked polarity), but it can't levitate a tiny telgopor piece.

Acoustic Levitator: Page 60


How can i check that the transducers are working just fine?
I've 3d printed this (the nanoLev: https://www.thingiverse.com/thing:3617801) instead the one you
posted. The distance is 13mm
Nanolev using ATTiny85

How you do that , circuit diagram please

Fun project and a cool little nerdy conversation piece. Added UV LEDs for effect.

hai,Have a tutorial? I want to make it,this is so good

Great Project Asier!


I was wondering if there's any version of this code working on the Arduino Nano Every (cheaper
than Nano and Uno), which implements the new ATmega4809 processor with completely
different registry addresses. A quick compiling of your code for this model produces a lot of errors
due to the use of a 'low level' coding which is only compatible with the old ATmega328.
Thanks in advance
Thanks. If you do not need the phase control to move the particles up/down it should be toggling
the 4 pins at 80kHz (to get a 40kHz square wave). There is a simplified code around step 23 or
so that may do the job.
Has anyone tried using "waterproof" transducers that are on the market? They could be a way to
add more robustness to the project, but it's unclear to me what their enclosure would do to the
waveform out of the devices.

https://www.alibaba.com/product-detail/waterproof-ultrasonic-sensors-16mm-40khz-
long_60379452587.html?spm=a2700.galleryofferlist.0.0.1eba51b5pT7jms
can you tell me which program i have to download for this step please?

actually u should download the ardunio application then the code thats on this website that
@UpnaLab dropped will be opened through the Ardunio applocation
Nano_TinyLev.ino

Perhaps you could try a simpler project

Great project ! Thank you Asier :)

I made my own retro/steampunk version: I designed the case in Fusion 360. 3D printed it in wood
PLA and then stained it. I swapped the Arduino for a more more powerful Teensy 3.2. It uses
DMA and Flextimers to generate a perfect 40khz signals and the frequency and phases can be
changed on the fly much more smoothly than on the Nano (no click sound). It also uses compact
Pololu motor drivers to drive the transducers. There is a feedback from Teensy DAC pin to the
step up/step down voltage converter so that the micro-controller can adjust the voltage. Since it is
using DMA, there is plenty of compute time left on the chip so it can drive an Adafruit mini TFT

Acoustic Levitator: Page 61


screen and a joystick and there is also more than enough memory to store a nice firmware...

Really nice job! Very clean.

Looks amazing! what would be the difference in the circuit schematic between using the arduino
nano and the teensy 3.2 also would the teensy 3.2 be capable of an upgrade to say the 3.6 or
4.0 or something like that?
Hi. The teensy 3.2 is powerful enough for that project. There are still lots of RAM and compute
power time left available so I do no think using a 3.5/3.6/4.0 would help.

If anyone is interested. I posted the STLs, schematics and code on github:


https://github.com/vindar/Teensylev-V2

Your build is incredible!!!


That DMA can be used to output on multiple ports? Or to read (digital) from multiple ports? Do
you have any experience with the ESP32 as well?
Hello,

Yes, the DMA on the Teensy MCU is general purpose and is very flexible. It can use a GPIO port
as source or destination. Thus, it is possible to read/write a byte i.e. 8 pins simultaneously. In this
case, I used to it to toggle 4 pins: I just clocked the DMA transfer with an FTM timer, set at 80Khz
and with 2 triggers per period. The first trigger toggles pin 1 and 2 (the first array) and the second
one pin 3 and 4 (the second array). The phase is adjusted by moving the respective positions of
the triggers during a period of the timer.

I do not know much about the ESP32. As far as I can tell from the documentation, it seems that
the DMA controller is less flexible and I think you cannot use GPIO as a destination... However,
on the ESP32, there is a motor control module (MCPWM) that seems quite flexible and it might
be possible to use it in the same manner to drive a couple of arrays.

When you change the phase to move the levitated objects, do you find that there are unwanted
vibrations in the objects or are the objects levitated quite smoothly? Do you have a video of it
working?

Acoustic Levitator: Page 62

You might also like