Introduction: Sonolithography: Making Patterns With Ultrasound

About: I make things

Sonolithography is a way to pattern finely sprayed materials onto different surfaces using sound. The way it works is that tiny droplets go through an acoustic field and experience a very slight force towards the field lines. If we spray a mist of dyes and inks into these fields, they will pattern to produce interesting shapes that uncover the invisible acoustic forces.

Sonolithography is something that researchers have been developing and may have applications in cell patterning in biology, patterning of conductive traces and active materials in fabrication, or other fields. It also is just really cool to explore the different aesthetic shapes you can make with it.

In this Instructable I will cover how to build the electronics and transducer array so that you can try making the patterns yourself. The electronics for this project cost less than £100 which is mostly the price of the transducers themselves. It should be possible to re-create the whole system with the tools in a Makerspace or Fablab. Many of the ideas here come from Upna Lab's work making acoustic levitators and other ultrasonic arrays, which have also been documented in their own Instructables and are well worth checking out.


This project supports my TEI paper Tangible Explorations of Sonolithography. Where I use the setup and a tangible controller to iteratively and creatively explore Sonolithography.

Supplies

For the driver electronics to control 16 transducers:

The transducer array:

  • 16x 40kHz 10mm transducers - we use Murata MA40S4S which are fairly expensive, but other transducers such as these Manoroshi ones will also work.
  • 2x 400mm lengths of 16-way ribbon cable
  • 16x 3-way IDC connector (optional)
  • 32x optional male 1x1 Dupont crimps
  • A base plate from 300x300mm 3mm acrylic
  • 3D printed arms
  • m4 x 6mm machine screws

The Atomiser assembly

You will also need a power supply capable of supplying 18V.

Step 1: A Note on Safety

High Amplitude Ultrasound

Even though the frequencies that the 40 kHz transducers we're using here are well outside the range of human hearing which is usually up to about 20 kHz, it's still worth appreciating that the transducers each output a 130 dB sound. There hasn't been much research done into the long-term effects of exposure to these frequencies, It might still be worth using some hearing protection if you will be playing with this technology for a long time.


Atomised Materials

The materials we put through the atomiser haven't necessarily been designed to be in an aerosol form. Breathing in different substances can be dangerous and have long-term health effects. When dealing with atomised dyes and other materials, I generally wear a respirator and do it in a well-ventilated environment.

Step 2: Pico Driver Circuit

The electronics for this project can all fit onto a couple of breadboards. A more robust solution would be to design the control electronics as a PCB but we opted to present it as a breadboard project so that others can easily make their own and modify it with little investment.

A Raspberry Pi Pico provides the main control for the board. To control all 16 transducers the waveforms are serialised and sent to a couple of shift registers that control the gate driver ICs. The gate drivers take the digital signal and amplify it to a 0-18V pulsed wave to drive the transducers. The transducers take the digital square wave and produce a sinusoidal pressure wave due to the mechanics of the resonating disk.

Power:

There are two voltages in this project: 3.3V supplied by the Raspberry Pi Pico that is used for all the control electronics, which is derived form the USB power to the Pico; and 18V which needs to come from an external supply that is what actually drives the transducers.

Signals

We make use of the Raspberry Pi Pico's Programmable IO (PIO) to serialise the waveform data for each of the transducers. This works by having a separate piece of code that runs in parallel with the main processing on the pico that's only role is to read the wave form data and set up the appropriate timing to send the signals to the shift registers.

Capacitors

The gate drivers need to be protected from voltage spikes, so we use a pair of decoupling capacitors per driver. (These aren't shown in the first fritzing diagram because they cover the drivers.

Wiring

For connections between parts of the breadboard, we use solid core wire because this fits well into the holes of the breadboard. For the wires going to transducers we used ribbon cable instead to avoid creating a rats nest. This doesn't come as solid core wire so either you can strip and tin the ends with a bit of solder to make it all one piece that fits into the holes of the breadboard or you can crimp the ends with dupont connectors.

Step 3: Transducer Array

The arrangement of transducers is up to you. In my setup, I use an acrylic baseboard with holes for transducer mounts to be screwed into which allows for some reconfigurability.

I have a number of different boards for different shaped arrangements. In practice, I've found that radial arrangements work best so that all the transducers are an equal distance from a central point, but there's definitely room for exploration.

The baseboards were cut on a laser cutter out of 3mm acrylic, then the holes had to be threaded using a thread-cutting drill bit. DXF files for our different boards can be found attached.

The transducer arms were 3d printed in PLA. and have little clips for holding the wires down.

Each transducer has polarity and it isn't the same between transducers in Upna Lab's guide they explain clearly how to work this out.



Step 4: Firmware

The firmware for the Raspberry Pi Pico is all written in C using the Pico C SDK. This is because the timing for serialisation of the transducer waveforms needed some very low-level timing requirements which are only accessible through the C SDK.

What the program does is constantly listen to the USB and UART serial inputs for phase and amplitude data. When it gets new information, it populates an internal wave buffer that is constantly being transmitted to the shift registers by the PIO workers.

The firmware is up in this Github repository along with the source.

To upload the firmware to your Pico, hold down the reset button while plugging it into your computer. It should come up as a removable drive, you can then drag the uf2 file onto the removable drive and it will restart and start running the program.

Step 5: Atomiser Assembly

To produce a mist that will be patterned, you need something that makes small enough droplets that aren't moving too quickly. I use an atomiser or nebuliser that is traditionally used in humidifiers, they work by vibrating a metal disk with microscopic perforations and pushing out small droplets. You can buy just the electronics and disk for not too much money, and the disks are replaceable if they get clogged.

I've designed a little reservoir and mount for the electronics. I use a plastic bottle to funnel the droplets towards the patterning surface. this slows them down and reduces the amount of mess.

The reservoir can be printed in PLA on a traditional FDM printer or with resin on an SLA printer and needs m2 machine screws and nuts for assembly.

Step 6: Controlling the Transducers

Controlling the phase shift and amplitude of each of the transducers can be done in various ways through the serial interface. I've built a controller I call the Orbogrpah - it's a set of slider and rotational potentiometers that control the relative phase and amplitude of each transducer. It's a lovely device and nice that the whole system is self-contained between the transducer array, driver circuit and controller. The idea is that by having a physical controller you have some level of tangible feedback.

You can find the design files attached for the Orbograph, but in keeping with the theme of making a low-cost and accessible introduction to sonolithography, I've also built a web interface that you can use to control sonolithography arrays

You can host it on your own machine by using the code in the Github repository.

The interface uses WebSerial so by accessing it using a supported browser (Chrome or Edge) you can connect to the device.

Step 7: Creating Patterns

Now that you have all the parts necessary, you can start using the system to make patterns. Power up the driver circuit with both the USB power for the raspberry pi, and 18V for the transducers. Place a piece of paper or something else underneath the transducer array, and start the nebuliser. You pretty quickly see a pattern immerge.


Changing the parameters and switching round transducer positions will give different patterns. Many configurations will be too chaotic to produce more aesthetically pleasing images, but there is lots of exploration to be done.