Понадобилось мне замерять фоновый уровень звука для проекта умного дома и оказалось, что это не простая задача, даже имея специальный модуль звука с аналоговым выходом. Для начала я просто подключил аналоговый выход датчика на аналоговый вход WiFi-контроллера, который раз в две минуты передавал значения со входа в интернет на мой сайт. На сайте я лицезрел график изменения этого сигнала. Его уровень зависел только от положения движка подстроечного резистора и от шума в помещении не зависел.
И не удивительно, ведь на выходе аналогового датчика звука получаем колебания относительно какой-то постоянной составляющей, которая подстраивается резистором. И, чтобы замерять уровень шума, необходимо найти размах колебаний исключив постоянную составляющую.
Схема подключения
Здесь показана схема подключения любого датчика звука с аналоговым выходом, который вам попадется. У меня был датчик с дискретным и аналоговым выходами в одном. Дискретный выход висел в воздухе.
Программа контроллера
Здесь в цикле измерений делается столько замеров, сколько контроллер успеет за 50 мс и из них находятся максимальное и минимальное значение. После чего размахом считаем разницу этих значений, а это и есть искомый уровень звука.
const int sampleWindow = 50; // время выборки значений mS (50 mS = 20Hz)
unsigned int sample;
void setup()
{
Serial.begin(9600);
}
void loop()
{
unsigned long startMillis= millis();
unsigned int peakToPeak = 0; // размах колебаний
unsigned int signalMax = 0;
unsigned int signalMin = 1024;
// собираем данные на протяжении 50 mS
while (millis() - startMillis < sampleWindow)
{
sample = analogRead(0);
if (sample < 1024)
{
if (sample > signalMax)
{
signalMax = sample; // сохранение максимального значения
}
else if (sample < signalMin)
{
signalMin = sample; // сохранение минимального значения
}
}
}
peakToPeak = signalMax - signalMin; // max - min = размах колебаний
Serial.println(peakToPeak);
}
Вывод
Просматривая открытый монитор порта, получаем уровень звука в относительных величинах от 0 до 1023, Которые можно преобразовать или в напряжение или в проценты или в децибеллы. Я себе для умного дома собираюсь использовать преобразование в проценты.
Похоже, что мой датчик звука рассчитан на достаточно громкий шум и возможно для увеличения чувствительности к негромким шорохам придется использовать, что-то самодельное.