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

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


👏 Проект: хлопковый выключатель на электретном микрофоне MAX4466 с управлением реле

Модуль MAX4466 — усилитель сигнала с обычного электретного микрофона с регулируемым коэффициентом усиления. В этом проекте Arduino следит за резкими пиками громкости на его аналоговом выходе и переключает реле при обнаружении хлопка, как в классическом "звукоактивированном выключателе".

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

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

Главная сложность такого проекта — не спутать один хлопок с несколькими срабатываниями: после резкого пика сигнал ещё некоторое время "звенит" затухающими колебаниями (эхо в комнате, резонанс диафрагмы микрофона), которые могут ошибочно засчитаться как второй и третий хлопок. Поэтому после каждого засчитанного срабатывания в коде есть короткая "глухая" пауза, в течение которой новые пики игнорируются.

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

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

  1. MAX4466: аналоговый выход (OUT) → A0 Arduino, VCC → 5V, GND → GND.
  2. Модуль реле: сигнальный вход → D2, VCC → 5V, GND → GND.
  3. На плате MAX4466 есть маленький подстроечный резистор усиления — если хлопки не детектируются, увеличьте усиление; если срабатывает от любого звука, уменьшите.
  4. Нагрузку подключайте к COM/NO реле строго по инструкции модуля — эта часть схемы может работать с реальным сетевым напряжением и должна быть собрана аккуратно и изолированно.

Скетч

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

const int MIC_PIN = A0;
const int RELAY_PIN = 2;
const int THRESHOLD = 150;       // порог отклонения от среднего уровня — подберите по месту
const unsigned long COOLDOWN = 600; // мс "глухой" паузы после срабатывания, чтобы не ловить эхо хлопка

bool relayState = false;
unsigned long lastTrigger = 0;
int baseline = 512;

void setup() {
  Serial.begin(9600);
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW);

  long sum = 0;
  for (int i = 0; i < 50; i++) { sum += analogRead(MIC_PIN); delay(2); }
  baseline = sum / 50; // средний уровень тишины в помещении
}

void loop() {
  int raw = analogRead(MIC_PIN);
  int deviation = abs(raw - baseline);

  if (deviation > THRESHOLD && millis() - lastTrigger > COOLDOWN) {
    relayState = !relayState;
    digitalWrite(RELAY_PIN, relayState ? HIGH : LOW);
    lastTrigger = millis();

    Serial.println(relayState ? "Хлопок! Включено." : "Хлопок! Выключено.");
  }
}

Дополнительных библиотек не требуется — только `analogRead()`. Калибровка фонового уровня `baseline` выполняется один раз при старте, поэтому включайте схему в той же тишине, в которой она будет дальше работать.

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

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

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

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

← 🚧 сигнализатор границы (линии) на датчике от…👁️ умный выключатель света по присутствию и о… →

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

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

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

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

Корзина


Поиск



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