Микроконтроллеры и Технологии — Измеритель уровня звука на ATMega328/Arduino и OLED
Индикатор Измеритель ATmega328 OLED SSD1306 Sh2106 Arduino Uno
В данной статье представлен один из самых важных инструментов в микшировании звука. Измеритель уровня звука на основе микроконтроллера Arduino/AVR. Этот проект служит для демонстрации того, как знание электроники может быть применено для создания решений в любой части повседневной жизни.
Измеритель уровня звука или стандартный индикатор громкости, как его иногда называют, — это устройство, которое отображает уровень аудиосигнала. По сути, это базовый вольтметр (оснащенный схемой для преобразования звука в напряжение), который берет простое среднее значение сигнала и отображает его со временем атаки и срабатывания около 300 мс.
Данная версия основана на проекте, начатым Adam Ples на Github, и использует AVR ATMega88/168/328 (и ATMega48, если это возможно), что делает его совместимым с платами Arduino, такими как Uno, Nano и Due. Проект был доработан для использования в нем небольшого монохромного OLED-дисплея на основе драйвера SSD1306 или Sh2106.
Возможности этой версии измерителя звука:
— 2 канала измерения;
— Точность максимально приближена к реальной спецификации измерителя;
— Высокий FPS, 60+, избавляет от видимых скачков стрелки, как это обычно бывает в других конструкциях.
Как это устроено
Простая блок-схема показывает, как работает устройство:
Из-за внимания к деталям и стремления обеспечить, чтобы прибор был максимально приближен к стандарту коммерческих измерителей, проект состоит из слегка сложного аналогового интерфейса. Более сложный, чем большинство других конструкций, которые вы можете найти в Интернете, но он того стоит, если цель — качество и точность.
Аналоговый интерфейс принимает аудиосигнал и пропускает его через блок выпрямителя, после чего сигнал пропускается через балластный блок, который настроен для удовлетворения весьма специфических баллистических характеристик измерителя уровня громкости. Затем сигнал поступает в АЦП микроконтроллера, который преобразует его в данные для отображения на 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»:
Этот же процесс можно использовать для прошивки автономного модуля измерителя уровня громкости с помощью hex-файла.
Демонстрация
Загрузив hex-файл, подключите источник звука к одному или обоим аудиоканалам. Вы должны увидеть, как стрелка на измерителе отклоняется в соответствии с уровнем громкости аудиоисточника.
То же самое для модуля. После того, как hex-файл будет загружен, подключите к нему источник звука и вы должны увидеть соответствующее движение стрелки.
Видео работы устройства
Файлы к статье «Измеритель уровня звука на ATMega328/Arduino и OLED» | |
Описание:
Исходный код, схемы и печатные платы, XLoader |
|
Размер файла: 2.17 MB Количество загрузок: 489 | Скачать |
Понравилась статья? Поделиться с друзьями:
Простой индикатор уровня звука на WS2812B.
Программа для Arduino Pro Mini.В цикле для каждого из 64-х светодиодов передаётся по 8*3 бита. А так как 1 бит информации о цвете кодируется одним байтом (макросы LOGIC_1 и LOGIC_0), то необходимо передать 8*3 байт для одного светодиода. В качестве полного количества элементов, которое нужно передать на светодиоды использую количество байт цветов. То есть в качестве базиса взят байт цвета, что очень удобно.
Инициализация завершена, можно приступить к основной части программы. Во-первых, это периодическое считывание данных с АЦП для каждого из трёх каналов:
Последовательно по готовности узнаём отсчёты канала опорного напряжения, первого и второго каналов аудиосигнала. Функция возвращает номер канала, значение которого было получено от АЦП.
Во-вторых, если есть измеренные значения, то их можно куда-то сложить, обработать. Этим занимается следующая функция:
В коде есть комментарии, но на всякий случай поясню, что конкретно тут выполняется. Наш индикатор будет отображать среднеквадратичный уровень сигнала. Поэтому здесь мы вычисляем квадрат измеренного значения. Этот квадрат кладём в ячейку массива и попутно вычисляем сумму всех значений массива. Сумма квадратов нам нужна, чтобы потом (когда это будет необходимо) быстро вычислить среднеквадратичное значение, а массив нужен для того, чтобы потом вычитать из суммы неактуальные более значения (что ускорит процесс вычисления) и заполнять его новыми квадратами.
Сразу же, раз об этом упомянул, опишу вычисление среднеквадратичного значения. Тут всё просто, вычисляем среднее от суммы квадратов для обоих каналов, а затем вычисляем квадратный корень также для обоих каналов:
Отличие вычислений только в заполненности массива фильтрации и величине значения суммы квадратов. С заполненностью всё ясно — тут просто разный делитель. А что касается функции вычисления квадратного корня, то тут 2 нюанса. Стандартная функция, которая работает с типом float, требует для себя длительного времени вычисления, поэтому решено было использовать приближённые методы вычисления квадратного корня. Для более быстрого вычисления решил применить 2 функции, оптимизированные под размер значения. Одна работает только с числами размером до 2-х байт, включительно, а вторая до 4-х байт, включительно.
В-третьих, необходимо подготовить данные для отправки на светодиоды. Это самая «творческая» функция, потому как от неё зависит в каком виде будет отображаться уровень звука на умных светодиодах. У нас простой VU-метр, поэтому способ отображения только один:
Разберём функцию void set_leds_buf(). Для начала, об этом я писал чуть выше, вычисляется для обоих каналов среднеквадратичное значение, которое говорит о том, сколько светодиодов должно зажечься. Далее, во вспомогательные буферы записываются яркости светодиодов, которые будут светиться. Яркости берутся из таблицы: user_multicolored_table (по сути двумерный массив). Столбец отвечает за номер светодиода канала, а строка за цвет. Порядок цветов можно задать с помощью макросов COLOR1, COLOR2, COLOR3. Сейчас установлен общепринятый порядок: RGB.
Заметка: Стандартный порядок цветов (то есть последовательность байт, которую нужно передать) у светодиодов WS2812B: GRB. Чтобы не путаться тем, кто использует GRB и тем, кто привык к RGB, решил сделать возможность быстрой смены порядка отправки цветов.
Во время выполнения программы таблица эта хранится в энергонезависимой flash памяти, что экономит ОЗУ и не вызовет никаких проблем, если мы захотим создать много таких цветовых таблиц.
После того как цветовые буферы сформированы, остаётся их объединить в один массив и передать на светодиоды. И тут я предусмотрел ещё небольшое удобство, и связано оно вот с чем: от того как будут объединяться буферы зависит в каком порядке будут следовать каналы (первый -> второй или второй -> первый) и в каком порядке будут следовать светодиоды в каждом из каналов (в прямом или обратном). Всё это можно задать с помощью макросов: DISPLAY_PRIORITY_Ch2 и DISPLAY_PRIORITY_Ch3 (порядок отображения каналов), DIRECTION_LEDS_Ch2 и DIRECTION_LEDS_Ch3 (порядок отображения светодиодов в канале).
Приближаемся к финишу. В-четвёртых, осталось передать сформированные данные. Покажу только вариант с прерыванием по SPI (вариант без использования прерывания отличается незначительно). Он состоит из функции, которая запускает передачу и разрешает прерывание по SPI и непосредственно самого прерывания:
Вот, по большому счёту, вся программа. Ссылку на проект простого индикатора уровня звука на умных светодиодах WS2812B для Arduino Pro Mini со скетчем прилагаю: https://github.com/onikita/Simple-VU-meter.git Для скачивания проекта нужно нажать зелёную кнопку Clone or download и выбрать Download ZIP. Чтобы запустить проект, необходимо скачанную папку поместить в папку libraries среды Arduino. Проект проверен и работает в Arduino-1.0.6. Также напоминаю: узнать о схеме подключения VU-метра можно в этой статье.
P.S. Мы разобрали программу простого индикатора уровня — без «излишеств». Здесь, например, нет регулировки плавности, падающей точки, авторегулировки уровня, каких-то изысканных цветовых схем. При необходимости и знании можно самостоятельно добавить различные настройки, эффекты и цветовые схемы. Например, у нас получился такой индикатор уровня:
С уважением, Никита О.
Датчик уровня звука — нониус
Датчик уровня звука позволяет легко измерять уровень звука в децибелах (дБ) в различных школьных условиях. Просто подключите и соберите — для использования этого датчика не требуются базовые знания о взвешивании уровня звука, времени отклика или шкале децибел.
Датчик уровня звука имеет шкалу А, то есть реагирует на громкость звука так же, как человеческое ухо. Он измеряет уровень звука с точностью до 3 дБ в одном диапазоне от 55 до 110 дБ, при этом нет необходимости переключаться между диапазонами во время эксперимента. Вы можете контролировать уровень шума в классе, измерять время реверберации и исследовать звукоизоляцию.
Шумомер лучше подходит для изучения физики в средней школе или колледже для углубленного изучения звука. Если вы заинтересованы в сборе данных о звуковых волнах, используйте Вернье-микрофон.
Experiments
High School (1 experiments)Experiment | Lab Book |
---|---|
Sound and Loudness | Physics Explorations and Projects |
Эксперимент | Лабораторная книга |
---|---|
Звуковой и громкость | Физические исследования и проекты |
9009
9000. 9000.
LabQuestИнтерфейс | Приложение LabQuest | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
LabQuest 3 | Полная поддержка |
Full support | |
LabQuest (discontinued) | Full support |
---|
Software | |||
---|---|---|---|
Interface | Graphical Analysis App for Computers | Logger Pro | Logger Lite |
LabQuest Mini | Полная поддержка | Полная поддержка | Full support |
LabQuest 3 | Full support | Full support | Incompatible |
LabQuest 2 (discontinued) | Full support | Full support | Full support |
LabQuest Stream | Полная поддержка 1 | Полная поддержка | Полная поддержка 1 |
Go!Link | Полная поддержка | Full support | Full support |
LabQuest (discontinued) | Full support | Full support | Full support |
LabPro (discontinued) | Incompatible | Full support | Full поддержка |
Примечания о совместимости
- Подключить LabQuest Stream через USB. Беспроводное соединение не поддерживается.
Software | |
---|---|
Interface | Graphical Analysis App for Chrome |
LabQuest Mini | Full support |
LabQuest 3 | Full support |
LabQuest 2 (discontinued) | Полная поддержка |
LabQuest Stream | Полная поддержка 1 |
Go!Link | Полная поддержка |
LabQuest (снято с производства) | Полная поддержка |
Примечания по совместимости
- Подключение LabQuest Stream через USB. Беспроводное соединение не поддерживается.
Программное обеспечение | |||||||
---|---|---|---|---|---|---|---|
Интерфейс | Приложение графического анализа для IOS | Графический анализ GW для IOS | |||||
. 0023 | Full support | ||||||
LabQuest 3 | Full support 1 | Full support 1 | |||||
LabQuest 2 (discontinued) | Full support 1 | Full support 1 |
Примечания по совместимости
- Устройства iOS и Android ™ могут подключаться к LabQuest 2 или LabQuest 3 только через Wireless Data Sharing.
Программное обеспечение | ||
---|---|---|
Интерфейс | Приложение графического анализа для Android | Графический анализ GW для Android |
Labquest Stream | ||
Labquest | ||
Labquest | ||
1 | Полная поддержка 1 | |
LabQuest 2 (снято с производства) | Полная поддержка 1 | Полная поддержка 1 |
Примечания по совместимости
- Устройства iOS и Android ™ могут подключаться только к LabQuest 2 или LabQuest 3 через Wireless Data Sharing.
Примечания по совместимости
- Этот датчик может считывать только необработанные значения счета/напряжения. Вы должны выполнить программирование для преобразования в соответствующие единицы измерения датчика.
Программное обеспечение | ||||
---|---|---|---|---|
Interface | EasyData | TI-84 SmartView | DataQuest | TI-Nspire Software |
EasyLink | Full support 1 | Full support 2 | Full support | Полная поддержка 2 |
CBL 2 | Полная поддержка 3 | Несовместимость | Несовместимость | Несовместимость |
LabPro (discontinued) | Full support 3 | Incompatible | Incompatible | Incompatible |
TI-Nspire Lab Cradle (discontinued) | Incompatible | Incompatible | Full support | Полная поддержка |
Примечания по совместимости
- Используйте только с калькуляторами TI-84 Plus.
- Требуется Easy to Go! адаптер
- Интерфейсы CBL 2 и LabPro нельзя использовать с калькуляторами TI-84 Plus CE.
Поддержка
Ресурсы
- Руководство по пользователю
- FAQS и Советы по устранению неполадок
- Инструкции по подключению для LabQuest Sensors
Warranty
5-й.
— Реклама —
Здесь представлен монитор уровня шума/звука на базе Arduino, который отображает уровни звука в децибелах (дБ) и соответствующие уровни напряжения на ЖК-дисплее. Система мониторинга шума используется во многих приложениях, таких как здравоохранение, оборона, горнодобывающая промышленность, робототехника и так далее.
Эта схема специально разработана для мониторинга шума в общественных местах, например, на вечеринках и торжественных мероприятиях. Слух человека составляет около 80 дБ — звуки выше этого уровня могут вызвать потерю слуха, если звук высокого уровня или громкость воспроизводится в течение длительного времени.
Схема и работа
Принципиальная схема системы мониторинга шума показана на рис. 1. Она построена на плате Arduino Uno, батарее 9 В, буквенно-цифровом ЖК-дисплее 16×2 (JHD162A), модуле датчика звука и нескольких других компонентах. .
Рис. 1: Принципиальная схема монитора уровня шума— Реклама —
При обнаружении звука микрофоном в модуле датчика звука соответствующие уровни напряжения и звука отображаются в дБ на LCD1. Выход звукового датчика представляет собой аналоговое напряжение, которое преобразуется в цифровое через встроенный аналого-цифровой преобразователь Arduino. Аналоговое напряжение находится в диапазоне от 0 В до 5 В, и соответствующее эквивалентное цифровое значение от 0 до 1023 отображается на последовательном мониторе Arduino IDE.
Модуль датчика звука
Это устройство принимает звуковые волны и преобразует их в электрические сигналы. Он определяет интенсивность звука в окружающей атмосфере. Модуль датчика звука, используемый в этом проекте, показан на рис. 2. Он имеет емкостный микрофон, чувствительный к звуку. Звуковые волны изменяют емкость и соответствующее изменение напряжения. Поскольку изменение довольно слабое, его необходимо усилить.
Рис. 2: Модуль датчика звукаLM393 используется в качестве усилителя мощности в модуле. Он имеет встроенную предустановку для настройки чувствительности аналогового выходного контакта (OUT).
Подключите контакт OUT (или контакт S в некоторых случаях) модуля датчика звука к контакту аналогового входа Arduino Uno. Вы увидите значение интенсивности звука на последовательном мониторе, а также на LCD1.
ЖК-модуль
ЖК-модуль 16×2 (LCD1) — это 16-контактный ЖК-дисплей, который легко доступен на рынке. Обратитесь к его техническому описанию, чтобы получить информацию о выводах. Предустановка (VR1) используется для регулировки контрастности ЖК-дисплея.
Arduino Uno
Arduino Uno R3 основан на микроконтроллере ATmega328 (MCU). Он содержит четырнадцать цифровых входных/выходных контактов, шесть аналоговых входных контактов, кварцевый осциллятор 16 МГц, разъем USB, разъем питания, разъем ICSP и кнопку сброса.
Программирование выполняется с помощью Arduino IDE. Аналоговые входные контакты от A0 до A5 доступны на Arduino Uno (Board1). Когда программа (Audio_meter.ino) обнаруживает аналоговые сигналы на этих входных контактах, соответствующий сигнал отображается на последовательном мониторе ПК и на LCD1.
Конструкция и испытания
Схема печатной платы измерителя уровня шума показана на рис. 3, а схема расположения компонентов — на рис. 4. Соберите компоненты на печатной плате в соответствии со схемой. В этом проекте аналоговый вывод OUT звукового датчика подключен к выводу A5 Arduino, вывод Vcc к 5V, а вывод GND к выводу заземления (GND) Arduino.
Рис. 3: Схема платы монитора уровня шумаРис. 4: Компоновка компонентов для печатной платыЗагрузите PDF-файлы печатной платы и компоновки компонентов:
щелкните здесьЗагрузите
Исходная папкаПодключите Arduino к компьютеру с помощью USB-кабеля.