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!");
}
Полезные страницы #
- Набор GyverKIT – наш большой стартовый набор Arduino, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])
- Поддержать автора за работу над уроками