Ультразвуковая акустическая левитация на Arduino и датчике HC-SR04


Когда вы видите что то парящее в воздухе без явных причин на это – это выглядит волнующе. В связи с этим все проекты анти гравитации имеют некоторую как бы "мифологическую" составляющую. В настоящее время наиболее распространены проекты магнитной левитации (один из таких мы рассматривали на нашем сайте) и ультразвуковой левитации (рассмотрим в данной статье). В случае ультразвуковой левитации объект (обычно небольшой кусок бумаги или пенопласта) помещается между двумя ультразвуковыми датчиками, которые генерируют акустические звуковые волны. Создается ощущение что объект как бы парит (плавает) в воздухе под действием этих акустических волн – легко подумать что это и есть самая настоящая антигравитация.

Внешний вид проекта ультразвуковой акустической левитации на Arduino и датчике HC-SR04

В данной статье мы рассмотрим проект простой ультразвуковой левитации на основе платы Arduino, который, тем не менее может иметь и практическое применение – в последние годы проводится достаточно много исследований, направленных на создание ультразвуковых роботизированных захватов/рук (Ultrasonic Robotic Grippers), принцип действия которых очень похож на логику работы нашего проекта.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress), Arduino Nano (купить на AliExpress) или микроконтроллер ATMEGA328P.
  2. Ультразвуковой датчик (модуль) HC-SR04 (купить на AliExpress).
  3. Драйвер двигателя L239D в виде модуля или отдельной микросхемы (купить на AliExpress).
  4. Vero Board Dotted Vero (точечная перфорированная плата).
  5. Диод 4007 (купить на AliExpress).
  6. Конденсатор 104 пФ (купить на AliExpress).

Дополнительно при питании схемы от источника напряжением от 8 до 12 В понадобится регулятор напряжения LM 7809 (купить на AliExpress) и Led Driver Power Supply 12V 2Amp.

Схема проекта

Схема проекта ультразвуковой левитации на основе платы Arduino представлена на следующем рисунке.

Схема проекта ультразвуковой левитации на основе платы ArduinoОсновными компонентами данной схемы являются плата Arduino, драйвер двигателей L239D и ультразвуковые датчики (преобразователи, transducer), собранные из модуля ультразвукового датчика HCSR04, который способен генерировать акустические волны с частотами от 25 до 50 кГц. На нашем сайте вы можете посмотреть все проекты, в которых ультразвуковой датчик HCSR04 использовался для определения расстояния до объектов. Но для данного проекта мы выпаяли ультразвуковые передатчики из модуля HCSR04.

В соответствии с даташитом на модуль HCSR04 его рабочая частота составляет 40 кГц. Таким образом, задачей платы Arduino в этом проекте является формирование сигналов с частотой 40 кГц для работы наших самодельных ультразвуковых датчиков (передатчиков). Эти сигналы (с контактов A0 и A1 платы Arduino) подаются на входы микросхемы драйвера двигателей L239D (ее контакты 2 и 6). Далее с помощью этих сигналов происходит управление управляющим напряжением (от 8 до 12 В), которое подается на контакт 8 микросхемы L239D, в результате этого микросхема L239D подает управляющие сигналы на ультразвуковые передатчики – мы их разместили лицом друг к другу и оставили между ними небольшое расстояние. Таким образом, акустические волны распространяются между этими двумя датчиками и позволяют объекту, размешенному между ними, парить (плавать) в воздухе.

Необходимо заметить, что микросхема L293D имеет два входа напряжения, по одному из них микросхема питается сама – на него питание подается с контакта 5v платы Arduino, а на другой контакт (8-й) Vcc2 (на него можно подавать до 36 В) подается другое напряжение, которое используется для управления выходными контактами.

Микросхема L293D имеет 2 разрешающих контакта (Enable pins), 4 контакта ввода-вывода и 4 общих контакта (ground pins). В этом проекте мы будем использовать только два входных контакта микросхемы - pin 1 (2) и pin 2 (7). Чтобы разрешить работу этих двух контактов, мы должны подать на Enable PIN 1 напряжение высокого уровня (high), поэтому в нашей схеме этот контакт подключен к контакту 16, который является контактом Vcc 1 (то есть на него подается питающее напряжение). Более подробно о принципах работы контактов данной микросхемы вы можете прочитать в даташите на L293D.

Использование конденсатора емкостью 100 нФ в представленной схеме опционально. В качестве источника питания мы используем 12V 2Amp LED driver, затем мы понижаем напряжение до 9 В с помощью микросхемы регулятора напряжения LM7809 и подаем его на 8-й контакт микросхемы L293D. В соответствии с техническими характеристиками платы Arduino Uno на ее контакт Vin можно подавать напряжение в диапазоне от 7 до 12 В, однако лучше (более безопасно) не подавать на этот контакт напряжение более 9 В.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Код программы достаточно прост – в нем мы с помощью таймера и прерываний изменяем состояние (0 / 1) контактов A0 и A1 платы Arduino и формируем таким образом сигнал с частотой 40 кГц.

В начале кода программы объявим массив сдвига фраз.

Затем каждую секунду порт будет принимать противоположные сигналы. Поэтому в функции void setup мы зададим режим работы для всех контактов этого порта на вывод данных.

После этого мы инициализируем timer 1 и отключим все прерывания.

Затем timer 1 конфигурируется для формирования сигнала прерывания с частотой 80 кГц. Плата Arduino работает на частоте 16 МГц, итого получаем 16000000 HZ ÷ 200 = 80,000 кГц для формируемых прямоугольных импульсов. Это обеспечивается с помощью следующих команд:

После этого включаем прерывание сравнения для таймера.

И, наконец, разрешаем прерывания в программе.

Каждое прерывание будет изменять состояние аналогового порта с частотой 80 кГц, следовательно, мы получим прямоугольную волну с частотой 40 кГц. Это изменяющееся с каждым прерыванием значение мы будем передавать на контакты A0 и A1 платы Arduino.

А в основном цикле loop нам ничего не нужно будет делать.

Сборка конструкции проекта

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

Последовательность сборки проекта ультразвуковой левитации на Arduino

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

Клеевой пистолет желателен для сборки этого проекта

Закрепленная конструкция проекта

На двух следующих рисунках показана работа нашего ультразвукового левитатора.

Тестирование работы проекта ультразвуковой левитации на Arduino и датчике HC-SR04

Работа проекта ультразвуковой левитации на Arduino и датчике HC-SR04 крупным планом

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

Исходный код программы (скетча)

Основная часть кода написана к командах для микроконтроллеров AVR, поэтому он исключительно эффективен (в нем нет ничего лишнего).

Видео, демонстрирующее работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
935 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *