Микрофон MAX 9814 для Arduino

Подскажите, можно ли как-то программно настроить микрофон так, что бы он реагировал только на ОЧЕНЬ громкий звук, например, на взрыв петарды рядом?

Я подключил вывод Gain к +5В, для минимального коэф-та усиления. В коде прописал, что бы функция пульс реагировала на максимуме громкости, но функция все равно срабатывает и на негромкие хлопки в ладони.

// амплитудный анализ звука

#include "VolAnalyzer.h"  //Для микрофона MAX 9814
VolAnalyzer analyzer(A0);

void setup() {
  Serial.begin(9600);

  analyzer.setVolMin(1);    // установить минимальную величину громкости (умолч 0)
  analyzer.setVolMax(100);  // установить максимальную величину громкости (умолч 100)

  analyzer.setPulseMax(99);      // верхний порог срабатывания пульса (по шкале громкости)
  analyzer.setPulseMin(95);      // нижний порог перезагрузки пульса (по шкале громкости)
  analyzer.setPulseTimeout(100);  // таймаут пульса, мс
}

void loop() {
  if (analyzer.tick()) {

    //  Serial.print(analyzer.pulse() * 20); // скачок громкости (в текущем варианте все равно слишком чувствительный)
    //    Serial.print("       "); // скачок громкости
    if (analyzer.pulse()) Serial.println(analyzer.getVol());
  }
}

а что вам мешает читать и реагировать только на максимальную громкость ?

А что говорит автор библиотеки?

то, что максимальная громкость начинается с легкого хлопка в ладоши. Микрофон уже показывает максимальное значение. Изменение настроек указанных в первом посте помогло, но не сильно.

да все он говорит, даже по русски

// =========================== TICK ===========================
// опрашивать как можно чаще. Может принимать значение, если это виртуальный анализатор
// вернёт true при окончании анализа выборки
bool tick(int read = -1);

// ========================== SETTINGS ==========================
void setPin(int8_t pin);        // указать пин АЦП
void setDt(uint16_t dt);        // установить время между опросами АЦП (мкс) (по умолч. 500) 
void setWindow(uint8_t window); // установка ширины окна выборки (по умолч. 20)
void setTrsh(uint16_t trsh);    // установить порог громкости в единицах АЦП (умолч 40)

// ========================== VOLUME ==========================
void setVolDt(uint8_t dt);      // установить период фильтрации громкости (умолч 20)
void setVolK(uint8_t vk);       // установить коэффициент плавности громкости 0-31 (умолч 25)
uint16_t getVol();              // получить громкость в пределах setVolMin.. setVolMax
void setVolMin(uint8_t vol);    // установить минимальную величину громкости (умолч 0)
void setVolMax(uint8_t vol);    // установить максимальную величину громкости (умолч 100)

// ========================= AMPLITUDE =========================
void setAmpliDt(uint8_t dt);    // установить период фильтрации амплитудных огибающих
void setAmpliK(uint8_t rk);     // установить коэффициент плавности амплитуды 0-31 (умолч 31)
uint16_t getMin();              // получить текущее значение огибающей минимумов (с v1.5 - 0)
uint16_t getMax();              // получить текущее значение огибающей максимумов

// =========================== PULSE ===========================
void setPulseMax(uint8_t maxV); // верхний порог срабатывания пульса (по шкале громкости)
void setPulseMin(uint8_t minV); // нижний порог перезагрузки пульса (по шкале громкости)
void setPulseTimeout(uint16_t tout);    // таймаут пульса, мс
bool pulse();                   // резкий скачок громкости (true)

// ========================== RAW DATA ===========================
uint16_t getRaw();              // получить значение сырого сигнала за выборку
uint16_t getTrsh();             // получить порог громкости в единицах АЦП

Да в общем то вот все то, что указано на гитхабе. Только исправление этих настроек не помогло особо.

ССЫЛКА

Я почему и разместил в разделе Аппаратных вопросов, может перепаять модуль как-то можно. Не думаю, что я первый, кому надо реагировать только на ОЧЕНЬ громкие звуки.

и это тоже?

void setTrsh(uint16_t trsh);    // установить порог громкости в единицах АЦП (умолч 40)

Я так понял эта функция отфильтровывает звуки по минимальной громкости, но не влияет на максимальное значение.

Попробую.

тут еще про аппаратные настройки почитай

В общем спасибо.

Увеличил это значение до 250 и использовал функцию analyzer.getRaw();

Ардуина перестала реагировать на негромкие хлопки в ладоши, но реагирует на громкий стук. Думаю получится донастроить.

Ну и отметь #7 как «Вопрос решен», не сложно же ))

Вам разве не это надо?

Вообще, наверно глупость скажу, но мне кажется “громкость” звука - понятие относительное. И микрофон реагирует на скачок уровня, а не на саму величину