View Full Version : [posted] TeensyLev - an acoustic levitator (adapted from Asier Marzo's Tinylev)

09-27-2019, 10:12 PM

Here is a project I started a few month ago that I finally completed. It is powered by a Teensy so I thought I might share it here, especially since I got some help on this from the forum a few month ago!

For those who do not know - as I didn't before...- , an acoustic levitator is a device that uses sound waves to levitate small objects. The idea is that, by creating two sound waves in opposite directions, one can construct a stationary wave and the nodes of this wave are stable equilibria: if you put a small object at the position of a nodes, it will stay put, hence levitates like magic. It can be anything as long as it is not too heavy. You can even levitate drops of water !

Acoustic levitators have been known for quite some time apparently but they where expensive to construct as they needed specific parts. A couple of years ago, Asier Marzo from Bristol University showed that you can construct a cheap levitator by using several readily available ultrasound transducers (similar to the classical Arduino ultrasound sensors).

Here is a link to the research paper (https://aip.scitation.org/doi/full/10.1063/1.4989995)

A great instructable to build a simple levitator (https://www.instructables.com/id/Acoustic-Levitator/)

A video that shows the levitator working (https://www.youtube.com/watch?v=yVDWrWpaBho)

I built the levitator of the instructable and it really works great but has some shortcomings. Basically, there are 2 X 36 transducers driven by a L298N (drawing about 10W total). The transducers operates at 40Khz and an Arduino Nano is used to generate the signals that go to both top and bottom arrays. It is important to have very stable signals and keep a precise phase delta between them. In fact, by slowly changing this delta, it is possible to move the position of the nodes, hence move the objects being levitated ! On the Arduino Nano, this is crudely done by bit-banging 4 gpio port... Thus, this method uses 100% of the mpu and is not very convenient to adjust the phase, the frequency, etc...

So, I decided to build my own version using a Teensy... And here it is :)


Some additional details for those interested:

The casing was designed with Fusion 360 and 3D printed with wood PLA. It was then stained and varnished to give it a retro look.

The sensor arrays are the same as in Asier Marzo's Tinylev, using Manorshi MSO-P1040H07T. They have the same shapes and there is the same spacing between them.

I reworked the electronic completely. I replaced the Nano by a Teensy 3.2 and the LM297 by a more compact motor driver. I added a step up/step down voltage converter connected to the Teensy DAC pin so that the voltage going to the transducers can be adjusted directly by the Teensy (a simple voltage divider on an analog pin is used for voltage reading feedback).

I added a Mini TFT screen with joystick from Adafruit, connected by I2C.

In order to generate the signals, I ended up using a FlexTimer combined with DMA to clock out a byte on a GPIO port at each of the two triggers of the timer. This provided the 4 pins needed to drive the two transducers arrays with a precise phase shift between them. This method also made possible to change the phase/frequency smoothly, without missing a single pulse. For this project, a rock stable signal is essential in order to prevent the levitating objet from stuttering. There might be a better way of doing it but I am not knowledgeable enough and I already got lost in Kinetis (awful) documentation trying to figure out how to use the FTM and DMA! At least, this approach frees up the MPU which has plenty of time to drive the mini TFT screen and query user inputs. Interrupts do not interfere with the signal in any way. Finally, I took advantage of copious amount of memory on the Teensy to write a firmware with several fancy options...

Overall, it was really a fun project and I think it makes for a great item on my work desk (when I do not feel like working :p)

09-28-2019, 06:30 AM
I was not aware of this idea before, it is very impressive that it can be done very simply and relatively cheaply! Interesting to see your 3D printed wood PLA structure, which is also something new to me, it looks very nice.

09-28-2019, 11:57 AM
Really impressive! Bonus point for using wood PLA, first time I hear about this. Très bien fait en plus!
Would you mind sharing the Teensy code?


10-04-2019, 04:48 PM
I made a git repo with the schematics, STL files and code for the project if anyone is interested:


I am not proud of this C++ code but at least it works...

10-26-2019, 07:30 PM
Awesome project!

It went up the PJRC blog :)