Оглавление:

Аналоговый измеритель уровня громкости с поддержкой Bluetooth: 6 шагов
Аналоговый измеритель уровня громкости с поддержкой Bluetooth: 6 шагов

Видео: Аналоговый измеритель уровня громкости с поддержкой Bluetooth: 6 шагов

Видео: Аналоговый измеритель уровня громкости с поддержкой Bluetooth: 6 шагов
Видео: Маленький но Крутой! 👍 Усилитель AIYIMA D05 - 120Wx2 2024, Ноябрь
Anonim
Аналоговый измеритель уровня громкости с поддержкой Bluetooth
Аналоговый измеритель уровня громкости с поддержкой Bluetooth

Это был мой проект для одного из моих университетских классов под названием SMP. Поскольку мы использовали отладочную плату STM32F103RB, я основал свой проект на этом, начав с простого измерителя уровня громкости. Затем я добавил некоторые дополнительные функции, такие как поддержка Bluetooth, для передачи значений из АЦП в приложение Android, чтобы создать простую диаграмму в дБ.

Шаг 1. Используемые компоненты

  • Совет по развитию STM32F103RB
  • Модуль bluetooth HC-05 zs040
  • Панель аналогового измерителя VU (ссылка)
  • Электретный микрофон
  • Счетверенный операционный усилитель LM324N
  • 2 транзистора TIP120
  • 3 диода 1N4148
  • Различные конденсаторы и резисторы

Хотя вы можете отключить эту схему от шины 5 В на плате, я также использовал внешний источник питания 5 В.

Шаг 2: Последователь конверта

Последователь конверта
Последователь конверта
Последователь конверта
Последователь конверта

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

Необработанный сигнал с микрофона сначала проходит через усилитель с коэффициентом усиления 150.

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

Последняя часть вычитает напряжение смещения 1,65 В из выхода повторителя огибающей, чтобы обеспечить сигнал 0 В для отсутствия звука, 1,65 В для среднего звука и 3,3 В для громкого звука, который должен быть совместим со встроенным АЦП платы.

Этот последователь конверта реализован из этого замечательного ответа StackExchange.

Шаг 3: ШИМ для аналогового измерителя

Чтобы стрелка датчика работала, я настроил таймер TIM4 на плате микроконтроллера с частотой около 500 Гц.

Последовательно пробуя разные рабочие циклы, я установил некоторые значения, которых было достаточно, чтобы стрелка сместилась от 0 до 100.

Я подробно расскажу о процессе отображения точного значения на следующем шаге, применив некоторые математические вычисления.

Шаг 4: Калибровка микрофона

Калибровка микрофона
Калибровка микрофона
Калибровка микрофона
Калибровка микрофона

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

Чтобы «перевести» это значение в фактическое значение в дБ, я использовал онлайн-генератор тонального сигнала с частотой 550 Гц и мой Android-устройство для получения эталонного значения.

Я нанес эти значения на график и использовал инструмент MatLAB Curve Fit Tool, чтобы получить функцию, которая сопоставляет показания АЦП с фактическими приближениями уровней дБ (или, по крайней мере, достаточно близкими к показаниям моего телефона).

Мы видим, что это соответствует логарифмической шкале микрофона.

Я также сделал то же самое, чтобы сопоставить положение иглы со значениями ШИМ. Я собрал эти значения, последовательно увеличивая значение ШИМ на 10 до тех пор, пока на его шкале не появится необходимость.

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

Шаг 5. Приложение для Android

Приложение использует эту классную библиотеку для связи через последовательный порт Bluetooth для обмена байтовой информацией.

Основное предостережение этой системы заключается в том, что максимальная длина слова, отправляемого по Bluetooth, составляет 8 бит, а значение АЦП представлено как 12 бит. Чтобы решить эту проблему, я разделил одно значение АЦП на 2 отдельных 6-битных значения (MSB и LSB), а оставшиеся 2 бита использовались для идентификации типа сообщения (MSB, LSB, CHK).

Поэтому для одного значения АЦП, которое мы хотим транслировать, мы разделяем фактическое значение на 2 сообщения. Чтобы проверить целостность этих сообщений, я отправил третье сообщение с XOR первых двух сообщений.

После проверки целостности значения мы можем применить ту же функцию, чтобы получить уровень в дБ и нанести его на нашу живую диаграмму.

Шаг 6: Резюме

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

Исходный код этого проекта можно найти здесь:

  • Сопутствующее приложение для Android - репо
  • Код микроконтроллера - репо

Не стесняйтесь вносить свой вклад, если вы сочтете это полезным.

Рекомендуемые: