Працюємо з 09:00 до 19:00 без вихідних
Київ біля ТЦ Квадрат бул.Перова

Понадобилось мне замерять фоновый уровень звука для проекта умного дома и оказалось, что это не простая задача, даже имея специальный модуль звука с аналоговым выходом. Для начала я просто подключил аналоговый выход датчика на аналоговый вход 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, Которые можно преобразовать или в напряжение или в проценты или в децибеллы. Я себе для умного дома собираюсь использовать преобразование в проценты. 

Похоже, что мой датчик звука рассчитан на достаточно громкий шум и возможно для увеличения чувствительности к негромким шорохам придется использовать, что-то самодельное.

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Бегущие огни на Ардуино

Бегущие огни на Ардуино

Arduino бегущая дорожка из светодиодовДелаем бегущие огни из светодиодов на Arduino. В данном случае..

Датчик уровня дискретный горизонтальный

Датчик уровня дискретный горизонтальный

Дискретный датчик, срабатывающий при достижении жидкостью определенного уровня и выше его. В сработа..

55.89грн.

LM317 линейный регулятор напряжения

LM317 линейный регулятор напряжения

Популярная микросхема - регулируемый регулятор напряженияВыходное напряжение 1,25 ... 37 ВВыходной т..

6.21грн.

Датчик звука

Датчик звука

Интеллектуальный дискретный датчик звука. Рабочее напряжение питания 4...6 В постоянного тока. Чувст..

22.37грн.

Цифровой датчик температуры и влажности DHT11 с подтягивающим резистором

Цифровой датчик температуры и влажности DHT11 с подтягивающим резистором

Измерение относительной влажности в пределах 20 ... 90 %Точность измерения влажности ± 5,0 %RHИ..

46.12грн.