Измеритель уровня звука на ATMega328/Arduino и OLED

Рейтинг:  4 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда не активна
 

В данной статье представлен один из самых важных инструментов в микшировании звука. Измеритель уровня звука на основе микроконтроллера Arduino/AVR. Этот проект служит для демонстрации того, как знание электроники может быть применено для создания решений в любой части повседневной жизни.

Измеритель уровня звука или стандартный индикатор громкости, как его иногда называют, - это устройство, которое отображает уровень аудиосигнала. По сути, это базовый вольтметр (оснащенный схемой для преобразования звука в напряжение), который берет простое среднее значение сигнала и отображает его со временем атаки и срабатывания около 300 мс. Изначально он был спроектирован как измеритель громкости, а не как измеритель пиков, но обычно он используется в аудиозаписи, чтобы обеспечить ее качество.

Данная версия основана на проекте, начатым Adam Ples на Github, и использует AVR ATMega88/168/328 (и ATMega48, если это возможно), что делает его совместимым с платами Arduino, такими как Uno, Nano и Due. Проект был доработан для использования в нем небольшого монохромного OLED-дисплея на основе драйвера SSD1306 или SH1106.

Возможности этой версии измерителя звука:

- 2 канала измерения;
- Точность максимально приближена к реальной спецификации измерителя;
- Высокий FPS, 60+, избавляет от видимых скачков стрелки, как это обычно бывает в других конструкциях.

Как это устроено

Простая блок-схема показывает, как работает устройство:

Измеритель уровня звука на ATMega328/Arduino и OLED - блок-схемаИз-за внимания к деталям и стремления обеспечить, чтобы прибор был максимально приближен к стандарту коммерческих измерителей, проект состоит из слегка сложного аналогового интерфейса. Более сложный, чем большинство других конструкций, которые вы можете найти в Интернете, но он того стоит, если цель - качество и точность.

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

Обязательные компоненты/спецификация

Из-за сложности конструкции, монтаж его на макетной плате будет сложным для большинства любителей, проект построен на печатной плате, а используемые компоненты были оптимизированы для этой цели. Например, вместо использования выводных компонентов использовались компоненты SMD. Спецификация будет доступна в разделе загрузки, но здесь приведен подробный список используемых компонентов:

Компонент Тип Корпус Значение Допуск Количество
           
Резистор Тонкопленочный 0805 10k 1% 15
  Толстопленочный 0805 220R   2
      1k   2
      22k   2
      47k   2
      82k   2
      220k   10
  Переменный 3296W 10k   2
           
Конденстатор Керамический 0805 22pF   2
      33pF   2
      220pF   4
      47nF   2
      100nF   10
      220nF   2
      330nF   4
      470nF   2
      1uF   2
      10uF   1
  Танталовый 1210 10uF 16V 1
      100uF 6.3V 2
           
Диод   SOD80 1N4148   2
      BAT85   2
    SOT23 BAS70-04   2
           
Транзистор   SOT23 BSS138   2
           
Микросхема Регулятор напряжения SOT223 1117-5.0   1
    SOT23 MCP1700*33   1
    SOT23 MCP1525   1
  Операционный усилитель SO14 MCP604   1
      MCP6004   2
  Микроконтроллер TQFP32 ATmega88P   1
           
Другое Кварц HC49/S 20MHz   1
  Дроссель 1210 10uH   1
  Разъем   1×2   1
      1×3   1
      2×3   1
      2×4   1

Эти компоненты легко доступны и могут быть куплены в большинстве магазинов электронных компонентов.

Чтобы сделать проект простым в использовании, измеритель уровня громкости был разработан как автономный модуль или как шилд, совместимый по выводам для подключения к платам, таким как Arduino Uno. Как упоминалось ранее, сложность проекта делает его утомительной задачей для реализации на макетках, поэтому схемы и проект печатной платы будут разделены в этом описании, а также прикреплены к файлам в разделе загрузки. Схемы и печатные платы были разработаны с помощью Eagle, поэтому вы можете изменять их по своему усмотрению.

