View Categories

Микрофон на MAX9814

Arduino весьма неплохо измеряет напряжение, почему бы не подключить к ней микрофон? Просто голый микрофонный капсюль подключать нет смысла, для работы с ним понадобятся ещё некоторые электронные компоненты для усиления и улучшения сигнала. У китайцев есть несколько вариантов микрофонных модулей, но самый хороший из них – на базе микросхемы MAX9814 (вынесен на картинке справа):

В наборе GyverKIT START IOT EXTRA
Микрофон

Данный модуль обеспечивает:

  • Усиление сигнала с микрофона до амплитуды 1.25V (выходной диапазон 0.. 2.5V)
  • Встроенный АРУ – автоматическая регулировка усиления, выравнивает громкость тихих и громких звуков
  • Подавление шума – сигнал с микрофона довольно чистый даже при не очень хорошем питании. Его очень приятно обрабатывать, да и рацию можно сделать

Пины и настройки модуля:

  • GND и Vdd (V+): питание, 3.. 5V
  • Out: выход сигнала для подключения к МК
  • Gain (G): настройка усиления
    • Никуда не подключен: 60dB
    • На GND: 50dB
    • На VCC: 40dB
  • AR: настройка компрессии звука (время восстановления)
    • Никуда не подключен: 1:4000 мс
    • На VCC: 1:2000 мс
    • На GND: 1:500 мс

Подключение к Arduino #

К питанию и на аналоговый пин:

Примечание:

  • На схеме с Arduino (слева) можно переключить опорное напряжение (пин REF) на встроенный источник 3.3V, желательно через резистор на 10к. Соответственно в программе вызвать analogReference(EXTERNAL). Это нужно для того, чтобы расширить диапазон чтения сигнала микрофона и обрабатывать его более точно (он выдаёт 0.. 2.5V)
  • На схеме с Wemos (справа) мы подключаем микрофон на питание 3.3V. Сигнал он всё равно выдаёт 0.. 2.5V, что очень хорошо: у Wemos как раз 3.3V – верхняя граница напряжения на аналоговый пин A0

Программирование #

Модуль выдаёт аналоговый сигнал, то есть его достаточно опрашивать стандартными средствами Arduino для получения сырого сигнала - analogRead():

void setup() {
  Serial.begin(115200);

  // переключаем на внешнее опорное
  // его подключаем к 3.3V
  analogReference(EXTERNAL);
}

void loop() {
  Serial.println(analogRead(0));
}

Откроем монитор порта и скажем что-нибудь в микрофон:

Отлично! Но это сырой сигнал, с ним работать неудобно – он не отражает усреднённую громкость, а всего лишь показывает форму "звуковой волны".

Библиотеки #

Сигнал нуждается в дальнейшей обработке, например интегрирования амплитуды. Для этого можно использовать библиотеку VolAnalyzer, которая обработает звук и преобразует громкость в нужный диапазон, а также будет автоматически подстраивать чувствительность при изменении среднего уровня громкости. Также умеет определять "пики", например громкие моменты в музыке или хлопки/удары. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.

#include "VolAnalyzer.h"
VolAnalyzer analyzer(A0);  // микрофон на А0

void setup() {
  Serial.begin(115200);

  // переключаем на внешнее опорное
  // его подключаем к 3.3V
  analogReference(EXTERNAL);
}

void loop() {
  // если анализ завершён
  if (analyzer.tick()) {
    Serial.println(analyzer.getVol());  // вывести громкость
  }
}

Получатся гораздо более применимые для проектов значения:

Отловить громкий импульс можно так:

// ...

void loop() {
  analyzer.tick();  // анализ

  if (analyzer.pulse()) Serial.println("pulse!");
}

Полезные страницы #

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Прокрутить вверх