Ultrasonic Array

24,892

82

136

About: Build your own cutting-edge devices coming directly from UpnaLab. UpnaLab is the future interactive devices lab working with Ultrasonics, electromagnetism, lasers and more.

In this project we will show you how to build a phased-array controller and a flat array of 8x8 elements. These systems can be used for acoustic levitation, haptic feedback or directional speakers.

This is quite a complex project so I would recommend a little bit of knowledge on ultrasonics, computer science and electronics.

Do not forget to check the other Instructables for more information www.acousticlevitator.com

More detailed information in our open paper: http://ieeexplore.ieee.org/document/8094247/

All the detailed steps are in the attached video.

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Gather the Components

The source code is available here: https://github.com/asiermarzo/Ultraino

You will also find the STL files for the 3D printed arrays and the AI files for the laser-cut arrays.

The PCB files for manufacturing are also there here I recommend to use PCB Shopper to look for a cheap manufacturer. The dimensions of the board are 62mm by 115mm and it has 4 layers. It would be a good idea to order an stencil if you do not want to solder the components by hand.

The BOM can be found here.

Step 2: Assemble the Driver Board

You can solder by hand, or use solder paste and a reflow oven. I am not the most proficient SMD solderer, there are lots of goods tutorials on the Internet.

The code for the Arduino Mega is here

Step 3: Assembling a 8x8 Flat Array

You can find how to mark the polarity of the transducer in the previous Instructable In that Instructables there is also a guide to buy transducers for a reasonable price.

The components can be found here

  • You can also use the great integrated PCB from Thomas Grooten.

The last image shows the pin numbers of each pin, luckily you will not need to do the pin assignment manually but using the semi-automatic method shown in the video.

Step 4: Single-sided Levitation

I used a 2mm styrofoam particle and a metallic grid to place it in the trap.

The base of the array is laser-cut: link to github

The simulation file is here:

Step 5: Standing-wave Levitation

With this array the trapping strength is greater so it is possible to levitate liquids.

The base of the array is laser cut link

and the simulation file is here

Step 6: Haptic Feedback

When the focal point is modulated at 200Hz it is noticeable at our skin.

The base of the array is 3d-printed: link
and the simulation file is here

Step 7: Directional Speaker

I used this audio amplifier TDA7492P but anything that you can find will probably do the job.

* This is just a quick way of getting a directional speaker, the sound quality is not great and it is not very powerful. I am working on a dedicated directional speaker that will be released soon.

Arduino Contest 2017

Participated in the
Arduino Contest 2017

1 Person Made This Project!

Recommendations

  • Furniture Contest

    Furniture Contest
  • Reuse Contest

    Reuse Contest
  • Hot Glue Speed Challenge

    Hot Glue Speed Challenge

136 Discussions

0
None
alexmm24

Question 2 months ago

Hi Asier,

I was able to make and run the 64 array its very impressive. I am trying now to import my own array arrangement. Is the csv format the same when importing the transducers as when exporting?

Using an exported file I was able to determine the first three columns are the transducer positions. Are the next three columns the transducer normal vectors or angles? Are they ordered in x,y,z order?

Also when I try to import more than about 400 transducers I get the following error:
Could not link program: Number of Default Fragment Uniforms exceeds HW limits

Is there anything I can change in the program or the source code to allow me to run more transducers? In the paper:
https://ieeexplore.ieee.org/document/8094247

It says you can chain 15 boards so I should be able to run up to 15*64 = 960 transducers in the program?

Regards,
Alex

3 answers
0
None
UpnaLabalexmm24

Answer 7 weeks ago

Some graphics cards can simulate up to 512 transducers in real time. But in general it will cap at 200 or something around there. You can still operate, focus and do the other stuff but not the amplitude simulations.

0
None
alexmm24UpnaLab

Reply 7 weeks ago

Hi,

Thank you for the reply. I tried it and it can do everything except show the pressure amplitudes in slices. Is this what you mean by amplitude simulations?

What about importing my own transducer array? What are the first 6 columns? Is it x,y, and z positions of the center of the transducers and the next 3 are the transducer normal direction components (n_x, n_y, n_z)? I tried it in this order and didn't get the right transducer orientations.

Are the 3 orientation columns the Euler angles?

Thank you,
Alex

0
None
syuanlong1995alexmm24

Reply 5 days ago

Hello, I want to know how to import the array size yourself, such as 10*10 standing wave, is it necessary to build a 3d model?

0
None
dupaujeanedouard

9 days ago

Hello Mr. Asier, how can i buy exacly the same PCB board as yours ?