Автономный модуль, схема и печатная плата

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

Схема автономного модуля

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

Печатная плата автономного модуляШилд для Arduino

Шилд измерителя уровня громкости предназначен для работы с Arduino Uno и должен работать с другими платами, совместимыми с Uno. Схема для шилда показана на рисунке ниже:

Шилд для ардуино - схема

Преобразовав схему в макет ПП, мы получим изображение ниже:

Шилд для ардуино - печатная платаПрограммное обеспечение

Исходный код проекта предоставлен в папке src в разделе загрузки. Чтобы прошить вашу плату с помощью кода, вам нужно собрать hex-файл из файлов в исходной папке.

Для создания hex-файла из исходного кода вам понадобятся следующие инструменты:

Avr-GCC
GNU make
Python 2.7 или 3

Для пользователей Windows можно использовать этот дистрибутив GCC и использовать инструкцию отсюда: http://blog.zakkemble.co.uk/avr-gcc-builds/. Перед компиляцией убедитесь, что вы ознакомились со всеми файлами в папке src, возможно некоторые файлы придется модифицировать для адаптации проекта к вашим конкретным потребностям. Например, файл config.h в исходной папке (src/config.h) содержит все настройки проекта, и вам может потребоваться изменить его и выполнить такие действия, как изменение типа контроллера OLED в соответствии с используемым OLED. Также может понадобиться изменить содержимое Make-файла, чтобы установить используемый вами микроконтроллер и частоту генератора (F_CPU).

Чтобы создать hex-файл необходимо:

Установить Avr-GCC и другие инструменты, открыть терминал (или командную строку) на своем ПК, перейти в папку, содержащую все файлы проекта, включая «src», с помощью команды cd, затем выполнить команду make:

$ make all

Инструмент создаст файл main.hex в папке сборки. Этот шестнадцатеричный файл может быть использован для прошивки вашего устройства.

Хотя перепрошивка автономного модуля с помощью hex-файла может быть довольно легко достигнута благодаря таким инструментам, как Atmel Studio, случай для шилда совершенно другой и перепрошивка платы Arduino hex-файлом становится немного сложнее, так как эта функция не является частью Arduino IDE.

Чтобы решить эту проблему и прошить плату Arduino hex-файлом, мы будем использовать инструмент под названием xLoader. XLoader - это простой инструмент, который позволяет легко прошивать плату Arduino hex-файлами. Он имеет простой пользовательский интерфейс, который позволяет выбрать файл, установить COM-порт, скорость передачи, а также имеет кнопку загрузки. Единственный недостаток этого инструмента - он доступен только для ПК с Windows.

Загрузите и установите xLoader, доступен в разделе загрузки, затем подключите плату Arduino к компьютеру, выберите сгенерированный hex-файл, как показано ниже, выберите COM - порт, установите скорость передачи в бодах, соответствующую скорости вашего Arduino, и нажмите «Upload»:

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

Этот же процесс можно использовать для прошивки автономного модуля измерителя уровня громкости с помощью hex-файла.

Демонстрация

Загрузив hex-файл, подключите источник звука к одному или обоим аудиоканалам. Вы должны увидеть, как стрелка на измерителе отклоняется в соответствии с уровнем громкости аудиоисточника.

То же самое для модуля. После того, как hex-файл будет загружен, подключите к нему источник звука и вы должны увидеть соответствующее движение стрелки.

Видео работы устройства


Файлы к статье "Измеритель уровня звука на ATMega328/Arduino и OLED"
Описание:

Исходный код, схемы и печатные платы, XLoader

Размер файла: 2.17 MB Количество загрузок: 82 Скачать

Метки: Индикатор, Измеритель, ATmega328, OLED, SSD1306, SH1106, Arduino Uno

Печать E-mail

Авторизация