Сегодня я расскажу и покажу, как в домашних условиях повторить эффект ультразвуковой левитации своими руками.

В предыдущих статьях раз, два. Я демонстрировал псевдо левитацию. В этот раз все по настоящему. Начну с теории.

Звуковые колебания


Чтобы понять всю суть эффекта левитации, нужно понять, что такое звуковая волна и стоячая волна.

По этому я начну с них. Акустическая волна распространяется во все стороны и состоит из двух полуволн, положительной и отрицательной. Положительная полуволна представляет из себя зону сжатия или повышенного давления, в дальнейшем я буду ее называть компрессионная, а отрицательная полуволна зону разряжения, назовем ее декомпрессионная.

image

На практике это выглядит так: Диффузор динамика при движении наружу создает компрессию, а при движении во внутрь декомпрессию. На изображении это наглядно показано.

image

Максимальная сила волны создается около диффузора динамической головки и в процессе отдаления от излучателя постепенно теряет свою мощность, чем дальше от динамика тем она слабее.

Стоячая волна — это волна, которая образуется при наложении двух встречных, совпадающими по фазам и с одинаковой частотой волн. Если обычная волна теряет свою мощность в процессе распространения в пространстве, то стоячие волны на не больших расстояниях образуют узлы с примерно равной мощностью. Достигается это за счет складывания разнонаправленных волн. Слабеющая волна усиливается за счет встречной волны. Чтобы понять как это происходит, посмотрите на изображение ниже. Серым цветом выделены узлы или в нашем случаи полки из стоячих волн. На этих полках(узлах) и удерживаются предметы.

image

Длина волны — это скорость звука разделенная на частоту колебаний. При температуре 20°C и влажности воздуха 50%, звук распространяется в такой среде со скоростью 340 м/с. Резонансная частота колебаний нашего пьезоизлучателя примерно 40 000 Гц. В итоге получаем длину волны 340000 мм / 40000 Гц = 8,5 мм. Длина стоячей волны будет такой же 8,5 мм.

Излучатели можно располагать на разном расстоянии друг от друга, но оно всегда должно быть кратным длине волны. Чем меньше расстояние между излучателями, тем мощнее узлы стоячей волны. Чем больше пространства между акустическими трансмиттерами, тем больше узлов между ними, но слабеет мощность узлов и наоборот. Так же нужно понимать, что для удержания большого количества предметов в узлах волн и на большем отдалении между ультразвуковыми излучателями, потребуются более мощные пьезо головки. Например от автомобильных парковочных радаров, или от бытовых увлажнителей. В этой статье я рассматриваю самый доступный и бюджетный ультразвуковой излучатель. Который можно выпаять из дальномера HC-SR04.

Схема подключения — я использовал Ардуино нано и драйвер моторов MX1508, можно было бы обойтись генератором NE555, а в качестве усилителя для излучателей использовать микросхему MAX232 которая установлена на дальномере HC-SR04, но я для себя избрал более простой путь, который сэкономил мне время. Так как на сборку акустического левитрона у меня ушло не более 5 минут. Соединения я произвел набором проводов dupont.

image

Описание скетча Ардуино


Код ничего особенного из себя не представляет. Все сводится к настройке таймера и дерганий ногами порта D Arduino. Для этого переводим Timer1 в режим сброса при совпадении(CTC) и теперь при совпадении значений регистра счета TCNT1 с заданным числом в регистре сравнения OCR1A, будет срабатывать прерывание, в обработчике которого выполняется инверсия всего порта D. После чего счетный регистр обнулитcя и после выхода из обработчика процесс счета запустится по новой.

Нужное нам значение регистра OCR1A рассчитывается следующим образом: так как делитель в регистре TCCR1B выключен, то мы берем частоту тактового генератора 16 000 000 Гц и делим на требуемую нам частоту срабатывания прерывания 80 000 Гц, в результате получаем число 200, это и будет наше значение для регистра OCR1A.

Почему 80 кГц, а не 40 кГц, спросите Вы? Потому, что период в обработчике формируется за два срабатывания прерывания. При первом срабатывании на выходах формируется D3=0 и D4=1, а при втором D3=1 и D4=0.

Код для Arduino


volatile uint8_t portD3_D4 = 8; // единица на D3 и ноль на D4

void setup()
{
  pinMode(3, OUTPUT); 
  pinMode(4, OUTPUT);

// Инициализируем Timer1
  TCNT1 = 0;
  TCCR1A = 0;
  TCCR1B = 0;
  OCR1A = 199; // Установить регистр сравнения 16 МГц / 80 кГц = 200
  TCCR1B = (1 << WGM12)|(1 << CS10); //Устанавливаем режим CTC,  без делителя
  TIMSK1 |= (1 << OCIE1A); // Включить прерывания таймера 
}

void loop () {}

ISR (TIMER1_COMPA_vect) // Обработчик прерывания по таймеру
{
  PORTD = portD3_D4; // Отправляем значения в порт
  portD3_D4 = 255-portD3_D4;// Инвертируем значения для следующей отправки в порт
}

Комментарии (18)


  1. yellowknife
    27.07.2019 00:38

    Где-то я уже этот ролик видел. Пошел повторять магию. Тут как раз на подоконнике пара дохлых мух лежит.
    they all float down here


    1. kalapanga
      27.07.2019 09:09

      Да тут на хабре и было уже habr.com/ru/post/432934
      Но тот автор указал, что только воспроизвёл проект makezine.com/projects/micro-ultrasonic-levitator
      А здесь не сослались ни на того, ни на другого


      1. CyberBot Автор
        27.07.2019 10:40

        Я не брал за основу ни один из приведенных Вами проектов.
        Почитал по Вашей ссылке, там даже нет подробного объяснения, что такое стоячая волна


  1. Protos
    27.07.2019 07:14

    Увидеть бы как меняется направление волн когда колонна из камней колышется при добавлении нового камня


  1. ferosod
    27.07.2019 07:35

    А если дунуть дымом между излучателями, получится визуализировать стоячую волну?


    1. Griboks
      27.07.2019 09:49

      Не думаю.


    1. tvr
      27.07.2019 10:30

      А если дунуть

      Если хорошо дунуть, то и не такое можно визуализировать.


    1. CyberBot Автор
      27.07.2019 10:35

      Визуализировать можно, используя Шлирен метод.


      1. CyberBot Автор
        27.07.2019 11:32

        Как то так image


  1. Victor_D
    27.07.2019 20:03

    Хорошая статья, только «длинна» пишется через одну «н».


    1. CyberBot Автор
      27.07.2019 20:06

      Спасибо подправил


  1. rrust
    27.07.2019 20:20

    интересно сложно ли будет сделать автоподстройку частоты для автоматического достижения резонанса при произвольном расстоянии между излучателями?


    1. CyberBot Автор
      27.07.2019 21:08

      Резонанс нужен только для излучателя, а для подстройки расстояния под частоту, достаточно в программе сделать перерасчет и поднимать излучатель при помощи ШД и шпильки с резьбой. Но для чего все эти сложности?


      1. rrust
        27.07.2019 21:13

        как раз чтобы не перемещать излучатели, подстраиваясь под текущую длину волны, а наоборот подстроить частоту, чтобы достичь стабильной стоячей волны.
        Исключить ручную механическую работу, переложив ее на быстродействующий процессор.


        1. CyberBot Автор
          27.07.2019 21:43

          Стоячая волна рассчитываться по длине волны, зная расстояние между излучателями, легко вычисляется частота и количество узлов


  1. vagran
    27.07.2019 20:26

    А прямоугольные импульсы не влияют на качество эффекта?


    1. CyberBot Автор
      27.07.2019 21:05

      Я думаю что влияют. Хочу попробовать сделать выход на биполярном транзисторе с дросселем. По схеме повышающего преобразователя. Тем самым увеличится КПД и возрастет мощность в 2-3 раза. Возможно удастся повесить, что нибудь по тяжелее. На выходе сигнал будет близок к синусоиде


  1. aivs
    28.07.2019 17:18

    Очень понятно все разъяснили, спасибо!
    Компоненты есть, соберу такую штуку.