Как определить направление звука с помощью Arduino?


Определение направления звука — увлекательная концепция в робототехнике и автоматизации. Она позволяет устройству «слышать» и определять направление звука. Эта концепция имеет множество применений, включая навигацию роботов, интеллектуальные системы безопасности, игры и развлечения. Ранее мы показали вам, как измерить звук в дБ с помощью Arduino, а в этом уроке давайте узнаем, как определить направление звука с помощью Arduino и нескольких микрофонов.

Определение направления звука с помощью Arduino

Ниже вы можете увидеть короткую демонстрационную GIF-картинку проекта, который мы обсудим сегодня. Давайте узнаем некоторые основы определения направления звука с помощью Arduino и нескольких микрофонов. Без лишних слов, давайте погрузимся в технику, используемую здесь.

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

Ниже приведен список необходимых компонентов. Этот проект был протестирован с Arduino UNO R4 WiFi, Arduino UNO R3 и ESP32, поэтому вы можете использовать любой из них. Однако могут быть незначительные корректировки кода для каждого микроконтроллера.

  1. Плата Arduino Uno (купить на AliExpress).
  2. Модуль усилителя микрофона MAX4466 - 4 шт.
  3. Модуль OLED дисплея SSD1306 128×64 с диагональю 0.96 дюйма и интерфейсом I2C (купить на AliExpress).
  4. Соединительные провода.
  5. Макетная плата (опционально).
  6. 3D-печать (опционально).

Как работает локализация звука?

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

Вот тут-то и вступает в игру продвинутый метод — анализ с помощью быстрого преобразования Фурье (БПФ). БПФ смещает сигнал из временной области в частотную область, что упрощает дифференциацию звуков, например, человеческих голосов от фонового шума, путем анализа диапазонов частот. Такой подход снижает некоторые ограничения более простого метода и позволяет проводить обнаружение в фиксированном диапазоне частот.

Используя четыре микрофона, расположенных вокруг устройства, система прослушивает целевую частоту (например, 3000 Гц) и сравнивает величину звука от каждого микрофона. Arduino обрабатывает сигналы в реальном времени , находя направление на основе самого сильного сигнала. Затем эта информация визуализируется на OLED-экране с анимированными «глазами», которые отслеживают источник звука. Эта физическая установка необходима для точного определения направления, позволяя обнаруживать на полных 360°.

Принцип определения направления звука

Для этой цели вам не обязательно прибегать к 3D-печати; для этой цели вполне подойдет обычный картон или пенопласт.

Теперь, когда вы поняли концепцию, давайте ее воплотим!

3D-модель

Я разработал 3D-корпус для этого проекта с помощью TinkerCad. 3D-модель можно скачать по следующей ссылке с GitHub.

3D-модель устройства для определения направления звука

Примечание: 3D-печать не является обязательной для сборки этого устройства для определения направления звука. Можно использовать альтернативы, такие как пена, картон или небольшие коробки.

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

Схема будет зависеть от вашего выбора микроконтроллера. Для Arduino UNO схема будет следующей.

Схема для определения направления звука на основе платы Arduino

При использовании другого микроконтроллера сосредоточьтесь на выборе подходящих контактов АЦП для микрофонных входов. Для Arduino я использовал A0, A1, A2 и A3 для микрофонных входов, а A4 и A5 — как контакты SDA и SCL для OLED-дисплея.

Для простоты я запитал все микрофоны и OLED-дисплей от выхода Arduino 3,3 В. Модуль MAX4466 поддерживает входное напряжение от 2,4 до 5,5 В, а OLED работает при 3,3 В (некоторые дисплеи могут поддерживать до 5 В, но я рекомендую 3,3 В для безопасности).

Разобравшись со схемой, приступим к сборке.

Сборка оборудования

Давайте начнем сборку оборудования. Начиная с головной части, разместите все компоненты, как показано на рисунке.

Сборка корпуса устройства

Я закрепил модуль микрофона и OLED-дисплей горячим клеем и укоротил штырьки для беспроблемной пайки. Вы можете выбрать наиболее подходящий для вас метод.

Я обмотал микрофоны небольшим количеством ленты, чтобы обеспечить плотное прилегание.

Я начал с пайки OLED-дисплея, создав параллельное соединение шин питания и отдельные соединения для аналогового выхода и контактов SDA/SCL.

Припаивание проводов для подключения OLED дисплея

Далее я продолжил подключение оставшихся проводов.

Подключение оставшихся проводов устройства

После завершения пайки я проложил провода через центральное отверстие в нижней 3D-печати, которая функционирует как полая труба. Затем я припаял штыревые контакты для легкого подключения к Arduino UNO.

Завершив сборку оборудования, перейдем к кодированию.

Написание кода программы

Теперь давайте разберем логику кода и функциональность этого проекта локализации звука.

Программа определяет направление звука с помощью четырех микрофонов, выполняя БПФ для анализа звуковых частот, особенно около 3000 Гц. В зависимости от направления звука она отображает «глаза» на OLED-экране для отслеживания источника. Если звук не обнаружен, она отображает «сонные глаза» как состояние бездействия.

Теперь давайте разберем код, начав с используемых библиотек.

Используемые библиотеки:

  • arduinoFFT — доступно в менеджере библиотек
  • Wire - библиотека по умолчанию
  • Adafruit_GFX — доступно в менеджере библиотек
  • Adafruit_SSD1306 — доступно в диспетчере библиотек

Эти библиотеки совместимы как с Arduino UNO, так и с ESP32.

Начало кода программы

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

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

Пользовательские функции в нашей программе

Объяснение работы кода

Функция настройки (setup()):

  • Инициализирует последовательную связь и OLED-дисплей.
  • Очищает дисплей, чтобы убедиться, что он готов к отображению графики.

Основной цикл (loop()):

  • Цикл loop() выполняется непрерывно, вызывая функцию determineAngle() для проверки источника звука.
  • Затем он вызывает drawEyes() для обновления экрана OLED-дисплея с нормальными или спящими глазами, в зависимости от полученных звуковых данных.

Определение направления звука (determineAngle()):

  • Берет 64 выборки с каждого микрофона и применяет БПФ для преобразования звуковых данных в частотные данные.
  • Она проверяет величину целевой частоты (3000 Гц) от каждого микрофона и определяет, какой микрофон имеет самый сильный звуковой сигнал.
  • На основе самого сильного сигнала она вычисляет угол прихода звука (0°, 90°, 180° или 270°).

Отображение глаз (drawEyes()):

  • Функция drawEyes() рисует различные изображения глаз на OLED-экране на основе рассчитанного угла.
  • Если звук остается неизменным в течение длительного периода (на основании angleCounter()) , глаза будут выглядеть сонными.

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

Далее давайте подробно рассмотрим работу проекта.

Работа над проектом локализации звука

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

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

Этот проект можно расширить, чтобы обнаруживать диапазон частот, а не одну определенную частоту. Однако он все еще восприимчив к шуму. Хотя программные решения могут помочь, аппаратные решения, такие как аналоговые шумовые фильтры на входах микрофона, дадут наилучшие результаты.

Применения проекта определения направления звука

  • Робототехническая навигация: роботы, оснащенные системой звуковой локализации, могут определять направление голосовых команд или близлежащих звуков, что помогает им более естественно взаимодействовать с людьми или быстрее реагировать на оповещения.
  • Интеллектуальные системы безопасности: благодаря интеграции функции определения направления звука интеллектуальные системы безопасности могут определять подозрительные звуки , например, бьющееся стекло или громкие шумы, и немедленно направлять камеры или сигналы тревоги в этом направлении.
  • Интерактивные художественные инсталляции: художники и дизайнеры могут использовать функцию определения направления звука для создания захватывающих экспозиций , которые реагируют на звуки аудитории, позволяя инсталляциям оживать в зависимости от взаимодействия с посетителями.
  • Системы с голосовым управлением: в устройствах для умного дома функция определения направления звука помогает микрофонам сосредоточиться на источнике голосовых команд, повышая точность и скорость реагирования виртуальных помощников, таких как Alexa или Google Home.
  • Мониторинг окружающей среды: эта технология может помочь в мониторинге дикой природы, определяя направление звуков животных или других звуков окружающей среды , способствуя исследованиям и охране природы.
  • Акустические измерения и профилирование звука: инженеры и исследователи могут использовать эту систему для изучения распространения звука в различных средах или для проведения точных измерений направления звука в экспериментах.

Исходный код программы

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

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

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