Как собрать примитивный акустический левитатор на коленке
В повести братьев Стругацких «Понедельник начинается в субботу», написанной в 1965 году, сотрудники НИИЧАВО начинали день с воспарения над кроватью. У кого-то это получалось, у кого-то не очень. С тех пор наука шагнула далеко вперед, а левитировать люди так и не научились — зато удержание небольших и легких предметов в воздухе уже доступно практически каждому. Вместе с инженерами AvitoTech разбираемся, как можно применять явление левитации, и собираем собственный (пусть и простенький) акустический левитатор.
О левитации принято говорить, когда объект парит в воздухе, не притягиваясь к поверхности и не находясь в непосредственном контакте с другими объектами. Для успешной левитации, казалось бы, нужно совсем немного: сила, которая бы компенсировала силу тяжести, а также возвращающая сила, которая бы стабилизировала объект в пространстве. Сегодня известно несколько видов левитации, в числе которых магнитная, квантовая, световая и акустическая. Существующие методы позволяют левитировать относительно небольшим и легким предметам. О парении в воздухе людей или автомобилей речи пока не идет.
Надо отметить, что, несмотря на разработку множества методов левитации, практического применения ей пока не нашлось, хотя потенциал огромен. Разработчики уверены, что с помощью левитации можно будет перемещать очень маленькие и очень хрупкие объекты, как, например, электронные компоненты (электроника все-таки становится все меньше и меньше). Левитация также рассматривается как метод для работы с веществами высокой чистоты или для проведения химических опытов, требующих избегать контакта веществ с другими объектами, например химическими сосудами.
Одним из наиболее перспективных направлений исследований является акустическая левитация, которая позволяет удерживать в воздухе любые объекты, а не только диэлектрики, как при магнитной левитации. Подробно о таких разработках можно почитать в нашем материале «Левитация для маглов». Кроме того, левитация может быть интересна и для простых экспериментаторов, как любопытный эксперимент, в общем-то не сложный для воспроизведения даже в домашних условиях — если, конечно, вы умеете держать в руках паяльник.
В акустической левитации сила звуковых волн используется для компенсации силы тяжести. Звуковая волна состоит из двух полуволн: положительной и отрицательной. Первая представляет собой область повышенного давления и возникает, когда колеблющаяся мембрана, например мембрана звукового динамика, совершает движение наружу. Вторая — это область пониженного давления, которая возникает при движении мембраны внутрь. Если взять два динамика с одинаково колеблющимися мембранами и расположить друг напротив друга на определенном расстоянии, то между ними может возникнуть так называемая стоячая волна.
В стоячей волне образуются неподвижные в пространстве области повышенного и пониженного давления, так называемые узлы. Если в один из таких узлов поместить предмет, размер которого меньше длины стоячей волны (скорости звука в заданной среде, разделенной на частоту колебаний), он будет парить, поддерживаемый окружающим узел повышенным давлением.
Акустический левитатор, если он создан только для статичного удержания предметов в воздухе, — это довольно простое устройство. Оно состоит из ультразвуковых излучателей, микросхемы, обеспечивающей их питанием, микроконтроллера Arduino Nano, модуля управления электромоторами на базе микросхемы L298N и блока питания на 12 вольт. При этом само по себе устройство можно относительно легко масштабировать, повышая его мощность, благодаря чему левитатор сможет удерживать более крупные объекты.
При сборке левитатора мы задействуем только четыре вывода на Arduino Nano: аналоговые пины A0 и A1 (они будут задавать частоту колебаний ультразвуковых датчиков), а также пины питания микроконтроллера — 5 вольт и земля (питание будет подаваться от модуля L298N). Два ультразвуковых излучателя (их мы сняли с модуля ультразвукового дальномера HC-SR04) параллельно подключаются к одному из выводов модуля L298N. На него же подается питание 12 вольт. Вот и вся сборка.
Кстати, ультразвуковые излучатели закрыты алюминиевыми колпачками и сеткой, которые защищают их от повреждения. Колпачки можно смело снять, а из сетки сделать ложечку, которая позволит удобно размещать предметы в узлах стоячей волны. После этого подключаем Arduino Nano к компьютеру и заливаем в микроконтроллер скетч.
Ультразвуковые излучатели, используемые в нашей схеме, способны генерировать ультразвук с частотой 40 килогерц. Именно с такой частотой и нужно подавать на них напряжение. При нормальных условиях длина волны при 40 килогерцах составляет около 8,5 миллиметра. И примерно на таком расстоянии и будут находиться узлы стоячей волны. При этом нужно учитывать, что звуковые волны довольно быстро теряют силу. Исходя из этого, расположим два слабых излучателя на расстоянии около 2 сантиметров друг от друга, но оставим возможность изменять расстояние между ними — это важно для лучшей настройки во время эксперимента.
В отличие от предыдущих проектов на Arduino, которые мы сделали вместе с инженерами AvitoTech, писать много кода не придется. Управление колебаниями ультразвуковых излучателей мы доверим самому микроконтроллеру Arduino Nano, а точнее, встроенному в него таймеру Timer1. Таймер представляет собой суммирующий счетчик, который просто подсчитывает импульсы от кварцевого генератора. Частота последнего в Arduino Nano составляет 16 мегагерц.
Наша задача проста — доверить микроконтроллеру с частотой 40 тысяч раз в секунду попеременно подавать напряжение на аналоговые пины A0 и A1.
Сначала в битовой переменной PORTS задаем значение аналоговых портов Arduino Nano: 0 означает, что на порт не подается напряжение, а 1 — что подается. Затем в функции setup () задаем настройки для аналоговых портов и таймера, причем для таймера указываем срабатывание с частотой 80 килогерц. Дело в том, что работа микроконтроллера основана на полупериодах. Это означает, что при первом срабатывании таймера (первом полупериоде) на порт A0 будет подан высокий уровень сигнала (5 вольт), а на A1 — низкий (0 вольт). На втором полупериоде уровень сигнала на A0 станет низким, а на A1 — высоким. Таким образом, общая частота, с которой напряжение будет подаваться на излучатели, составит 40 килогерц.
Наконец, в функции ISR () мы и определяем поведение аналоговых портов на каждом полупериоде: на первом порты устанавливаются в соответствии с битовой переменной PORTS, на втором — переменная инвертируется и порты устанавливаются уже в соответствии с новым ее значением. Следует отметить, что управление аналоговыми портами реализовано через прерывание. Это означает, что они могут функционировать отдельно от основного кода, который можно разместить внутри традиционного «вечного» цикла loop () — во время срабатывания таймера исполнение кода будет прерываться на время полупериода, а затем продолжаться снова. У нас дополнительного кода нет.
Наконец, скетч залит в Arduino Nano. Микроконтроллер можно отключить от компьютера и подключить блок питания нашего левитатора к сети. На Arduino Nano и L298N загорелись светодиоды. Синий дым не пошел — значит, все работает как надо. Берем импровизированную ложечку из сетки от ультразвукового излучателя, кладем на нее кусочек бумаги и помещаем между излучателями. Кусочек сначала начинает «плясать», а затем повисает в воздухе, сначала вращаясь быстро, а затем замедляясь. Второй узел располагается над зависшей бумажкой. Его можно попытаться найти и «повесить» еще один кусочек. Захватывающее зрелище: бумажка ничего не касается и неподвижно висит в воздухе.
Что интересно, число модулей L298N и ультразвуковых излучателей на них можно увеличивать. Если множество излучателей расположить на полусфере, а полусферы пристроить друг над другом, получится более мощный левитатор, который сможет удерживать одновременно несколько объектов. Например, в 2017 году британские исследователи собрали левитатор из 72 ультразвуковых излучателей автомобильного парктроника.
Удивительно, что некоторые научные приборы, используемые исследователями в лабораториях, при всей своей кажущейся сложности на самом деле просты в изготовлении. Достаточно всего лишь иметь базовые навыки работы с паяльником и общие представления о программировании.
Василий Сычёв
byte PORTS = 0b10101010;
void setup() {
DDRC = 0b11111111;
noInterrupts();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 200;
TCCR1B |= (1 << WGM12);
TCCR1B |= (1 << CS10);
TIMSK1 |= (1 << OCIE1A);
interrupts();
}
ISR(TIMER1_COMPA_vect) {
PORTC = PORTS;
TP = ~PORTS;
}
void loop() {}
Калькулятор личных зивертов
Ходите ли вы по земле, летите на самолете или не дыша замерли в кабинете рентгенолога — вы находитесь под воздействием радиации. Впрочем, это не значит, что вам угрожает опасность — вопрос всегда в дозах. Предлагаем вам рассчитать свою ежегодную дозу радиации, а мы заодно расскажем, как она устроена.