Працюємо з 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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Концевой выключатель или концевик

Концевой выключатель или концевик

Имеет одну группу переключающихся контактов. На кончике рычага установлен подвижный ролик.Максимальн..

15.61грн.

Моно усилитель мощности 18 Вт TDA2030A

Моно усилитель мощности 18 Вт TDA2030A

Модуль одноканального усилителя мощности звуковой частоты на основе легендарной микросхемы TDA2030A...

41.61грн.

Припой с канифолью 0,5мм 30г

Припой с канифолью 0,5мм 30г

Нить припоя для тонкой пайки мелких радиодеталей, содержащая флюсСвинца 40 %Олова 60 %Флюса 1,2 %Нап..

119.21грн.

Силовой MOSFET транзистор IRF520 N-канальный

Силовой MOSFET транзистор IRF520 N-канальный

MOSFET транзистор 3-го поколенияИспользуется для скоростной коммутации мощных исполнительных механиз..

13.62грн.

Стойка роликовая для оси X 2шт. с крепежом

Стойка роликовая для оси X 2шт. с крепежом

Монтажная панель из МДФ для организации оси Х автоматического лазерного гравера.Отверстия под шаговы..

110.99грн.