Працюємо з 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 - що це таке?

Arduino це недорога, доступна для покупки електронна плата з мікроконтролером та виводами входів-вих..

Стійка нейлонова М3 8мм + 6мм

Стійка нейлонова М3 8мм + 6мм

Стійка для кріплення усіляких електронних модулів до корпусу пристроюВисота стійки 8 ммДовжина зовні..

2.16грн.

Універсальна плата під мікросхеми SOP16 або SSOP16

Універсальна плата під мікросхеми SOP16 або SSOP16

Універсальна монтажна плата, дозволяє проводити монтаж різноманітних мікросхем з поверхневим монтаже..

8.66грн.

Модуль живлення знижуючий з 4...35В до 1,25-32В 5А

Модуль живлення знижуючий з 4...35В до 1,25-32В 5А

Модуль живлення на основі спеціалізованої мікросхеми XL4005Діапазон вхідних напруг 4...35 ВДіапазон ..

45.41грн.

Кінцевик з коліщатком для 3D принтера або CNC ramps 1.4

Кінцевик з коліщатком для 3D принтера або CNC ramps 1.4

Кінцевий вимикач для встановлення на 3D-принтер або CNC-верстат системи ramps 1.4В комплекті кабель ..

33.01грн.