0
None
syuanlong1995

Question 10 days ago on Introduction

Hello, I want to define the size of the array myself, do the double-point suspension of the standing wave, how should I make the model myself, such as the 16*16, 10*10 opposite standing wave simulation...

0
None
normal code

Question 11 days ago

Is the procedure for haptic feedback the same as the program for acoustic levitation? I know that haptic feedback needs to be modulated. I want to complete the tactile feedback, where can the arduino program be found?

Thanks :)

0
None
UpnaLabsehiyuk

Reply 11 days ago

what components are you missing?

0
None
alexmm24

Question 24 days ago

Hi,

For manual pin assignment of multiple boards, I am assuming that the software numbering for the pins in a board increases by 64 compared to the board it connects to.

I.e control board; single board use pin assignment 1-64, pin assignment as first board in chain: 1-64
Board connected to control board: single board use pin assignment 1-64, pin assignment as second board in chain: 65-128
Board connected to second board: single board use pin assignment 1-64, pin assignment as third board in chain: 129-192, etc.

Is this correct?

Thank you,
Alex

1 answer
0
None
alexmm24

Question 24 days ago

Hi Asier,

I have a question regarding supplying power for multiple boards. Based on the paper power is transferred between the amplifier boards, so I need one power lead to the first board. Could it be safer in terms of current through the side pins to power all amplifier boards trough their barrel ports independently?

What about the Arduino boards should all of them be powered independently?

Thank you,
Alex

1 answer
0
None
UpnaLabalexmm24

Answer 11 days ago

You can do it both ways. Current for each board is around 700mA so those pins will have no problems chaining a couple of boards. In some experiments I chainned 4 and temperature and functioning was fine. But you can provide individual power to each. just be sure that the grounds of the power supply are connected.

0
None
opporush

24 days ago

Hello, Asier. So thanks to your excellent work. I'm working on making driver board just exactly following you but mine don't have amplification signals compared with yours. I tried to make it right by resoldering, but I don't know where is the problem. I'm worried about pcb's burnt part and don't know whether it will be nice after resoldering. My question is this:
1. Do you know what is problem of mine?
2. Can I fix my driver board by resoldering? Or better to make it from beggining?
3. Is 60W soldering machine is okay to work with?
Please send replies to my question. So thanks to your help, and admire you.

20191017_172415.jpgKakaoTalk_20191023_151703524.jpgKakaoTalk_20191023_151703718.jpgKakaoTalk_20191023_151703865.jpg
1 reply
0
None
UpnaLabopporush

Reply 11 days ago

Is the amplified output the same as the input into the mosfet? if you put a power supply of 7.5V what is the peak to peak of the output signal?

0
None
normal code

Question 4 weeks ago

Hi Asier,
I have a very confused question. If the pin assignment is done manually, does it match the corresponding sensor according to the number on the pin diagram you showed? When performing semi-automatic assignment, check each sensor.,When the sensor in the simulation software is on, we can see the sensor number and pin number, but the pin number here seems to be different from the one marked manually.

I want to know how to do manual pin assignment. I used a semi-automatic method to complete the pin assignment, but the check found that the correspondence is out of order, so I manually changed their pins so that each check sensor is the same as in the software, but after doing this step, I still can't complete the "eps" particle suspension experiment. What settings do I need to make in addition to assigning pins when manually assigning?
It would be great if you could give some advice.
Thanks :)

1 answer
0
None
UpnaLabnormal code

Answer 11 days ago

Sorry, that picture with the pin numbers is confusing, the java software takes that into account and the pin numbering is in order from top to bottom and left to right.

0
None
normal code

Question 4 weeks ago

I checked the square wave signal and the signal was normal. I checked that each sensor has a signal and the sensor corresponds to the sensor in the simulation software. But can't achieve suspended particles.I don't know what caused the experiment to fail.

0
None
JamesUniStA

Question 7 months ago on Step 4

EDIT: Have got the whole array working! Did the manual pin assignment. Will keep the question below for anyone who might have a similar question.

Hi, I have everything set up now, but when I click "check" for the pin assignment, nothing happens. The software hangs, and I cannot select anything else. There are no error messages or anything, it just gets stuck. Any ideas?

Alternatively, how do I do manual assignments? I have done it by on the "Trans" tab, assigning a "pin" number to each, and they all seem to correctly correspond to the desired transducers. Is that all I need to do?

1 answer
0
None
normal codeJamesUniStA

Answer 4 weeks ago

Hi, I want to know how to do manual pin assignment.
I appreciate your help.