🛒
0 товаров
0 руб.

Интернет-магазин «Неглупый Дом»


🔊 Проект: индикатор среднего уровня шума в помещении на микрофоне MAX4466 с выводом на TM1637

В другом проекте на сайте тот же усилитель микрофона MAX4466 ловит резкие короткие пики громкости для хлопкового выключателя. Здесь используется противоположный подход: вместо реакции на мгновенный пик Arduino считает скользящее среднее отклонение сигнала за последние секунды, получая устойчивый "фоновый уровень шума" помещения, а не реакцию на отдельные хлопки или стуки.

Как это работает

Звуковой сигнал с MAX4466 постоянно колеблется вокруг среднего уровня — чем громче звук в помещении в целом (речь, музыка, работающее оборудование), тем сильнее и чаще эти колебания отклоняются от среднего. Если просто взять одно мгновенное отклонение, число будет очень "дёргающимся" и бесполезным для общей оценки — вместо этого проект копит абсолютное отклонение каждого отдельного измерения и через заданное количество измерений вычисляет среднее значение, которое куда более устойчиво представляет общий уровень шума за этот промежуток времени.

В отличие от хлопкового выключателя (где важен момент резкого пика выше порога) и от охранной сигнализации на KY-038 (где важен сам факт одного превышения), здесь нет понятия "одного события" — весь смысл именно в усреднении множества быстрых измерений в одно медленно меняющееся число, подходящее для отображения на дисплее без постоянного мерцания от каждого отдельного случайного колебания.

Пошаговая сборка

Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.

  1. MAX4466: аналоговый выход (OUT) → A0 Arduino, VCC → 5V, GND → GND.
  2. TM1637: CLK → D9, DIO → D10, VCC → 5V, GND → GND.
  3. На плате MAX4466 есть подстроечный резистор усиления — отрегулируйте его так, чтобы при обычной тишине показания были заметно ниже, чем при разговоре в полный голос.

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.

#include <TM1637Display.h>

TM1637Display display(9, 10); // CLK, DIO

const int MIC_PIN = A0;
const int SAMPLES = 200; // сколько измерений усредняем в одно показание

int baseline = 512;

void setup() {
  Serial.begin(9600);
  display.setBrightness(5);

  long sum = 0;
  for (int i = 0; i < 50; i++) { sum += analogRead(MIC_PIN); delay(2); }
  baseline = sum / 50; // уровень тишины в начале работы
}

void loop() {
  long totalDeviation = 0;

  for (int i = 0; i < SAMPLES; i++) {
    int raw = analogRead(MIC_PIN);
    totalDeviation += abs(raw - baseline);
    delay(1);
  }

  int noiseLevel = totalDeviation / SAMPLES; // среднее отклонение за SAMPLES измерений

  Serial.print("Уровень шума (отн.): ");
  Serial.println(noiseLevel);

  display.showNumberDec(noiseLevel);
}

Библиотека TM1637Display ставится через Менеджер библиотек Arduino IDE. Показание — относительное число, а не калиброванные децибелы: для сравнения разных помещений важна одинаковая настройка усиления на плате MAX4466, иначе числа будут несопоставимы между разными сборками схемы.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 🔢 цифровой ваттметр мощности нагрузки на INA…📶 удалённое уведомление об обнаружении огня … →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу в корзину: 216 ₽ 194 ₽ (экономия 22 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина


Поиск



Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA